CompZone.Org :: Artykuły :: PHP
Jaki jest Twój wiek?
40 - 59
26 - 39
19 - 25
13 - 18
12 i mniej
60 i więcej
Sonda Wyniki

Add to Google

System szablonów w PHP

Tworząc stronę WWW opartą o technologie serwer-side zaczęto separować wygląd strony od skryptu. W tym celu, szczególnie przy dużych projektach zaczęto stosować szablony, które sprawiły, że można niemal całkowicie oddzielić look & feel strony od kodu. Jak zatem to działa?

Otóż, umieszcza się w osobnym pliku, szablonie (z ang. template) kod HTML, który zawiera specjalne symbole, pod które zostanie podstawiona treść. W kodzie skryptu (np. PHP) generowane są treści, a następnie podstawiane są w odpowiednie miejsca. Tak przetworzony szablon zostaje wyświetlony.

Piszemy własny skrypt

Nie ma lepszej metody na zrozumienie działania szablonów, jak samemu napisać taki system. Wyszedłem z założenia, że uproszczę skrypt do maksimum, aby uwypuklić najważniejsze elementy skryptu.
Oto on:

 <?php
class Template{

private $template, $tags, $code;
//Konstruktor &#8211; podajemy ścieżkę do pliku szablonu
function __construct($filename){
$this->template = file_get_contents($filename);
$this->code = $this->template;
}
//ustawiamy wartość danego znacznika
function setValue($tag, $value){
$this->tags['{$'.$tag.'}'] = $value;
}
//generujemy kod
function getCode(){
$this->code = str_replace(array_keys($this->tags), array_values($this->tags), $this->template);
return $this->code;
}
}
?>

Jak widać skrypt jest prosty. Najpierw wczytujemy z pliku szablon używając funkcji file_get_contents. Wypadałoby również w tym miejscu zaznaczyć, że przyzwoity skrypt powinien w tym miejscu sprawdzać czy dany plik istnieje. Następna funkcja pozwala ustawić dla danego znacznika (zmienna $tag) odpowiednią wartość. Warto zauważyć, że przyjąłem, iż znacznik ma postać {$_tag_}. Funkcja getCode, używa funkcji str_replace, aby podmienić znaczniki na odpowiadające im wartości. Funkcje array_keys i array_values odpowiednio zwracają tablicę kluczy z podanej tablicy lub zwracają tablicę wartości z tablicy asocjacyjnej.

Przykład użycia

Nadal nie przekonany, że będzie to przydatne? Zobaczmy jak wygląda to na przykładzie. Nasz przykład znów będzie prosty. Zobaczmy jak wygląda nasz przykładowy szablon:

 <html>
<head><title>{$page_title}</title></head>
<body>
<div id="header">Strona przykładowa</div>
<div id="menu" >Menu</div>
<div id="content">{$content}</div>
<div id="footer" >{$author}, {$date}</div>
</body>
</html>

Tak, bardzo prosty szablon. Teraz podłączmy do tego kod php:

 <?php

require_once('template.php');

$templ = new Template('example.tpl');

$templ->setValue('author', 'Kodie');
$templ->setValue('date', date('d-m-Y H:i'));

switch($_GET['module']){
case 'login': $title = 'Logowanie' ; $content = 'login'; break;
case 'register' : $title = 'Rejestracja' ; $content = 'register'; break;
default: $content = 'main page'; $title='Strona główna';
}

$templ->setValue('page_title', 'przykład :: '.$title);
$templ->setValue('content', $content);
echo $templ->getCode();

?>

Cóż, kod PHP nie jest wcale trudniejszy od tego szablonu:P Najpierw tworzymy nowy obiekt klasy Template, dalej ustawiamy odpowiednie wartości, a później wyświetlamy. Oczywiście w prawdziwym skrypcie wartości do przypisania brane byłyby z bazy danych czy pliku i były by zależne od wykonanej przez użytkownika czynności. Ale uruchommy ten kod, to naprawdę działa. Łatwo sobie teraz wyobrazić, zmianę layoutu. Wystarczy przepisać szablon od nowa i już. Nie ma tego problemu, co wtedy, gdy kod PHP przeplata się z kodem HTML. Wtedy można było sobie włosy powyrywać starając się to uporządkować.

Podsumowanie

Dużym plusem tej tej metody, jest właśnie łatwość przebudowy layoutu czy wprowadzenia systemu skórek. Warto jednak napisać sobie nieco bardziej zaawansowana klasę lub zainteresować się gotowym już systemem. Jednym z najbardziej znanych i rozbudowanych jest system Smarty. Oferuje on ogromne możliwości, dlatego wiele gotowych skryptów opiera na nim system szablonów.

Kodie @ 09-07-2006 19:46
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!