Biblioteka Template

O bibliotece Template wspominałem już nieraz na forum. Tym razem jednak chciałbym przedstawić ją trochę dokładniej, tak abyście mieli możliwość łatwego rozpoczęcia pracy. Autorem tej biblioteki jest Phil Sturgeon, którego pewnie niektórzy z Was kojarzą m.in. jako pomysłodawcę projektu PyroCMS. Sama biblioteka ma już kilka lat, ale z powodzeniem można z niej korzystać w swoich projektach, kiedy potrzebujemy trochę bardziej złożonej funkcjonalności jeśli chodzi o widoki.

Na początek przedstawię kilka podstawowych metod, z których będziemy korzystali w tym artykule:
set_theme() – pozwala na określenie motywu (skórki), z którego będziemy korzystali
set_layout() – określa z jakiego layoutu chcemy skorzystać
set_partial() – określa jaki dodatkowy plik widoku wczytamy
build() – wczytuje główny widok do naszego layoutu

Możliwość używania motywów jest opcjonalna (domyślnie wyłączona) i jeśli jej nie potrzebujemy, to możemy się ograniczyć jedynie do layoutów. Ale właśnie z powodu motywów oraz ich dość specyficznego umiejscowienia omówię tę opcję trochę dokładniej (pod koniec artykułu). Zacznijmy jednak od początku. Jeśli nie chcemy używać motywów w naszej aplikacji i wystarczą nam w zupełności layouty, to konfiguracja jest właściwie bezbolesna.

W tym miejscu zakładam, że ściągnęliśmy już bibliotekę i załadowaliśmy ją (lub skorzystaliśmy z wersji dostępnej poprzez Sparks). Przejdźmy więc do dzieła. W katalogu application/views tworzymy folder layouts i tam umieszczamy plik naszego layoutu. Aby wywołać nasz widok razem z layoutem, wystarczy w kontrolerze użyć kodu:

Tak więc plik nasz_layout.php znajduje się w folderze application/views/layouts, a plik widoku (nasz_widok.php), tradycyjnie w folderze application/views.

Aby kod przedstawiony powyżej miał szansę zadziałać prawidłowo, w pliku naszego layoutu, koniecznie musimy dołączyć zmienną, która wyświetli zawartość widoku nasz_widok. Aby wyświetlać dane załadowane za pośrednictwem biblioteki Template, będziemy się odwoływać do zmiennej $template w widoku. W tablicy $template['body'] znajdziemy zawsze zawartość widoku, który został wczytany za pośrednictwem metody build(). Tak więc nasz plik layoutu może wyglądać tak:

Możemy teraz założyć, że chcemy aby w naszym layoucie znalazło się miejsce np. na boczną szpaltę, w której będziemy umieszczać różne informacje w zależności od używanego kontrolera lub metody. Możemy to osiągnąć w bardzo prosty sposób. W metodzie naszego kontrolera wystarczy użyć metody set_partial():

Aby wyświetlić partial, w pliku naszego layoutu wystarczy dodać np. taki kod:

Zakładając, że plik dla naszego partialu istnieje (i znajduje się tutaj: application/views/boczna_szpalta.php), powinniśmy otrzymać pożądany efekt.

Teraz przyszła pora na przekazywanie danych do widoków. Jeśli chcemy przekazywać do widoku lub partialu jakieś zmienne z kontrolera, aby później móc je wyświetlić, to możemy to zrobić „tradycyjnie”, poprzez dołączenie do metody zmiennej jako kolejnego argumentu lub za pośrednictwem samodzielnej metody set():

No dobrze, podstawy mamy już opanowane. Pora przejść do tematu motywów. Cały problem/kłopot sprowadza się do tego, że w przypadku używania motywów musimy skorzystać z osobnego folderu do przechowywania naszych plików widoku i layoutów. Domyślnie takim folderem jest katalog themes (musimy go utworzyć), który ma znajdować się w folderze application. Struktura dla tego katalogu ma wyglądać następująco:

Tak powinno to wyglądać. Oczywiście bez problemu możemy dla partialów i widoków tworzyć osobne katalogi, ale musimy wtedy pamiętać żeby uwzględnić nowe położenie pliku przy odwoływaniu się do metody set_partial() oraz build(). Jeśli chcemy korzystać z kilku motywów, to wystarczy dodać kolejny katalog z motywem (włączając w to odpowiednie podfoldery).

Kiedy struktura i pliki dla naszego motywu są już gotowe, pozostaje nam jeszcze tylko jedno zadanie – powiadomić bibliotekę Template, że ma skorzystać z danego motywu. Aby to zrobić użyjemy metody set_theme():

To tyle. Ważną kwestią jest jeszcze to, że w przypadku kiedy plik, o który poprosimy nie jest dostępny w katalogu z naszym motywem, to biblioteka Template będzie kontynuowała poszukiwania pliku w naszym zwykłym katalogu widoków (application/views). Niekiedy to bardzo poręczne rozwiązanie.

Czas na podsumowanie. Biblioteka Template jest bardzo prosta, ale jednocześnie daje spore możliwości. Oprócz opcji wymienionych w tym artykule mamy jeszcze parę ciekawych możliwości, m.in. ustawianie tytułu dla strony, dołączanie stylów lub plików js. Jeśli chcemy możemy serwować różne widoki w zależności od tego, czy mamy do czynienia z „normalnym” (desktopowym) użytkownikiem, czy mobilnym (chociaż to w epoce responsywnego layoutu raczej nie jest często używane).

Oczywiście najważniejsze na koniec. Pełna dokumentacja dla tej biblioteki jest dołączana do kodu źródłowego. Wystarczy odszukać katalog user_guide. Zachęcam do lektury.

4 thoughts on “Biblioteka Template

    • Pełna dokumentacja jest dołączona do repozytorium na github. Po ściągnięciu źródeł biblioteki wystarczy wejść do katalogu user_guide i otworzyć plik index.html.

  1. moze mi ktos wytlumaczyc dlaczego mam ponizszy blad gdy chce sie zarejestrowac lub wyslac zmiene hasla na forum ?

    Error: Could not connect to smtp host „email-smtp.us-east-1.amazonaws.com:465” (110) (Connection timed out).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.