GLS PickUP Hungary
Szállítási Modul
GLS csomagpont és csomagautomata választó szállítási modul OpenCart 3.0.5 webshopokhoz, Journal 3.28 é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.
✨ Funkciók
Csomagpont & automata
GLS parcel shop és parcel locker helyek, szűrhető típusonként. Adatbázis az admin felületről egy gombbal frissíthető a GLS API-ról.
Városonként csoportosítva
A dropdown lista városonként, azon belül irányítószám és név szerint rendezett. Budapesten kerületenként van csoportosítva.
Automatikus JS betöltés
A JavaScript automatikusan töltődik be, amikor a GLS szállítási mód elérhető. Semmilyen checkout fájl módosítása nem szükséges.
Cím frissítés rendelés után
A rendelés leadása után, de az email kiküldése előtt az adatbázisban a szállítási cím automatikusan a kiválasztott csomagpont adataira cserélődik.
Súly & méretkorlát
Beállítható maximum súly (kg) és oldalhossz (cm). Ha a kosár meghaladja a limitet, a GLS opció automatikusan eltűnik a szállítási módok közül.
Ingyenes szállítási küszöb
Egy összeghatár felett a szállítás automatikusan ingyenes lesz – nincs szükség külön kuponra.
Journal 3 & alap OC3
Egyaránt működik a Journal 3.28 QuickCheckout pénztárban és az OpenCart 3 beépített pénztárában.
Validáció
Journal3 pénztárban a rendelés nem adható le, amíg konkrét csomagpont nincs kiválasztva a listából. Standard OC3-ban ezt a szerver oldali validáció kezeli.
📋 Követelmények
allow_url_fopen PHP beállításnak engedélyezettnek kell lennie a GLS API eléréséhez (csomagpont lista letöltése). Ez legtöbb tárhelyen alapértelmezetten be van kapcsolva.
⚙️ Hogyan működik
A modul két független mechanizmusból áll: az interaktív pénztár UI-ból és a cím frissítő event handler-ből.
Pénztár folyamata (vásárlói oldal)
getQuote()-t → GLS elérhető → document→addScript('glshu.js')glshu.js MutationObserver figyeli a DOM-ot → GLS radio megjelenikextension/shipping/glshu/getPoints → HTML dropdown visszatöltve és JS memóriában cache-elve (csak egyszer töltődik le oldalanként)glshu.glshu{place_id} → session frissülCím frissítés folyamata (rendelés után)
catalog/model/checkout/order::addOrder() lefut → rendelés létrejönaddOrder/after → event/glshu_order::afterAddOrder()glshu.glshu{place_id} → DB lekérdezés a csomagpont adataiértoc_order táblán – cím mezők felülírva a csomagpont adataivalAdatbázis tábla
Telepítéskor automatikusan létrejön az oc_z_glshu tábla:
| 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) |
Hogyan frissül a szállítási cím a rendelésben
Az event handler az alábbi mezőket írja felül az oc_order táblában:
| Mező | 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 |
A shipping_firstname, shipping_lastname, shipping_company mezők érintetlenek maradnak – a vevő neve megmarad.
📁 Fájlstruktúra & Kód
Fájlonkénti leírás
| Fájl | Szerepe |
|---|---|
admin/controller/.../glshu.php |
install(): tábla létrehozása, event regisztráció az oc_event táblában, GLS adatok letöltéseuninstall(): tábla törlése, event törlése refresh_data(): GLS API lekérése és adatbázis feltöltése index(): beállítások oldal megjelenítése |
catalog/model/.../glshu.php |
getQuote($address): szállítási ajánlat visszaadása, $this→document→addScript() JS betöltés, 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 |
catalog/controller/.../glshu.php |
getPoints(): AJAX endpoint – a model getPoints()-át hívja és HTML-t ad visszagetPointData(): egy csomagpont JSON adatait adja vissza place_id alapján |
catalog/controller/event/glshu_order.php |
afterAddOrder(): az addOrder/after event hívja. Kiolvas a sessionből, 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; a választ JS változóban cache-eli, így DOM-újrarajzoláskor (pl. Journal3 recalculation) nincs újabb szerver hívás 2. blokk: select ↔ radio szinkronizáció, Journal3 _QuickCheckout.save() hívás3. blokk: Journal3 validáció – _QuickCheckout.confirm() hookja, placeholder esetén blokkolja a rendelést
|
install.xml |
OCMod fájl – jelenleg üres (nem módosít semmit). Szükséges az OC3 extension rendszeréhez |
Az event regisztráció működése
Az OC3 event rendszere az oc_event táblából tölti be a hookokat az oldal betöltésekor. A modul telepítésekor (install()) az alábbi rekord kerül be:
| 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 a DB-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), hogy az event újra regisztrálódjon.
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 mappa struktúra megfelel a szerver struktúrájának – egyszerű 1:1 másolás.
-
1Nyisd meg az FTP klienst (pl. FileZilla)
-
2Navigálj a webshop gyökérkönyvtárába (ahol az
index.phpvan) -
3Másold fel az
upload/mappa tartalmát – azadmin/éscatalog/mappákat a gyökérbe, azinstall.xml-t szintén a gyökérbe
2 OCMod frissítés
-
1Admin → Extensions → Modifications
-
2Kattints a Refresh gombra (jobbra fent, kék ikon)
Az OC3 feldolgozza azinstall.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, nem kell aktív OCMod bejegyzést keresni. A Refresh mégis szükséges, hogy az OC3 regisztrálja az extension-t.3 Aktiválás az admin felületen
-
1Admin → Extensions → Extensions → Shipping
-
2Keresd meg: GLS PickUP a listában
-
3Kattints az Install gombra (zöld + ikon)
Ez lefuttatja azinstall()metódust:
• Létrehozza azoc_z_glshutáblát
• Beregisztrálja a cím frissítő eventet azoc_eventtáblában
• Letölti a GLS csomagpont adatait az API-ról -
4Kattints 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 megadása
| 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 |
Melyik csomagpont típust jelenítse meg: • Csak csomagpontok (parcel-shop) • Csak automaták (parcel-locker) • Automaták & Csomagpontok (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:
-
1Admin → Extensions → Shipping → GLS PickUP → Edit
-
2Kattints 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 – ha más rendszerek hivatkoznak ezekre (pl. korábbi rendelések), azok nem érintik a már lezárt rendeléseket, mert ott a csomagpont adata már az oc_order táblában van rögzítve.
Az admin beállítások oldal alján megjelenik az összes elérhető csomagpont táblázata 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 azinstall()-t, ami frissíti az event regisztrációt és a tábla struktúrá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 azoc_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 – azok az oc_order táblában vannak.🔧 Hibaelhárítás
1. Ellenőrizd, hogy a modul státusza Engedélyezve.
2. Böngésző konzolban keresd a [GLSHU] üzeneteket – ha nincs, a glshu.js nem töltődött be.
3. Ellenőrizd, hogy az oc_z_glshu táblában vannak-e sorok (Admin → Edit → csomagpont lista látható-e az oldal alján).
4. 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.
1. Ellenőrizd az oc_event táblában, hogy létezik-e a glshu_order_address_fix sor.
2. Ha nem létezik: Admin → GLS PickUP → Disable, majd Enable (újra futtatja az install()-t).
3. Ellenőrizd a PHP error_log-ban, hogy van-e [GLSHU] bejegyzés rendelés leadásakor.
4. Valószínű ok: a vásárló GLS-t választott, de nem választott konkrét csomagpontot a listából (a session csak glshu.glshu-t tartalmaz place_id nélkül).
Ellenőrizd, hogy az adatbázis felhasználónak van-e CREATE TABLE jogosultsága. MySQL szigorú módban (strict mode) is előfordulhat hiba – ellenőrizd a PHP error_log-ot a pontos hibaüzenetért.
1. A allow_url_fopen PHP beállítás ki van kapcsolva – engedélyezd a php.ini-ben vagy a tárhely vezérlőpultban.
2. Tűzfal blokkolja a map.gls-hungary.com API-t a szerver oldalon – ellenőrizd cURL-lel: curl https://map.gls-hungary.com/data/deliveryPoints/hu.json
3. PHP max_execution_time lejár – az API válasz lassú lehet, növeld az időkorlátot.
A glshu.js 3. blokkja hookol a _QuickCheckout.confirm()-ba. Ha ez mégsem blokkolja, ellenőrizd böngésző konzolban, hogy a [GLSHU] Event listener-ek hozzáadva üzenet megjelenik-e. Ha nem, a Journal3 API megváltozott – frissíteni kell a modult.
A getQuote() POST-ellenőrzéssel dolgozik – a Continue gomb POSTjából olvassa ki a place_id-t. Ha a validáció mégis hibát dob, ellenőrizd a PHP verziót (8.0+ szükséges) és hogy a $this→request→post elérhető-e a modell kontextusban.
Admin → System → Users → User Groups → adjunk hozzá extension/shipping/glshu jogosultsá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és cím adatainak ellenőrzése
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.