Přetížení šablon modulů v tématu Prestashopu
25.2.2014Šablony modulů v Prestashopu se dají v tématu přetížit a zabránit tak problémům se sdílením kódu mezi různými tématy. Způsoby přetěžování jsou různé pro jednotlivé typy souborů a navíc se celý systém přetěžování liší podle toho, zda má modul starou a nebo novou (od verze 1.5) adresářovou strukturu. Sepsala jsem návod jak na to, a co dělat, když to nefunguje.
Přetížení šablon ve starší adresářové struktuře
Soubory .tpl, .css a .js modulu bývají přímo v adresáři modulu:
1 2 3 |
/modules/nejakejmodul/nejakejmodul.tpl /modules/nejakejmodul/nejakejmodul.css /modules/nejakejmodul/nejakejmodul.js |
Pro přetížení v tématu je zkopírujeme do následujících adresářů:
1 2 3 |
/themes/moje_tema/modules/nejakejmodul/nejakejmodul.tpl /themes/moje_tema/css/modules/nejakejmodul/nejakejmodul.css /themes/moje_tema/js/modules/nejakejmodul/nejakejmodul.js |
Přetížení šablon od verze 1.5
V Prestashopu s vyšší verzí, než 1.5 by měla (ale nemusí) adresářová struktura modulů vypadat jinak:
1 2 3 |
/modules/nejakejmodul/views/templates/front/nejakejmodul.tpl /modules/nejakejmodul/views/templates/front/nejakejmodul.css /modules/nejakejmodul/views/templates/front/nejakejmodul.js |
Tyto soubory by v tématu měly být v těchto adresářích:
1 2 3 |
/themes/moje_tema/modules/nejakejmodul/views/templates/front/nejakejmodul.tpl /themes/moje_tema/css/modules/nejakejmodul/views/templates/front/nejakejmodul.css /themes/moje_tema/js/modules/nejakejmodul/views/templates/front/nejakejmodul.js |
Když to nefunguje
-
Některé moduly nedodržují doporučený formát adresářové struktury a proto se po přetížení soubor stále načítá přímo z modulu. To se dá vyřešit zkopírováním adresářové struktury přímo z modulu, například v tomto modulu jsou styly a javascripty navíc v adresářích css/ a js/:
12/modules/nejakejmodul/css/nejakejmodul.css/modules/nejakejmodul/js/nejakejmodul.jsAbychom je v tématu přetížili, umístíme je sem:
12/themes/moje_tema/css/modules/nejakejmodul/css/nejakejmodul.css/themes/moje_tema/js/modules/nejakejmodul/js/nejakejmodul.js -
Pokud se soubory šablony nenačtou ani přetížené v tématu, ani přímo z adresáře modulu, je pravděpodobně špatně definovaná cesta v kódu modulu. Většinou je to v souboru /modules/nejakejmodul/nejakejmodul.php a vypadá to takhle:
12$this->context->controller->addJS($this->_path.'nejakejmodul.js');$this->context->controller->addCSS($this->_path.'nejakejmodul.css');