Šablony v Prestashopu - tvorba vlastní pozice
Úterý, 10 Březen 2009 14:50
V dalším dílu o šablonách si řekneme jak si vytvořit vlastní pozici v šabloně pro Prestashop. Postup shrneme do několika málo bodů.
1) Nejprve se připojíme k databázi a najdeme si tabulku ps_hook, za poslední položku vložíme novou s id o jedno vyšší než předchozí a vyplníme například jako níže přiložená tabulka
| id_hook | name | title | description | position |
| 44 | menuTop | Menu horní | Zobrazuje horní menu | 1 |
Nezapomeneme hlavně na position dát 1, s pozicí to nemá nic spočného. 1 nám udává že je pozice aktivní.
2) Nyní se rozhodneme že novou pozici přidáme pod hlavičku stránky, proto budeme editovat soubor header.php a header.tpl
Nejdříve si tedy otevřeme soubor header.php v kořenovém adresáři. Od dvanáctého řádku najdeme takovýto kód:
$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'),
'HOOK_TOP' => Module::hookExec('top'),
'static_token' => Tools::getToken(false),
'token' => Tools::getToken(),
'priceDisplayPrecision' => _PS_PRICE_DISPLAY_PRECISION_,
'content_only' => intval(Tools::getValue('content_only'))
));
my chceme přiřadit naši novou pozici a proto založíme nový HOOK, nazveme ho HOOK_MENU_TOP, a přiřadíme mu funkci hookExec s parametrem který udává název funkce, o významu tohoto parametru si řekneme na konci článku. Nový kód tedy bude vypadat.
$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'),
'HOOK_TOP' => Module::hookExec('top'),
'HOOK_MENU_TOP' => Module::hookExec('menuTop'),
'static_token' => Tools::getToken(false),
'token' => Tools::getToken(),
'priceDisplayPrecision' => _PS_PRICE_DISPLAY_PRECISION_,
'content_only' => intval(Tools::getValue('content_only'))
));
3) Změna souboru template/prestashop/header.tpl
Nyní potřebujeme někam do šablony umístit naši pozici otevřeme si tedy soubor header.tpl a umístíme na pozici kterou chceme tento kód:
<div id="menutop">
{$HOOK_MENU_TOP}
</div>
DIV samozřejmě není nustností slouží pouze pro formátování. Nyní máme naši pozici vytvořenou a už jen chybí do ní vložit některý z modulů
4) Úprava modulu pro zobrazení na naší nové pozici
Vybereme si nějaký modul, který chceme zobrazit na naší nové pozici, já zvolím například blockinfos, který zobrazuje podmínky prodeje, údaje o firmě, atd. Otevřeme soubor modules/blockinfos/blockinfos.php a do něj vepíšeme novou funkci.
function hookMenuTop($params)
{
return $this->hookLeftColumn($params);
}
toto samozřejmě platí pouze tehdy je-li tento modul původně zobrazován v levém sloupci. Stačí se tedy kouknout jaké funkce, které začínají hook, jsou již napsané a zkopírovat je a text za hook přepsat na svůj. Všimněme si že název funkce za hook je shodný s tím, který jsme definovali v souboru header.php v bodě 2)
To bylo vše, pro případné dotazy pište do komentářů nebo do fóra


pro nový prestashop je nutné upravovat místo header.php soubor classes/FrontController.php
zhruba na radku 443 by mel byt tento kod:
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_TOP' => Module::hookExec('top'),
'HOOK_MENU_TOP' => Module::hookExec('menuTop'),
'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn')
));
Ten je nutne upravit dle navodu.
Ohledne zapisu do templates/sablona/header.tpl. Urcite zapisujete do sablony, kterou mate aktivni? Nemate zapnutou cache? Tu je nutne pri upravach vypnout jinak neuvidite zmeny ktere jste provedl.
$controller->displayHeader();
a ked editujem header.tpl tak tam mozem zadat hocico ale nezobrazi sa na stranke
public function xxxx(){
........
}
public function yyyyyy(){
........
}
Moc by mi to pomohlo, díky za odpovědi
public function hookFooter()
{
return $this->hookLeftColumn();
}
Da se tam nejak pridat??
me jde hlavne o upravu paticky, tak jestli existuje neco podobneho kam si muzu napsat svuj vlastni html kod...? Nebo soubor kde bych tu paticku mohl upravit? Potrebuju si tam dat vlastni odkazy a obrazky
Diky moc!
modul můžete přesunout v sekci moduly pomocí tlačítka Moduly -> Positions -> Transplant Module (Přidat modul)
Tam si zvolite typ modulu a zaveseni (pozici). Jiak rikate ze pouzivate live edit. Tato funkce je v Preste 1.4. Na strnkach Prestashopu sem nasel ze FreeBlock je dostupny pro verze 1.2-1.3, mozna bude problem tam.
Dalsi vec je ze dany modul musi tuto pozici podporovat. Pokud si otevrete soubor freeblock.php, mel byste v nem najit tuto funkci
hookFooter
Mám modul FreeBlock a chci ho přesunout do footer, ve footer je umístěn blockCMS, který tam nepotrebuji. Lze tam tedy misto nej presunout FreeBlock? V Live Edit mi to nejde.
Díky za odpověď
Soubor header musitte editovat aby to fungovalo. Pro editaci je ho nutne nejprve stahnout z FTP server a pote upravit v nekterem programu (PSPad, poznamkovy blok apod.)
je nějaká možnost jak to provést u nové verze 1.4? nejde mi editovat header.php
díky
ano lze to pomerne snadno. Najedte do administracniho rozhrani a kliknete na Modules
Zde najdete Modul - Home Text Editor a kliknete na configure. Pokud srolujete dolu najdete položku Homepage's logo
pokud ho chcete změnit porstě nahrajte vlastrní obrázek. Pokud ho chcete úplně odstranit tak prostě zakažte tento modul kliknutím na zelené zatržítko
chtěla bych se zeptat jak změnit úvodní stranu - obrázek, který tam je automaticky zobrazen po instalaci programu - je to obrázek jak v demo programu konkrétně ukázka mobilních telefonů - jak tyto obrázky odstranit nebo změnit. Děkuji