Related Bundle – Journal3 OpenCart kiegészítő
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 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?
- A widget a Journal3 modul API-ján keresztül töltődik be, a
product_idGET paraméter alapján. - A controller (
ControllerJournal3RelatedBundle) lekéri az OpenCart beépítettgetProductRelated()metódusával a kapcsolódó termékeket, majd előkészíti az adatokat (kép, ár, mennyiség). - A Twig sablon kirajzolja a listát inline CSS-sel és egy JavaScript blokkkal.
- A JS a
#button-cartgombclickeseményére figyel, és a bejelölt termékeket acheckout/cart/addvégpontra küldifetch()hívással, aszinkron módon.
Fontos: Az OpenCart alapértelmezés szerint kétirányú kapcsolatot hoz létre a kapcsolódó termékek között (ha A-hoz hozzárendeled B-t, akkor B-nél is megjelenik A). Ez a bundle widget esetén nem kívánt viselkedés. A helyes, egyirányú működéshez szükséges egy admin oldali módosítás (lásd lent).
Követelmények
| Komponens | Verzió |
|---|---|
| OpenCart | 3.x |
| Journal3 téma | bármely aktuális verzió |
| PHP | 7.x / 8.x |
Telepítés
1. 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 |
2. 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 admin/model/catalog/product.php 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.
Megjegyzés: A módosítás előtt már meglévő kétirányú kapcsolatok az adatbázisban maradnak. Érdemes ezeket manuálisan átnézni az adminban, és szükség esetén eltávolítani a nem kívánt irányú kapcsolatokat.
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 alkalamazható 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 megjelnítés szabályait
- Megjelenítést formázd ahogy neked szükséges
- Builderben hozz létre egy sors és add hozz a már elkészített blokkot.
Fájlszerkezet
| related_bundle/ | |
| ├── readme.md | |
| ├── readme.html | |
| └── 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 |