GLS PickUP Hungary
Szállítási Modul
GLS csomagpont és csomagautomata választó szállítási modul OpenCart 3.0.5 webshopokhoz, Journal3 és alap OC3 pénztárral egyaránt. Telepítés után azonnal működik – nincs szükség checkout módosításra.
Mit csinál?
A modul egy kereshető dropdown listát jelenít meg a pénztárban, amelyből a vásárló kiválaszthatja a kívánt GLS csomagpontot vagy automatát. A szállítási cím automatikusan a kiválasztott pont adataira cserélődik a rendelésben – az email kiküldése előtt.
- GLS parcel shop és parcel locker helyek dropdown listában, városonként csoportosítva
- A szállítási mód kizárólag akkor számít kiválasztottnak, ha konkrét pont van megjelölve – placeholder esetén a GLS nem aktív, a rendelés nem adható le ezzel a móddal
- Másik szállítási módra váltáskor a csomagpont-választás automatikusan visszaáll a placeholderre
- A rendelés leadása után a szállítási cím mezők automatikusan felülíródnak a kiválasztott pont adataival (utca, város, irányítószám, GLS azonosító)
- Beállítható szállítási költség, ingyenes küszöb, maximum súly és méret
- A csomagpont lista az admin felületről egy gombbal frissíthető a GLS API-ról
- Működik Journal3 QuickCheckout és alap OC3 pénztárban egyaránt
A modul önellátó: semmilyen checkout controller, footer vagy OCMod fájlmódosítás nem szükséges – a JS automatikusan töltődik be, ha a GLS szállítási mód elérhető.
Hogyan működik?
Pénztár folyamata (vásárlói oldal)
JS betöltés
Az OC3 meghívja a getQuote() metódust. Ha a GLS szállítási mód elérhető (geo-zone, súly, méret megfelel), a modell $this→document→addScript('glshu.js') hívással beinjektálja a scriptet az oldalba – OCMod vagy checkout módosítás nélkül.
Dropdown injektálás
A glshu.js MutationObserver-rel figyeli a DOM-ot. Amint a GLS radio megjelenik, egyszer letölti az AJAX endpointról (extension/shipping/glshu/getPoints) a dropdown HTML-t, és JS változóban cache-eli – DOM újrarajzoláskor (pl. Journal3 recalculation) nincs újabb szerverhívás.
Csomagpont választás
A vásárló kiválaszt egy pontot a dropdownból. A JS beállítja a rejtett radio értékét (glshu.glshu{place_id}), checked=true-ra állítja, és Journal3-ban meghívja a _QuickCheckout.save()-t – a session frissül a pontos kóddal. Az utolsó érvényes választást a glshuLastSelected változó tárolja, hogy DOM újrarajzolás után is visszaállítható legyen.
Placeholder vagy módváltás esetén
Ha a vásárló visszavált a placeholderre, vagy másik szállítási módot választ, a GLS radio checked=false lesz, és a select visszaáll a placeholderre. Az OC3 / QuickCheckout „nincs szállítási mód" állapotot lát, és természetesen megakadályozza a rendelés leadását.
Cím frissítés folyamata (rendelés után)
Rendelés létrejön
A catalog/model/checkout/order::addOrder() lefut – a szállítási cím ekkor még a vásárló saját lakcíme.
Event handler
Az OC3 event rendszere az addOrder/after horgon meghívja az event/glshu_order::afterAddOrder() metódust. Az event az oc_event táblában van regisztrálva, az install() futásakor kerül oda.
Cím felülírás
A handler kiolvas a sessionből a glshu.glshu{place_id} kódot, DB-ből lekéri a csomagpont adatait, majd SQL UPDATE-tel felülírja az oc_order tábla négy mezőjét. A shipping_firstname, shipping_lastname, shipping_company mezők érintetlenek maradnak.
Megerősítő email
Az OC3 ezután küldi ki a megerősítő emailt – már a csomagpont adataival.
Rendelésbe kerülő cím mezők
| Mező (oc_order) | Tartalom |
|---|---|
shipping_address_1 | Csomagpont utca + házszám |
shipping_address_2 | GLS azonosító | Csomagpont neve (pl. H1234 | GLS CityPoint) |
shipping_city | Csomagpont városa |
shipping_postcode | Csomagpont irányítószáma |
Adatbázis tábla (oc_z_glshu)
| Mező | Típus | Leírás |
|---|---|---|
place_id | INT(6) AUTO_INCREMENT PK | Belső azonosító |
name | VARCHAR(50) | Csomagpont neve |
city | VARCHAR(25) | Város (nagybetűs) |
pcode | VARCHAR(4) | Irányítószám |
address | VARCHAR(50) | Utca, házszám |
country | VARCHAR(10) | Ország (pl. Hungary) |
type | VARCHAR(20) | parcel-shop vagy parcel-locker |
id | VARCHAR(25) | GLS belső azonosító (pl. H1234) |
sort | VARCHAR(3) | Sorrend (jelenleg fix: 1) |
Event regisztráció
Az install() az alábbi rekordot írja az oc_event táblába:
| Mező | Érték |
|---|---|
code | glshu_order_address_fix |
trigger | catalog/model/checkout/order/addOrder/after |
action | event/glshu_order/afterAddOrder |
status | 1 (aktív) |
install() futtatásakor kerül be – ez automatikusan lefut, amikor az admin felületen aktiválod a modult. Ha korábban telepítve volt, először kapcsold ki (Disable), majd kapcsold vissza (Enable).
Követelmények
| Komponens | Verzió | Státusz |
|---|---|---|
| OpenCart | 3.0.5 | ✔ Tesztelt |
| Journal3 téma | 3.28 | ✔ Tesztelt – QuickCheckout + alap OC3 pénztár |
| PHP | 8.0, 8.1, 8.2 | ✔ Kompatibilis |
| MySQL / MariaDB | bármely aktuális | ✔ MyISAM engine a csomagpont táblához |
| allow_url_fopen | PHP beállítás | ✔ Szükséges a GLS API eléréséhez |
allow_url_fopen legtöbb tárhelyen alapértelmezetten be van kapcsolva. Ha a csomagpont frissítés nem működik, ellenőrizd ezt a beállítást.
1. Fájlok feltöltése
Töltsd fel az összes fájlt FTP / SFTP-vel a webshop gyökérkönyvtárába. A mappastruktúra megfelel a szerver struktúrájának – egyszerű 1:1 másolás.
| upload/ | |
| ├── admin/ | → webshop gyökér/admin/ |
| └── catalog/ | → webshop gyökér/catalog/ |
| install.xml | → webshop gyökér/ |
2. OCMod frissítés
Megnyitás
Admin → Extensions → Modifications
Refresh
Kattints a Refresh gombra (jobbra fent, kék ikon). Az OC3 feldolgozza az install.xml-t és frissíti a módosítás gyorsítótárat.
install.xml jelenleg üres módosítást tartalmaz – ez normális. A Refresh mégis szükséges, hogy az OC3 regisztrálja az extension-t.
3. Aktiválás az admin felületen
Navigálás
Admin → Extensions → Extensions → Shipping
Install
Keresd meg a GLS PickUP sort a listában, majd kattints az Install gombra (zöld + ikon). Ez lefuttatja az install() metódust:
- Létrehozza az
oc_z_glshutáblát (CREATE TABLE IF NOT EXISTS) - Beregisztrálja a cím frissítő eventet az
oc_eventtáblában - Letölti a GLS csomagpont adatait az API-ról
Edit
Kattints az Edit gombra (ceruza ikon) a beállítások megadásához.
map.gls-hungary.com API-ról. Ez néhány másodpercig tarthat – ne navigálj el az oldalról, amíg a folyamat be nem fejeződik.
4. Beállítások
| Beállítás | Leírás | Alapértelmezett |
|---|---|---|
| Státusz | Modul engedélyezése / letiltása | Letiltva |
| Szállítási költség | GLS csomagpont szállítási ára (az üzlet alap pénznemében) | 0 |
| Ingyenes fölött | Ennyi összeg felett a szállítás ingyenes. 0 = mindig fizetős | 0 |
| Maximum súly (kg) | Ha a kosár összsúlya meghaladja, a GLS opció nem jelenik meg | 40 |
| Maximum méret (cm) | Ha bármely termék leghosszabb oldala meghaladja, a GLS opció nem jelenik meg | 200 |
| Típus | Csak csomagpontok (parcel-shop) / Csak automaták (parcel-locker) / Mindkettő | Csak csomagpontok |
| Adó | Adóosztály a szállítási díjhoz | Nincs |
| Terület | Geo-zone korlátozás. Ha üres, mindenütt elérhető | Minden terület |
| Sorrend | A szállítási módok listájában elfoglalt hely (kisebb = előrébb) | 0 |
5. Csomagpontok frissítése
A GLS rendszeresen frissíti a csomagpont listáját. A modul beépített frissítővel rendelkezik:
Megnyitás
Admin → Extensions → Shipping → GLS PickUP → Edit
Frissítés
Kattints a sárga „Címlista frissítése" gombra (jobb felső sarok). A rendszer letölti a legfrissebb adatokat a GLS API-ról (map.gls-hungary.com/data/deliveryPoints/hu.json), törli a régi adatokat és újratölti a teljes táblát.
place_id értékek megváltozhatnak – a már lezárt rendelések nem érintettek, mert azoknál a csomagpont adata az oc_order táblában van rögzítve.
Az admin beállítások oldal alján az összes elérhető csomagpont táblázatban jelenik meg a frissítés után.
Frissítés újabb verzióra
- Töltsd fel az új fájlokat FTP-vel (felülírja a régieket)
- Admin → Extensions → Modifications → Refresh
- Admin → Extensions → Shipping → GLS PickUP → Disable, majd Enable – ez újra futtatja az
install()-t, ami frissíti az event regisztrációt - Ellenőrizd a beállításokat – az értékek megmaradnak
install() CREATE TABLE IF NOT EXISTS-t használ, tehát a meglévő csomagpont adatokat nem törli frissítéskor.
Eltávolítás
- Admin → Extensions → Shipping → GLS PickUP → Uninstall (piros gomb) – törli az
oc_z_glshutáblát és aglshu_order_address_fixevent bejegyzést - Fájlok manuális törlése a szerverről (az összes feltöltött fájl)
- Admin → Extensions → Modifications → Refresh
oc_z_glshu táblát és az összes csomagpont adatot visszavonhatatlanul törli. A korábban már lezárt rendelések szállítási adatait ez nem érinti.
Hibaelhárítás
A csomagpont dropdown nem jelenik meg a pénztárban
- Ellenőrizd, hogy a modul státusza Engedélyezve
- Böngésző konzolban ellenőrizd, hogy a
glshu.jsbetöltődött-e (Network tab) - Ellenőrizd, hogy az
oc_z_glshutáblában vannak-e sorok (Admin → Edit → csomagpont lista az oldal alján) - A
getQuote()csak akkor tölti be a JS-t, ha a GLS szállítási mód elérhető – ellenőrizd a súly/méret limiteket és a geo-zone beállítást
A rendelés szállítási cím nem frissül a csomagpont adataira
- Ellenőrizd az
oc_eventtáblában, hogy létezik-e aglshu_order_address_fixsor - Ha nem létezik: Admin → GLS PickUP → Disable, majd Enable
- Ellenőrizd a PHP error_log-ban, hogy van-e
[GLSHU]bejegyzés rendelés leadásakor
GLS-t kiválasztva le lehet adni a rendelést csomagpont nélkül
- A GLS csak akkor számít kiválasztottnak, ha a selectben konkrét pont van (nem placeholder). Ellenőrizd, hogy a
glshu.jsbetöltődött-e - Ha a JS nem fut, a rejtett radio értéke a szerver által visszaadott alapértelmezett lehet – töltsd újra az oldalt és ellenőrizd az OCMod Refresh-t
„Címlista frissítése" gomb nem csinál semmit / fehér oldalt dob
- Az
allow_url_fopenPHP beállítás ki van kapcsolva – engedélyezd aphp.ini-ben vagy a tárhely vezérlőpultban - Tűzfal blokkolja a
map.gls-hungary.comAPI-t a szerver oldalon - PHP
max_execution_timelejár – az API válasz lassú lehet, növeld az időkorlátot
Telepítéskor SQL hiba / tábla nem jön létre
- Ellenőrizd, hogy az adatbázis felhasználónak van-e
CREATE TABLEjogosultsága - MySQL strict mode esetén ellenőrizd a PHP error_log-ot a pontos hibaüzenetért
Nincs jogosultságod hiba az admin mentésnél
- Admin → System → Users → User Groups → adjunk hozzá
extension/shipping/glshujogosultságot (view + modify)
Debug: event ellenőrzése adatbázisban
SELECT * FROM oc_event WHERE code = 'glshu_order_address_fix';
Ha üres az eredmény, az event nincs regisztrálva. Megoldás: Disable + Enable a modul admin felületén.
Debug: utolsó rendelések szállítási adatai
SELECT order_id, shipping_address_1, shipping_address_2, shipping_city, shipping_postcode
FROM oc_order
ORDER BY order_id DESC
LIMIT 5;
Ha a shipping_address_2 tartalmaz H1234 | GLS CityPoint formátumú adatot, az event sikeresen futott.
Fájlszerkezet
| upload/ | |
| ├── admin/controller/extension/shipping/ | |
| │ └── glshu.php | Admin: telepítés, beállítások, csomagpont frissítés |
| ├── admin/language/en-gb/extension/shipping/ | |
| │ └── glshu.php | Angol nyelvfájl (admin) |
| ├── admin/language/hu-hu/extension/shipping/ | |
| │ └── glshu.php | Magyar nyelvfájl (admin) |
| ├── admin/view/template/extension/shipping/ | |
| │ └── glshu.twig | Admin beállítások sablon |
| ├── catalog/controller/event/ | |
| │ └── glshu_order.php | Event handler: cím frissítés rendelés után |
| ├── catalog/controller/extension/shipping/ | |
| │ └── glshu.php | AJAX: csomagpont lista (getPoints) és adatok (getPointData) |
| ├── catalog/language/*/extension/shipping/ | |
| │ └── glshu.php | Nyelvfájlok (frontend) – en-gb és hu-hu |
| ├── catalog/model/extension/shipping/ | |
| │ └── glshu.php | Fő logika: getQuote(), getPoints(), JS betöltés |
| └── catalog/view/javascript/ | |
| └── glshu.js | Frontend: dropdown, szinkron, select-alapú validáció |
| install.xml | OCMod (üres – nem módosít fájlokat, de szükséges az OC3-nak) |
Fájlonkénti szerepek
| Fájl | Szerepe |
|---|---|
admin/controller/.../glshu.php |
install(): tábla létrehozása, event regisztráció, GLS adatok letöltése uninstall(): tábla és event törlése refresh_data(): GLS API lekérése, adatbázis feltöltése index(): beállítások oldal |
catalog/model/.../glshu.php |
getQuote($address): szállítási ajánlat, JS betöltés (addScript), geo-zone / súly / méret ellenőrzés, POST és session alapú place_id meghatározásgetPoints(): HTML dropdown generálása az AJAX válaszhoz; a radio display:none, a select önmaga a szállítási mód választó
|
catalog/controller/.../glshu.php |
getPoints(): AJAX endpoint – a model getPoints()-át hívja, HTML visszaadásagetPointData(): egy csomagpont JSON adatai place_id alapján |
catalog/controller/event/glshu_order.php |
afterAddOrder(): az addOrder/after event hívja. Sessionből kiolvas, DB-ből lekéri a csomagpont adatait, UPDATE-eli az oc_order táblát
|
catalog/view/javascript/glshu.js |
1. blokk: MutationObserver – GLS radio megjelenésekor AJAX-szal betölti a dropdown HTML-t; cache-eli JS változóban; a glshuLastSelected változó tárolja az utolsó érvényes választást, visszaállítja DOM újrarajzolás után2. blokk: select change esemény – érvényes pont: radio.checked=true + _QuickCheckout.save(); placeholder: radio.checked=false; más szállítási mód választásakor a select visszaáll placeholderre
|
Változásnapló
| Verzió | Dátum | Változás |
|---|---|---|
| 1.7 | 2026-04-15 |
Select-alapú szállítási mód logika: a radio gomb rejtett, a GLS kizárólag akkor számít kiválasztottnak, ha a selectben konkrét csomagpont van megjelölve. Placeholder esetén a radio checked=false – az OC3 automatikusan blokkolja a rendelés leadását. Másik szállítási módra váltáskor a select visszaáll placeholderre. glshuLastSelected változó bevezetése a DOM újrarajzolás utáni visszaállításhoz. JS validációs blokk (3. blokk) eltávolítva.
|
| 1.6 | – | JS cache kezelés és MutationObserver alapú dropdown injektálás. Journal3 QuickCheckout integráció. |
| 1.0 | – | Első kiadás. |