Programowanie w języku PHP » PEAR

HTML Template IT

  • 0 komentarzy
  • 1077 odsłon
  • Oceń ten tekst jako pierwszy
Większym lub mniejszym problemem dla programistów PHP jest fakt iż wieloktornie są zmuszeni do łączenia kodu PHP i HTML. Oczywiście są sytuacje kiedy nie da sie tego uniknąć, ale możemy postarać sie aby najważniejsze warstwy naszych aplikacji były zaprojektowane tak aby później w przypadku jakichkolwiek zmian łatwo można było się odnaleźć. Problemem nie jest kiedy chodzi o mały lub średni skrypt php, jednak kiedy pisze się coś większego warto skorzystać z szablonów. Systemów szablonów jest wiele, nie problemem jest także napisać swój własny. nad zaletami i wadami poszczególnych można by sie rozwodzić długo. Ja postaram się Wam przybliżyć system szablonów IT/ITX PEARa.

Na czym to polega?

Jak już wspomniałem głównym celem korzystania z systemu szablonów jest oddzielenie warstwy PHP i HTML. Na początek sprawdzamy czy posiadamy zainstalowaną paczuszkę: '#>pear list HTML_Template_IT' , jeśli dostaniemy rezultat w postaci ścieżek do paczki to wszystko gra. Jeśli nie to instalujemy ją '#>pear install HTML_Template_IT'.

Na początek stwórzmy sobie jakiś plik php. Do każdego skryptu php musimy załączyć paczki, z których będziemy korzystać.

require_once 'HTML/Template/ITX.php';
$tpl = new HTML_Template_ITX('./templates');


Tworzymy nowy obiekt, a jako parametr konstruktora wpisujemy scieżke dostepu do katalogu, w którym będą się znajdowały pliki szablonów. Następnie ładujemy szablon uzywając funkcji 'loadTemplatefile'. W tej chwili żadnego szablonu jeszcze nie mamy ale dojdziemy do tego za chwilę.

$tpl->loadTemplatefile('main.tpl.html', true, true);


Pierwszym parametrem funkcji jest nazwa pliku naszego szablonu. Drugi i trzeci parametr odpowiadają odpowiednio za wyświetlanie pustych bloków i pustych zmiennych. Jeśli TRUE to powyższe nie sa wyświetlane. Przekazywanie zmiennych do szablonu odbywa się w następujący sposób:


$tpl->setCurrentBlock('block1');
$tpl->setVariable('DATA', "test");    
$tpl->parseCurrentBlock();


System szablonów jest zbudowany blokowo. W jednym bloku możemy umieścić wiele zmiennych, a także następne bloki. Powyższy przyklad przedstawia jeden blok o nazwie 'block1'. Zawiera on jedną zmienną szablonu o nazwie DATA do której mamy przypisany string 'test'. Na koniec parsujemy (zamykamy) cały blok. Ostateczne wyświetlenie strony odbywa sie poprzez wykonanie funkcji Show();

$tpl->Show();


Cały plik php wygląda tak:

<?php
//-------- poczatek pliku index.php ---------
require_once 'HTML/Template/ITX.php';
$tpl = new HTML_Template_ITX('./templates');
$tpl->loadTemplatefile('main.tpl.html', true, true);
$tpl->setCurrentBlock('block1');
$tpl->setVariable('DATA', "test");    
$tpl->parseCurrentBlock();
$tpl->Show();
//-------- koniec pliku index.php ----------
?>


Następnym krokiem będzie utworzenie szablonu. tworzymy nowy katalog 'templates' w katalogu z naszym plikiem php, a następnie umieszczamy w nim plik 'main.tpl.html'. Tworząc szablon postępujemy tak jakbyśmy tworzyli zwykly plik html.Poniżej przedstawiam uproszczony plik naszego szablonu nie zawierający żadnych metatagów.

<!-- początek pliku main.tpl.html-->
<html>
<head>
</head>
<body>
 
<!-- BEGIN block1 -->
{DATA}<br>
<!-- END block1 -->
 
</body>
</html>
<!-- koniec pliku main.tpl.html -->


Głównym elementem naszego szablonu są komentarze BEGIN i END. One odpowiadają za początek i koniec danego bloku. Wewnątrz bloku mamy naszą zmienna {DATA}. Będzie ona wyświetlała wartość, którą określiliśmy w pliku php za pomocą funkcji $tpl->setVariable('DATA', "test"); czyli w naszym wypadku ciąg znaków 'test';
Jeśli mamy przygotowane oba pliki, odpalamy przez przeglądarkę nasz plik php i powinniśmy ujrzeć nasz 'test' na ekranie.
Zaletą systemu blokowego szablonów jest możliwość wielokrotnego parsowania bloków. Zmodyfikujmy nasz plik php aby częśc odpowiedzialna za blok 'block1' znajdowała się w pętli. Jako wartości użyjemy jednowymiarowej tablicy asocjacyjnej.

<?php
//-------- poczatek pliku index.php----------
require_once 'HTML/Template/ITX.php';
$tpl = new HTML_Template_ITX('./templates');
$tpl->loadTemplatefile('main.tpl.html', true, true);
$imiona=array("Krzysztof"=>"Kowalski","Andrzej"=>"Lepper","Tadeusz"=>"Rydzyk");
 
foreach ($imiona as $imie=>$nazwisko) {
        $tpl->setCurrentBlock('block1');
        $tpl->setVariable('IMIE', "$imie");    
        $tpl->setVariable('NAZWISKo', "$nazwisko");    
        $tpl->parseCurrentBlock();
}
 
$tpl->Show();
//-------- koniec pliku index.php-------------
?>


Niezbędnym będzie także zmodyfikowanie naszego szablonu. plik main.tpl.html powinien wyglądać tak:

<!-- początek pliku main.tpl.html-->
<html>
<head>
</head>
<body>
 
<!-- BEGIN block1 -->
{IMIE} {NAZWISKO}<br>
<!-- END block1 -->
 
</body>
</html>
<!-- koniec pliku main.tpl.html -->


W rezultacie powinnismy otrzymać na ekranie

Krzysztof Kowalski
Andrzej Lepper
Tadeusz Rydzyk

Strukture bloków można dowolnie zagnieżdzać. Przedstawia to poniższy przykład, który wyświetla w tabeli operatorów i początki numerów telefonu.

<?php
//-------- poczatek pliku index.php --------------
require_once 'HTML/Template/ITX.php';
$tpl = new HTML_Template_ITX('./templates');
$tpl->loadTemplatefile('main.tpl.html', true, true);
 
$tel=array(
        "idea"=>array("500","501","502","503"),
        "plus"=>array("601","603","605","693"),
        "era"=>array("600","602","604","608")
);
 
foreach ($tel as $siec=>$numery) {
 
        foreach ($numery as $numer) {
                $tpl->setCurrentBlock('numery');
                $tpl->setVariable('NUMER', "$numer");    
                $tpl->parseCurrentBlock();
        }
        $tpl->setCurrentBlock('sieci');
        $tpl->setVariable('SIEC', "$siec");
        $tpl->parseCurrentBlock();
}
 
$tpl->Show();
 
//-------- koniec pliku index.php----------
?>


Odpowiednio modyfikujemy szablon:

<html>
<head>
</head>
<body>
<table border>
<!-- BEGIN sieci -->
<tr>
<td>{SIEC}</td>
<!-- BEGIN numery -->
<td>
{NUMER}
</td>
<!-- END numery -->
</tr>
<!-- END sieci -->
</table>
</body>
</html>



Czasami zachodzi potrzeba dynamicznego ładowania szablonów. Powiedzmy mamy standardową strone internetową. Po lewej stronie menu, na środku treść. Treść ładujemy w zależności od tego jakiejś zmiennej, np. index.php?link=galeria ładuje nam galerie itd. Przydała by sie funkcja, która by ładowała nam szablon w zależnośći od tego co nam się wyświetla. Jeden szablon byśmy mieli na strone główną i zawierałby on wszystkie elementy, które się nie zmieniają, np. menu, nagłówek i stopkę a ładowane by były szablony odpowiedzialne za poszczególne działy.  taki efekt możemy uzyskać za pomocą funkcji addBlockFile, która została dodana w rozszerzeniu klasy IT jakim jest ITX. Działa to w następujący sposób. Standardowo do przykładu przygotowujemy sobie plik php

<?php
//-------- poczatek pliku index.php ----------
require_once 'HTML/Template/ITX.php';
$tpl = new HTML_Template_ITX('./templates');
$tpl->loadTemplatefile('main.tpl.html', true, true);
 
$link=($_GET['link']);
$tpl->setvariable("zmienna","test");
if (is_file("$link.php")) {
        $tpl->addBlockFile('zawartosc','blokzawartosci',"$link.tpl.html");
        include ("$link.php");   
}
 
$tpl->Show();
//-------- koniec pliku index.php---------
?>


Zauważ, że w powyższym przykładzie nie użyto funkcji odpowiadających za rozpoczęcie i zakończenie bloku. Użycie tych funkcji jest niezbędne tylko wtedy gdy dany blok parsujemy kilka razy. Główny szablon może wyglądać tak, zakładając, że nasz plik php nazywa się index.php
<!-- początek pliku main.tpl.html -->
<html>
<body>
<a href="index.php?link=galeria">Galeria</a><br>
<a href="index.php?link=kontakt">Kontakt</a><br>
<br>
{zmienna}
<br>
{zawartosc}
</body>
</html>
<!-- koniec pliku main.tpl.html-->


Następnym elementem potrzebnym do tego przykładu jest plik galeria.php i kontakt.php
galeria.php zawiera tylko kod odpowiedzialny za wywolanie elementów z szablonu galeria.tpl.html
<?php
//---- poczatek pliku galeria.php-------
$tpl->SetcurrentBlock('galeria');
$tpl->Setvariable("ZDJECIE1","tu bedzie zdjecie 1");
$tpl->Setvariable("ZDJECIE2","tu bedzie zdjecie 2");
$tpl->ParsecurrentBlock();
//---- koniec pliku galeria.php---------
?>



<!-- początek pliku galeria.tpl.html-->
 
<!-- BEGIN galeria-->
{ZDJECIE1}<br>
{ZDJECIE2}
<!-- END galeria-->
 
<!-- koniec pliku galeria.tpl.html-->


Analogicznie można postąpić z plikami kontakt.php i kontakt.tpl.html. Należy pamiętać aby umieścić wszystki pliki szablonów w katalogu, który podaliśmy na początku.


Możliwości IT/ITX są o wiele większe. Całkowita dokumentacja znajduje się pod adresem  http://pear.php.net/package/HTML_Template_IT/docs/latest/
Mam nadzieję że to co opisałem komuś się przyda. Zdaje sobię sprawe, że zaawansowani programości PHP nie skorzystają za wiele na tym co napiasłem ale liczę, że dla początujących będzie pomocne. Za tydzień spróbuje bliżej przedstawić paczke QuickForm (tworzenie formularzy).


by majeś