Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Komponent eZ Template

Szablony

Dotarliśmy do najbardziej interesującej części artykułu - zgromadziliśmy niezbędne informacje i możemy spojrzeć na szablon dla naszej akcji.

Główny szablon


{use $action}
    	{var $menu = array( "Wróć do strony" => array( "action" => 	"sitedetails", "site" => $action->site-id ) )}

    {include "header.ezt" send $action, $menu}

    <h1>Szczegóły wyszukiwana "{$action->search->query}" dla strony "{$action->site->site}"</h1>

    <h2>Wyniki wyszukiwania</h2>
     <table width="100%" class="data">
      <tr><th>Data zapytania</th><th>Rank</th><th>Szczegóły</th></tr>

     {cycle $rowStyle = array( "light", "dark" )}

     {foreach $action->results as $result}

        <tr class="{$rowStyle}">
         <td>

          {date_timestamp_format( "Y-m-d H:i", $result->timestamp )}

         </td><td>

          {$result->rank}

         </td><td>

          <a href="index.php?{url_parameters_build( array( "action" => "resultdetails", "result" => $result->id ) )}">szczegóły</a>

         </td></tr>

       {increment $rowStyle}

     {/foreach}

     </table>

    {include "footer.ezt"}

Jeżeli nie obcy jest ci Smarty, z łatwością zrozumiesz język obsługi naszych szablonów, jako że jest bardzo podobny do tego znanego ze Smarty. W odróżnieniu od Smarty komponent eZ Template został napisany dla PHP 5.1 lub wyższego, podczas gdy Smarty zachowuje kompatybilność z PHP 4. Każda instrukcja w szablonie zawarta jest w nawiasach klamrowych ("{", "}") i każda może zwrócić tekst jako wynik działania (nie musisz więc dodatkowo dodawać funkcji takich jak echo aby wyświetlić wynik). Na wszystkich wyświetlanych danych automatycznie wykonywana jest funkcja PHP htmlentities() (zakładając że nie został zmieniony kontekst szablonu, domyślnie ustawiony jako XHTML). Jeżeli z jakiegoś powodu musisz wyświetlić dane w czystej postaci, możesz użyć funkcji szablonu raw.

Pierwszą instrukcją w szablonie jest instrukcja use, która pobiera zmienne przekazane do szablonu (pamiętasz? zrobiliśmy to w głównym kontrolerze). Po wykonaniu tej instrukcji, zmienna $action jest już dostępna i gotowa do użycia.

Następnie, definiujemy nową zmienną nazwaną $menu. Będzie to wielowymiarowa tablica asocjacyjna reprezentująca strukturę menu. (W kontekście komponentu eZ Template tablice asocjacyjne określane są jako hash'e więc od tej pory będę używał tego określenia). Jak widać, hash deklarowany jest dokładnie tak samo jak w PHP. W strukturze menu znajdzie się odnośnik nazwany "Wróć do strony". Nazwa odnośnika przypisana jest do tablicy parametrów, które muszą zostać przekazane do głównego kontrolera w celu poinformowania go o stronie do której prowadzi odnośnik. Za moment pokażę, w jaki sposób z podanej tablicy generowane jest menu.

Kolejnym krokiem jest dołączenie kolejnego szablonu, odpowiedzialnego za wyświetlane nagłówka HTML i menu. Dołączanie szablonu przebiega dokładnie tak samo jak przetwarzanie szablonu z poziomu PHP - musisz przekazać do szablonu wymagane zmienne. My przekażemy zmienną $action i utworzoną przed chwilą zmienną $menu. Zanim jednak przejdziemy do dołączonego szablonu zakończmy opis szablonu głównego.

W kolejnej linii (6) wygenerowane zostaje co nieco kodu HTML. Wyświetlany jest nagłówek pierwszego stopnia i - po raz pierwszy - konkretne dane. Jak już wspomniałem, jest to całkiem proste - jedyne co trzeba zrobić to umieszczenie zmiennej, której wartość chcemy wyświetlić w nawiasach klamrowych. Dostęp do właściwości obiektu działa dokładanie tak samo jak w PHP, zwróć jednak uwagę, że na chwilę obecną nie jest możliwe wykonywanie metod obiektu z poziomu szablonu. Jeżeli naprawdę potrzebujesz dostępu do metod obiektu na poziomie szablonu, możesz spróbować osiągnąć to poprzez przeciążanie klasy ( overloading). Co prawda jest to bardzo ograniczone rozwiązanie, ale w niektórych przypadkach może okazać się wystarczające.

W linii 14 widzimy cechę specjalną komponentu eZ Template - "cycle". "Cycle" to jednowymiarowa tablica ( hash). Jest ona specjalna, ponieważ możesz iterować przez nią za pomocą nieskończonej pętli. Kiedy iteracja dotrze do ostatniego elementu kolejna przebiegać będzie ponownie od pierwszego jej elementu itd. Pokazany "cycle" $rowStyle zawiera dwa elementy typu "string" - "light" i "dark", które odpowiadają nazwom klas CSS. Za każdym użyciem zmiennej przypisanej do instrukcji "cycle" zwrócona zostanie jej aktualna wartość. Aby przesunąć wewnętrzny wskaźnik na kolejną wartość, należy użyć instrukcji "increment" (linia 27).

W linii 15 używamy pętli foreach do iteracji przez wszystkie wyniki zachowane w naszej akcji. Pętla foreach domknięta jest w linii 28 za pomocą instrukcji:

{/foreach}

Jak widać, kończenie bloków składniowych w szablonie jest podobne do konstrukcji znanej z HTML.

Wewnątrz pętli foreach po raz pierwszy używamy funkcji szablonu. W linii 18 korzystamy mianowicie z funkcji date_timestamp_format(). Funkcja ta działa dokładnie tak samo jak funkcja PHP date(): jako argumenty należy podać ciąg znaków zawierający pożądany format daty oraz opcjonalnie UNIXowy znacznik czasu jako określenie daty. Jeżeli drugi parametr nie zostanie podany, użyty zostanie aktualny czas. W większości przypadków nazwy funkcji w naszym systemie szablonów są inne od nazw odpowiadających im funkcji PHP - ma to na celu zapewnienie unikalnej przestrzeni nazw. To samo ma zastosowanie do kolejności argumentów funkcji - podczas gdy PHP często pozostaje w tej kwestii niekonsekwentne, w naszych funkcjach kolejność parametrów jest zawsze ta sama.

Linia 24 zawiera kolejne wywołanie funkcji. Funkcja url_parameters_build() jest odpowiednikiem funkcji PHP http_build_query(), która na podstawie podanego parametru (hash - tablica asocjacyjna) buduje ciąg w formacie zgodnym z zapytaniem HTTP-GET. Ostatnia linia w tym szablonie odpowiada za dołączenie kolejnego szablonu, który po prostu zamyka elementy HTML otwarte wcześniej w szablonie "header.ezt". Nie ma w nim nic godnego opisania :).

Dołączone szablony

W linii 5 głównego szablonu dołączyliśmy szablon, który wyświetla nagłówek HTML i strukturę menu dla każdej z podstron. Przypominam, że przesłaliśmy do tego szablonu zmienne $action i $menu.

{use $action, $menu = array()}

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
     <link rel="stylesheet" type="text/css" href="css/standard.css" />
     <title>GoogleRankCheck - {$action->title}</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    {include "menu.ezt" send $menu}

Również tu, na początku szablonu znalazła się instrukcja use. Jest to wymagane - dzięki tej konstrukcji zmienne z zewnątrz stają się dostępne wewnątrz szablonu. Wytłumaczenie tego mechanizmu jest proste: w rozbudowanej aplikacji mógłby pojawić się konflikt nazw zmiennych, któremu można zapobiec dzięki mechanizmowi aliasing. Aliasing nie jest wykonywany w instrukcji use ale w instrukcji include. Chcąc zmienić nazwę zmiennej przekazywanej do dołączanego szablonu należałoby wykonać to w następujący sposób:

{include "test.ezt" send $foo as $bar}

Za pomocą tej metody, można przesłać do szablonu statyczne wartości. W konstrukcji use szablonu nagłówka definiujemy domyślną wartość zmiennej $menu. Jeżeli żadna wartość nie zostanie przekazana do szablonu, będzie ona miała wartość pustej tablicy.

Zaznajomiliśmy się już z resztą kodu w tym szablonie, przejdziemy więc do szablonu menu, który zostaje dołączony w ostatniej linii.

{use $menu}

    {var
        $menuStd = array(
            "Strona Główna" => array( "action" => "sitelist" ),
        )
    }
    {
        $menu = array_merge( $menuStd, $menu )
    }

    <table>
    <tr>

    {foreach $menu as $menuName => $menuParams}

        <td>[<a href="index.php?{url_parameters_build( $menuParams )}">{$menuName}</a>]</td>

    {/foreach}

    </tr>
    </table>

Szablon menu jest odpowiedzialny za generowanie menu na każdej ze stron naszej aplikacji. W liniach od 2 do 6 zdefiniowany został hash zawierający domyślne odnośniki, które powinny zostać pokazane na każdej ze stron. Następnie, w linii 8 hash przekazany do szablonu zostaje scalony z utworzonym przed chwilą hashem zawierającym wartości domyślne. Funkcja array_merge() działa dokładnie tak samo jak jej odpowiednik w PHP. W liniach od 12 do 14 widać iterację poprzez hash $menu i generowanie tablicy odnośników tworzącą menu. Ponownie używamy tu funkcji url_parameters_build() na tablicy parametrów GET zdefiniowanej dla każdego z odnośników menu.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System