OpenCart kategória menü doboz átalakítása

Az OpenCart alpértelmezett telepítése után a kezdőoldalon egy baloldali boxban az áruház kategóriái jelennek meg. Ha az adott kategória linkjére kattintunk az kibontásra kerül és láthatjuk a hozzá tartozó alkategóriákat.

Ezt a viselkedést módosítani szeretném úgy, hogy mindig amikor a főoldal töltődik be akkor az egész kategória hierarchiát lássam a megjelenő dobozban.

A módosítás menete és az érintett fájlok:

Az MVC és az objekumorientált elvek alkalmazásának köszönhetően viszonylag könnyen azonosíthatjuk az érintett elemeket. Az Opencart főkönyvtárából a catalog könyvtárba lépve találjuk az áruházhoz tartozó elemeket. (Model, View, Controller, Language). A kategórát kezelő “category” egy külön modul, amit az admin felületről be illetve ki tudunk kapcsolni vagy a dobozt a bal vagy jobb oldalra tudjuk pozícionálni. A sorrend meghatározásánál pedig beállíthatjuk, hogy melyik már létező doboz alatt vagy fölött jelenjen meg.

A módosításnál vagy egy külön saját modult hozunk létre vagy pedig a meglévőt módosítjuk. Én most az utóbbit választottam. Ennek az az oka, hogy nagyon kicsi módosításra van szükség, ami a controllert érinti csak. Igaz, így az admin felületről ezt a változtatást nem tudjuk befolyásolni és egy esetleges OpenCart frissítés során ezek a módosítások felülíródhatnak! Tehát ennek megfelelően kell mérlegelnünk. Az új modul létrehozása elegánsabb megoldás és független az egész meglévő modultól is és esetlegesen könnyebben integrálható más meglévő OpenCart megoldásokba is. Ehhez azonban ismernünk kell az OpenCart modulok felépítését, ami a fejlesztési időt megnöveli. A rövid távon nyert idő, hosszú távon többszörösébe kerülhet. Úgy gondolom, hogy ez általában sok esetben így van. A ma meghozott döntések erősen befolyásolják, korlátozzák vagy segítik a jövőbeni fejlesztésekre fordított időt. Az OpenCart modulok felépítését egy másik cikkben fogom ismertetni. Jól látható, hogy ebből előbb utóbb mindenki profitálhat majd, mert a testreszabás, egyedi működés egyik kulcsáról van szó!

A controller helye (vagyis az, ami megmondja, hogyan működjön): opencart/catalog/controller/module/category.php

A model helye (vagyis a kategória adatbázishoz kapcsolódó műveletek):
opencart/catalog/model/catalog/category.php

A view helye (vagyis ahol a template található):
opencart/catalog/view/theme/default/template/module/category.tpl
Nincs önálló template motorja, hanem az adott változókat echo val írja ki, ez performancia szempontjából kedvező.

A módosításaink a controller -ben lévőket érinti.

A megoldandó feladat és a teendők elméletben:

Nagyon fontosnak tartom, hogy mielőtt vadul nekiesnénk a kódot túrni tudjuk mit teszünk és mi lesz a következménye! Ez nagyobb rendszereknél elengedhetetlen! Sajnos bizonyos jellegű fejlesztések erre a szigorra nem kényszerítik az embert és a következmények úgy gondolom jól ismertek. Bizonytalan működés, hiba hiba hátán, utólagos módosítási idő növekedés = hatékonyság csökkenés = teljes költség növekedés. Ne tegyük ezt, még akkor sem, ha az idő szorít és erős a külső kényszer !

A kategórákat az adatbázisban a következő módon tároljuk:

category (category_id, parent_id, image, sort_order, date_added, date_modified)

category_description (category_id, name, description, meta_description, language_id)

A feladat, hogy a főkategórákat és a hozzá tartozó alkategóriákat megjelenítsük, úgy hogy a kapcsolatok is láthatóak legyenek. Programozási szempontból egy adatbázisban tárolt fa adatszerkezet feldolgozásáról van szó, amit jelen esetben egy rekurzió valósít meg a kódban. Nem biztos, hogy minden esetben ez a legjobb és egyetlen egy megoldás de én most így döntöttem. Nagyobb, bonyolultabb kategória szerkezet esetében az adatbázis oldalon egy lekérdezéssel jobban járunk és a visszaadott lekérdezés eredményét dolgozzuk fel. Jobb esetben pedig a tervezési fázisban az adatbázis struktúrát egy hatékonyabb fa adatszerkezet tárolására alakítjuk ki. Ezek persze elméleti elképzelések, a jelenben pedig konkrét, működő hatékony (hatékonyabb) megoldásokra van szükség.

Gyakorlati megvalósítás:

A controllerbe helyezzük el a következő bejegyzést az 54. sorba:
$children = $this->getCategories($result['category_id'], $new_path);

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter


A bejegyzés kategóriája:Webáruház and tagged , . Vedd fel a kedvencek közé: link. Szólj hozzá vagy hagyj egy trackback-et:Trackback URL.

Szólj hozzá

Hozzászólás küldéséhez Be kell jelentkezni