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?

  1. A widget a Journal3 modul API-ján keresztül töltődik be, a product_id GET paraméter alapján.
  2. A controller (ControllerJournal3RelatedBundle) lekéri az OpenCart beépített getProductRelated() metódusával a kapcsolódó termékeket, majd előkészíti az adatokat (kép, ár, mennyiség).
  3. A Twig sablon kirajzolja a listát inline CSS-sel és egy JavaScript blokkkal.
  4. 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.
⚠️

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

KomponensVerzió
OpenCart3.x
Journal3 témabármely aktuális verzió
PHP7.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:

PHP – admin/model/catalog/product.php
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:

  1. Nyisd meg: Katalógus → Termékek → [termék szerkesztése]
  2. Navigálj a „Hivatkozások" fülre.
  3. Add hozzá azokat a termékeket, amelyeket a bundle widgetben szeretnél megjeleníteni ennél a terméknél.
  4. 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:

  1. Nyisd meg: Product Extras → Extra modules
  2. Hozz létre egy Modult.
  3. Állítsd be a megjelnítés szabályait
  4. Megjelenítést formázd ahogy neked szükséges
  5. 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