Loading:


Prosty system szablonów oparty na jednej funkcji

Szablony w dzisiejszym Å›wiecie programowania sÄ… czymÅ› niezbÄ™dnym - przekonywać do tego nie trzeba chyba nikogo. DostÄ™pne sÄ… potężne narzÄ™dzia typu SMARTY które wspaniale radzÄ… sobie z zadaniem oddzielenia treÅ›ci od wyglÄ…du oraz dajÄ… twórcom oprogramowania sporÄ… dowolność jeÅ›li chodzi o koÅ„cowy wyglÄ…d projektu. Jednak czy kombajn pokroju SMARTY podchodzÄ…cy bardziej pod "nowy jÄ™zyk" niż prosty "system szablonów" jest najlepszym wyjÅ›ciem?

 

Postaram się wyjaśnić dlaczego na powyższe pytanie nie da się jednoznacznie odpowiedzieć i zaproponować prostą alternatywę.

 

OczywiÅ›cie porzÄ…dny system szablonów sprawdza siÄ™ wszÄ™dzie tam, gdzie wyglÄ…d strony może ulec zmianie, użytkownik powinien mieć w dzisiejszych czasach możliwość "przebrania" swojej treÅ›ci w zupeÅ‚nie nowe szaty, jednak czasem zdaża siÄ™, że zaprzÄ™gniÄ™cie do tego rozbudowanego systemu szablonów mija siÄ™ z celem.

 

Kiedy użyć alternatywy? Jak zawsze należy podsumować kożyÅ›ci wynikajÄ…ce z użycia danego rozwiÄ…zania, porównać z nakÅ‚adami pracy, czasem poÅ›wiÄ™conym na wdrożenie i rozważyć wszelkie inne za i przeciw danego rozwiÄ…zania. JeÅ›li piszesz małą stronkÄ™ a'la wizytówka firmy, to może siÄ™ okazać, że biblioteka obsÅ‚ugujÄ…ca szablony bÄ™dzie wiÄ™ksza od caÅ‚ego projektu (objÄ™toÅ›ciowo, ilość klass i funkcji - dowolne kryterium, które przyjdzie Ci do gÅ‚owy. Wtedy warto pomyÅ›leć nad alternatywnym rozwiÄ…zaniem. może użytkownik dostanie jednÄ… lub dwie opcje mniej, ale przypominam maÅ‚y projekt -> klient chce niewiele i czasem coÅ› sobie pozmienia. jeÅ›li zyski przewyższajÄ… straty myÅ›limy o alternatywie.

 

Alternatywa:

zakładamy, że użytkownik robi sobie szablon wyglądający mniej więcej tak:

 


body.inc.tpl


 

<html>

<head>

<title>{$TITLE$}</title>

</head>

<body>

<ul id="nav">{$MENU$}</ul>

<div id="header"><h1>{$COMPANYNAME$}</h1><p>{$SLOGAN$}</p></div>

<div id="foot">{$FOOTERLINKS$}</div>

<div id="content">{$SITEBODY$}</div>

</body>

</html>

 


 

Prosty, czysty i czytelny - w rzeczywistoÅ›ci trochÄ™ trzeba by to dopracować, ale dla potrzeb tego artykuÅ‚u wystarczy. To czego potrzebujemy to zamienić nasze {$COSIE$} na treść generowanÄ… przez skrypt. W tym wypadku {$TITLE$}, {$MENU$}, {$COMPANYNAME$}, {$SLOGAN$},  {$FOOTERLINKS$} i {$SITEBODY$}.

 

te dane możemy pobrać z bazy czy pliku i stworzyć tablicę:

 


 

$dane=array(

'title' => 'Prosta strona',

'companyname' => 'Firma',

'slogan' => najlepsza firma w Twoim mieście',

'sitebody' =>'Hello world!',

'menu' => '',

'footerlinks' => ''

);

 


 

Zwróć uwagÄ™, że nie mamy jeszcze $dane['menu'] oraz $dane['footerlinks']. To co wyciÄ…gamy z bazy trzeba "obrobić" tak, by nasz szablon Å‚adnie wyglÄ…daÅ‚. dodajmy zatem kolejne dwa maÅ‚e szablony: dla każdego elementu menu i dla każdego linku w stopce:

 


menu_item.inc.tpl


<li><a href="{$HREF$}">{$MENUITEM$}</a></li>


foot_item.inc.tpl


<a href="{$HREF$}">{$FOOTLINK$}</a>


może niezbyt wyszukany przykład, ale obrazuje nasz problem. teraz wystarczy pobrać z bazy odpowiednie dane i "stworzyć" brakujące zmienne:

 

 


 

foreach($dane_o_menu as $data) {

$dane['menu'].= template($data,'menu_item','mystyle');

}

foreach($dane_o_stopce as $data) {

$dane['menu'].= template($data,'foot_item','mystyle');

}

 


 

Użyłem w kodzie funkcji template, jej kod w listingu.

całość przepuścimy teraz przez nasz template i wyrzucimy wynik:

 


 

echo template($dane,'body','mystyle');

 


 

i tyle, cały "skrypt obsługi szablonu" mamy z głowy, proste, nieprawdaż. każdą "zmienną" w szablonie możemy przepuścić przez inny szablon pamiętając, że w odpowiedzi dostajemy już kod HTML.

Teraz conieco o strukturze katalogów.  by byÅ‚o "profesjonalnie" tworzymy katalog:

 


 

./templates/

 


 

i do niego wrzucamy nasze style z rozszerzeniem .inc.tpl, np:

 


 

./templates/default/*.inc.tpl

./templates/mystyle/*.inc.tpl

 


poniżej kod funkcji template pobierajÄ…cej tablicÄ™ z "zamiennikami", nazwÄ™ pliku szablonu (bez rozszerzenia) oraz nieobowiÄ…zkowo nazwÄ™ katalogu z szablonem i Å›cieżkÄ™ do zbioru szablonów.



Napisz Artyku³

Listing

/* kod funkcji */
function template($array, $template, $style="default", $path="./templates/"){
/*
        Funkcja ta wczytuje szablon $template, a nastÄ™pnie podmienia dane przy pomocy tablicy
        asocjacyjnej $array, gdzie indexem jest nazwa zmiennej
        NastÄ™pnie na podstawie listy, oczyszcza nieprzypisane zmienne
*/

$array['template_path']=$path.$style."/";
        $tpl=file_get_contents($path.$style."/".$template.".inc.tpl"); //pobiera plik szablonu ze zmiennymi
        foreach($array as $t => $content){
                $tpl=str_replace("{\$".strtoupper($t)."\$}", $content, $tpl); //podmienia zmienne na wartoÅ›ci
        }
        $tpl=preg_replace('({\$(.*?)\$})', "", $tpl);   //czyszczenie pozostaÅ‚oÅ›ci

return $tpl; //zwraca gotowy kod html
}




Dodano przez: anielka Ranga: Poziom 3 Punktów: 52
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2021 v.1.5 | design: diviXdesign & rainbowcolors