OpenCart 3.0.5.0 Journal3 3.2.8 Dynamic Content Ingyenes kiegészítő

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?

1

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.

2

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).

3

Megjelenítés

A Twig sablon kirajzolja a listát inline CSS-sel és egy JavaScript blokkkal.

4

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.

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óMegjegyzés
OpenCart 3.0.5.0 Tesztelt
Journal3 téma 3.2.8 Tesztelt
PHP 7.x / 8.x Kompatibilis

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
Tipp: Másolás előtt készíts biztonsági mentést, ha az adott fájlok már léteznek a szerveren.

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:

📄 admin/model/catalog/product.php

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 (részlet)
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 alkalmazható ahol dynamic content választható. Például a Modules → Blocks. Hozz létre egy blokkot amit majd később felhasználsz.

Related Bundle – Blocks beállítás

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 megjelenítés szabályait.

4

Megjelenítést formázd ahogy neked szükséges.

5

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átumVá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ó.