Related Bundle
Termékoldali „vásárolja meg együtt" bundle widget Journal3 témához. A kiegészítő az aktuális termék kapcsolódó termékeit jeleníti meg jelölőnégyzetekkel és mennyiségmezőkkel, lehetővé téve a vásárlónak, hogy egyetlen kattintással több terméket tegyen a kosárba. Modulban dynamic content-ként használható.
Mit csinál?
A termékoldal kosárba rakás gombja alatt (vagy a Journal3 által meghatározott pozícióban) megjelenik egy lista a termékhez hozzárendelt kapcsolódó termékekről. Minden sorban látható:
- jelölőnégyzet (be/ki)
- mennyiség mező
- termék miniatűr képe
- termék neve
- termék ára (adóval számítva, az aktuális pénznemben; ha van akciós ár, az jelenik meg)
Ha a vásárló bejelöl egy vagy több kapcsolódó terméket, majd rákattint a fő termék „Kosárba" gombjára, az összes bejelölt kapcsolódó termék automatikusan, a megadott mennyiségben kerül a kosárba – külön kattintás nélkül.
Hogyan működik?
Betöltés
A widget a Journal3 modul API-ján keresztül töltődik be, a product_id GET paraméter alapján.
Adatlekérés a controllerben
A controller (ControllerJournal3RelatedBundle) közvetlen SQL lekérdezéssel kéri le a kapcsolódó termékeket a product_related táblából. A lekérdezés tartalmaz egy albekérdezést az érvényes akciós ár (product_special) meghatározásához, figyelembe véve a vevőcsoportot és az időbeli érvényességet. Az eredmény alapján a controller előkészíti az adatokat (kép resize, ár- és adóformázás az aktuális pénznemben).
Megjelenítés
A Twig sablon kirajzolja a listát inline CSS-sel és egy JavaScript blokkkal.
Kosárba rakás
A JS a #button-cart gomb click eseményére figyel, és a bejelölt termékeket a checkout/cart/add végpontra küldi fetch() hívással, aszinkron módon.
Követelmények
| Komponens | Verzió | Megjegyzés |
|---|---|---|
| OpenCart | 3.0.5.0 | ✔ Tesztelt |
| Journal3 téma | 3.2.8 | ✔ Tesztelt |
| PHP | 7.x / 8.x | ✔ Kompatibilis |
Telepítés
Fájlok másolása
Másold az upload/ mappában lévő fájlokat az OpenCart gyökérkönyvtárába, megőrizve a mappastruktúrát:
| upload/ | ||
| └── | catalog/ | |
| ├── | controller/journal3/ | |
| │ └── | related_bundle.php | → catalog/controller/journal3/related_bundle.php |
| └── | view/theme/journal3/template/journal3/ | |
| └── | related_bundle.twig | → catalog/view/theme/journal3/template/journal3/related_bundle.twig |
Admin modell módosítása (kötelező)
Az OpenCart alapértelmezés szerint a kapcsolódó termékek mentésekor automatikusan visszafelé mutató kapcsolatot is létrehoz. Ez azt eredményezi, hogy ha A termékhez hozzárendeled B-t, B terméknél is megjelenik A a bundle widgetben – ami nem kívánt.
A visszafelé mutató kapcsolat kikapcsolásához módosítsd az alábbi fájlt:
Keresd meg az editProduct() függvényen belül az alábbi blokkot, és töröld ki (vagy kommentezd ki) az utolsó két $this->db->query(...) sort:
if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
// Ezeket a sorokat töröld ki:
// $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
// $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
}
}
A módosítás után a kapcsolat egyirányú: csak annál a terméknél jelenik meg a bundle widget, amelyiknél az adminban beállítottad.
Admin beállítás – kapcsolódó termékek megadása
A bundle widgetben megjelenő termékeket az OpenCart admin felületén lehet megadni, termékenként:
Nyisd meg: Katalógus → Termékek → [termék szerkesztése]
Navigálj a „Hivatkozások" fülre.
Add hozzá azokat a termékeket, amelyeket a bundle widgetben szeretnél megjeleníteni ennél a terméknél.
Mentsd el a terméket.
Journal3 widget elhelyezése
A Journal3 bármely moduljában alkalmazható ahol dynamic content választható. Például a Modules → Blocks. Hozz létre egy blokkot amit majd később felhasználsz.
A kosár gomb alatti megjelenítéshez:
Nyisd meg: Product Extras → Extra modules
Hozz létre egy Modult.
Állítsd be a megjelenítés szabályait.
Megjelenítést formázd ahogy neked szükséges.
Builderben hozz létre egy sort és add hozzá a már elkészített blokkot.
Fájlszerkezet
| related_bundle/ | |
| ├── docs/related-bundle-oc3j3.html | Ez a dokumentáció |
| └── upload/catalog/ | |
| ├── controller/journal3/ | |
| │ └── related_bundle.php | Modul controller: adatlekérés, ár- és képformázás |
| └── view/theme/journal3/template/journal3/ | |
| └── related_bundle.twig | Sablon: HTML, CSS, JavaScript |
Változásnapló
| Verzió | Dátum | Változás |
|---|---|---|
| 1.1 | 2026-03-30 |
Kompatibilitási frissítés – OC 3.0.5.0 + Journal3 3.2.8. A controller átírva közvetlen SQL lekérdezésre, mert a Journal3 dynamic content kontextusában az OpenCart modell-metódusai ( getProductRelated()) nem érhetők el megbízhatóan.
Az akciós ár (product_special) albekérdezéssel, vevőcsoport- és dátumszűréssel kerül lekérdezésre.
A Twig sablon szerkezete nem változott.
|
| 1.0 | 2025 | Első kiadás – controller + Twig sablon, inline CSS és JS, Journal3 dynamic content integráció. |