Conditional Description
Journal3 Dynamic Content vezérlő, amely termékoldalon kondicionálisan jeleníti meg a termékleírást: ha az angol leírás elegendően hosszú, azt adja vissza teljes egészében; egyébként a magyar leírás első 300 karakterét mutatja rövidítve – mindkét esetben egy „Bővebben" linkkel kiegészítve.
Mit csinál?
A kiegészítő a Journal3 Dynamic Content mechanizmusán belül fut, és a termékoldal egy kijelölt blokkjában dinamikusan tölti be a megfelelő leírásrészletet. Egyetlen PHP fájlból áll, nincs admin felülete – kizárólag a Journal3 modul-konfigurációban kell megadni.
- Lekéri az adott termék angol (
language_id = 1) és magyar (language_id = 2) leírását egyetlen SQL lekérdezéssel. - Ha az angol leírás legalább 40 érdemi karaktert tartalmaz (HTML-tagek nélkül), azt adja vissza dekódolt HTML formában.
- Ha az angol leírás hiányzik vagy túl rövid, a magyar leírás első 300 karakterét adja vissza egyszerű szövegként (félszó-törés nélkül).
- Minden esetben egy
<a id="read-more-desc">Bővebben</a>linket fűz a kimenethez, amelyet egy külső JavaScript kezel a teljes leírás megjelenítéséhez. - Ha a
product_idnem érhető el a kérésben, üres stringet ad vissza – oldalhibát nem okoz.
A vásárló a termékoldalon egy kompakt leírásrészletet lát, majd a „Bővebben" linkre kattintva fér hozzá a teljes tartalomhoz. Az adminnak nincs tennivalója a kiegészítővel kapcsolatban termékszinten – elegendő a megfelelő nyelvű leírást kitölteni a termékadatlapon.
Hogyan működik?
Belépési pont – Dynamic Content hívás
A Journal3 a termékoldal renderelése közben meghívja az index($settings)
metódust. Az URL-ből vagy a kérés paramétereiből veszi a product_id-t
($this->request->get['product_id']). Ha nincs jelen, a metódus azonnal
üres stringgel tér vissza, hiba nélkül.
Leírások lekérése – egyetlen SQL lekérdezés
Egy SELECT-tel egyszerre kéri le az angol és a magyar leírást az
oc_product_description táblából
(language_id IN (1, 2)). Ez minimalizálja az adatbázis-terhelést.
Az eredményt az language_id szerint szétválasztja két változóba
($desc_en_raw, $desc_hu_raw).
Döntési logika – angol vs. magyar
Az angol leírásból eltávolítja a HTML-tageket és dekódolja a HTML-entitásokat
(strip_tags + html_entity_decode), majd megszámolja
az UTF-8 karakterek számát. Ha ez eléri a 40 karaktert,
a teljes angol HTML-tartalmat adja vissza dekódolva, hozzáfűzve a „Bővebben" linket.
Ha az angol leírás hiányzik vagy 40 karakternél rövidebb, a magyar leírás tiszta
szövegét veszi alapul. Ebből az első 300 karaktert vágja ki
(mb_substr), majd egy regex-szel (preg_replace('/\s+\S*$/u', '', ...))
eltávolítja az esetleg félbeszakadt utolsó szót. Az eredményt
htmlspecialchars-szal biztonságosan escapeli, sortöréseket
<br>-re alakítja, és hozzáfűzi a „Bővebben" linket.
„Bővebben" link – külső JavaScript kapcsolódási pont
A visszaadott HTML-ben minden esetben szerepel egy
<a id="read-more-desc" role="button">Bővebben</a> elem.
Ennek kezelése (pl. a teljes leírás megjelenítése modálban vagy expand-effekttel)
egy külön JavaScript-ben van – ez a kiegészítő csak a linket szúrja be,
a viselkedést nem definiálja.
Telepítés
Fájlok másolása
Másold az upload/ mappában lévő fájlt az OpenCart gyökérkönyvtárába:
| upload/ | ||
| └── catalog/ | ||
| └── controller/ | ||
| └── journal3/ | ||
| └── conditional_description.php | → | catalog/controller/journal3/conditional_description.php |
catalog/controller/journal3/ mappa
(más Journal3 dynamic content kiegészítők miatt), csak a fájlt kell bemásolni.
Journal3 beállítás
A fájl másolása után a vezérlőt be kell kötni a Journal3 admin felületén Dynamic Content modulként a termékoldalon.
Dynamic Content modul létrehozása
Navigálj az Admin → Journal3 → Modules → Dynamic Content menüpontba, és adj hozzá egy új modult. A Controller mezőbe írd be:
journal3/conditional_description
Elhelyezés a termékoldalon
Navigálj a Journal3 → Theme Editor → Product Page nézetbe, és húzd be az újonnan létrehozott Dynamic Content modult arra a pozícióra, ahol a rövidített leírást meg szeretnéd jeleníteni (pl. a főleírás helyett vagy felett).
id="read-more-desc")
csak akkor működik, ha a tematikába be van kötve az azt kezelő JavaScript.
Ennek hiányában a link megjelenik, de kattintásra nem csinál semmit.
Cache törlése
Mentés után töröld az OpenCart cache-t: Admin → Dashboard → fogaskerék ikon → Refresh, majd töröld a böngésző cache-t is (Ctrl+Shift+R / Cmd+Shift+R).
Fájlszerkezet
| conditional_description-oc305j328/ | |
| ├── docs/ | |
| ├── conditional-description-oc3j3.html | Ez a dokumentáció |
| └── docs.css | Közös stíluslap (nem módosítható) |
| └── upload/ | |
| └── catalog/controller/journal3/ | |
| └── conditional_description.php | Journal3 Dynamic Content vezérlő – a kiegészítő egyetlen fájlja |
Változásnapló
| Verzió | Dátum | Változás |
|---|---|---|
| 1.0 | 2026-03-30 | Első kiadás. Kondicionális leírás-megjelenítés: angol leírás prioritása (≥40 karakter), visszaesés magyar rövidítésre (300 karakter, félszó-törés nélkül). OpenCart 3.0.3.x + Journal3 3.x alatt tesztelt. |