Czasem zachodzi potrzeba wstawienia krótkiego tekstu gdzieś w obrębie szablonu. Np. chodzi o krótką informację dla klientów w nagłówku sklepu, lub o jakąś inną ważną informację gdzieś w obrębie layoutu.
Można oczywiście ratować się odpowiednimi modułami. Jednak bywa to kłopotliwe – a nam chodzi tylko o pojedynczą wstawkę tekstu. I najlepiej aby była możliwa do zapisania i przetłumaczenia na każdy język zainstalowany w sklepie. Po za tym używanie modułu w module nie jest możliwe i trzeba się nieźle gimnastykować aby to zadziałało.
Najłatwiejszym sposobem na zrobienie tego jest utworzenie strony we wbudowanym narzędziu CMS w PrestaShop. Przeważnie tak to wykonujemy w relizacjach SmartProjects.pl
W zależności od wersji silnika sklepu są pewne rozbieżności. Dziś omówimy jak to zrobić w wersji 1.4
Zawartość artykułu
Dodawanie strony CMS.
Narzędzia -> CMS -> Dodaj nową stronę
Wypełniamy wszystkie pola oznaczone gwiazdką i podajemy (dowolny) tytuł CMS – nie będzie on wyświetlany – będziemy wyświetlać tylko treść.
Ważne abyśmy oznaczyli stronę jako wyświetlaną (domyślnie są nieopublikowane)
Notujemy ID dodanej strony – czyli jej unikalny numer widoczny w 1 kolumnie. Przyjmijmy że jest to numer ID=12.
Ustalenie lokalizacji miejsca gdzie chcemy osadzić tekst z CMS
Kolejnym krokiem jest ustalenie gdzie mamy wstawić tekst z tej strony CMS. Są 2 główne przypadki. Test może się znajdować w obrębie danego modułu lub w obrębie elementów sklepu:
Wstawienie zawartości wybranej strony CMS w obrębie wybranego modułu sklepu PrestaShop
Tutaj sprawa wygląda następująco. Musimy ustalić jak nazywa się dany moduł. Powiedzmy że jest to moduł „blockuserinfo” – jest to moduł z informacjami o użytkowniku. Powiedzmy że pod spodem informacji wyświetlanych w tym module chcemy dodać krótkie zdanie o zaletach z rejestracji na sklepie.
Jego domyślna lokalizacja w obrębie szablonu to:
Odnajdujemy controller tego modułu (plik PHP który nazywa się jak ten moduł). Jego lokalizacja, to:
/modules/blockuserinfo/blockuserinfo.php
Znajdujemy następnie metodę (inaczej funkcja w PHP) która odpowiada za wyświetlanie tego modułu w tym miejscu. W naszym przypadku modeł znajduje się w Hook’u (pozycji w Prestashop) o nazwie „Top”, czyli metoda będzie miała nazwę:
public function hookTop($params) {}
W tej metodzie PRZED wywołaniem pliku tpl do którego odsyłane są zmienne, czyli przed linijką:
return $this->display(__FILE__, 'blockuserinfo.tpl');
„Dobieramy się” do naszego tekstu z CMS. W tym celu wpisujemy następujący kod (dla CMS o ID=12 – patrz wyżej):
$cms = new CMS(12, intval($cookie->id_lang));
Teraz musimy przekazać zawartość tej strony CMS do szablonu:
if (Validate::isLoadedObject($cms)) { $smarty->assign('information', $cms->content); }
Naszą zmienną jest „information”. Możemy tutaj podać jej dowolną nazwę pod warunkiem że nie występuje już w obrębie tej metody.
Ostatnim krokiem jest wprowadzenie wywołania tej zmiennej w pliku .tpl do którego odsyła metoda. W naszym przypadku jest to plik:
/modules/blockuserinfo/blockuserinfo.tpl
Tam w wybranym przez nas miejsu wpisujemy:
{$information}
Wstawienie zawartości wybranej strony CMS w obrębie elementów sklepu PrestaShop
Na początku musimy ustalić gdzie będzie to wstawiane. W pierwszym kroku znajdźmy plik .tpl gdzie chcemy umieścić nasz tekst.
Przykładowo,plik nagłówka to:
/themes/[nasza-skórka]/header.tpl
Plik stopki to:
/themes/[nasza-skórka]/footer.tpl
Plik formularza w wdziale kontakt to:
/themes/[nasza-skórka]/contact-form.tpl
itd.
Pliki .tpl (zawierające przeważnie HTML) są ściśle powiązane z ich controllerami – czyli plikami PHP – które przekazują do owych plików .tpl zmienne. Musimy znaleźć plik PHP w którym jest wywołanie naszego pliku .tpl.
Foldery, gdzie są składowane controllery to:
/controllers /classes
Tam szukamy odpowiadających nam controllerów. Dla powyższych plików .tpl controllery to:
Plik nagłówka to:
/classes/FrontController.php
Plik stopki to:
/classes/FrontController.php
Plik formularza w wdziale kontakt to:
/controllers/ContactController.php
itd.
W każdym przypadku musimy znaleźć linijkę, która odpowiada za przekazanie zmiennych do szablonu (pliku .tpl).
Przykładowo dla nagłówka będzie to:
self::$smarty->display(_PS_THEME_DIR_.'header.tpl');
I zaraz przed tą linijką – tak jak w przypadku modułu – dobieramy się do zawartości strony CMS o ID = 12:
$cms = new CMS(12, intval($cookie->id_lang));
Teraz analogicznie musimy przekazać zawartość tej strony CMS do szablonu:
if (Validate::isLoadedObject($cms)) { $smarty->assign('information', $cms->content); }
i w nagłówku – pliku
/themes/[nasza-skórka]/header.tpl
w miejscu gdzie mamy wywołać tą zmienną, wpisujemy:
{$information}