Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.
7. Lista
kategorii w postaci
tabeli
Przedstawiony przykład pokazuje podstawowe kroki potrzebne do generowania listy powtarzających się elementów przy użyciu FastTemplate. Istnieje również w FastTemplate inny mechanizm pozwalający na wyeliminowanie dodatkowych plików zawierających szablon pojedynczego elementu. Aby użyć tego
mechanizmu zmienimy szablon items, oraz główny skrypt PHP. Na wydrukach 15. i 16. zamieszczone są zmienione pliki. Wynik działania tego skryptu jest taki, jak pokazany na rysunku 14.7.
Wydruk 14.15. Nowy szablon „items” korzystający z dynamicznych bloków
Do wyboru są następujące kategorie produktów:
<br><br>
<table border="1">
<!-- BEGIN DYNAMIC BLOCK: item -->
<tr>
<td>
Kategoria nr. {CAT_ID}
</td>
<td>
<a href="show_category.phtml?cat_id={CAT_ID}">{CAT_NAME}</a>
</td>
</tr>
<!-- END DYNAMIC BLOCK: item -->
</table>
W szablonie tym został zdefiniowany podszablon — blok dynamiczny o nazwie item. Jest to dokładnie to samo, co stworzenie osobnego pliku zawierającego szablon item. Zaletą takiego rozwiązania jest utrzymanie oryginalnej struktury pliku HTML oraz ograniczenie ilości niezbędnych plików szablonów. Użycie szablonów wymaga również kilku zmian w skrypcie używającym klasy FastTemplate. Zostały one zamieszczone na wydruku 14.16.
Wydruk 14.16. Nowy skrypt PHP
<?php
include( "class.FastTemplate.php" );
$aTPL = new FastTemplate( "." );
$aTPL->define( array( 'base' => 'cat_base.tpl',
'items' => 'cat_items_dyn.tpl') );
Rozdział 14 – Witryny oparte o szablony
182
$aTPL->define_dynamic( 'item', 'items' );
$aCategories = array( "ubrania", "prezenty", "zabawki", "książki" ); foreach( $aCategories as $aID => $aName )
{
$aTPL->assign( array( 'CAT_ID' => $aID,
'CAT_NAME' => $aName ) );
// analiza elementu i jego dołączenie do zmiennej szablonu
// ITEM_LIST
$aTPL->parse( 'ITEM_LIST', '.item' );
}
$aTPL->assign( array( 'TITLE' => 'Lista kategorii' ) );
$aTPL->parse( 'ITEMS', 'items' );
$aTPL->parse( 'BASE', 'base' );
$aTPL->FastPrint( 'BASE' );
?>
W skrypcie tym widoczne są dwie wyraźne zmiany w stosunku do wydruku 14.12. Po pierwsze, w nowym skrypcie brakuje jednego wywołania metody define(). Po drugie, wykorzystana jest metoda FastTemplate define_dynamic(), która wskazuje systemowi FastTemplate, że w szablonie items istnieje blok dynamiczny o nazwie item. Od tej chwili FastTemplate traktuje blok dynamiczny identycznie, jak byłby to osobny plik.
Korzystając z tego mechanizmu, niezmiernie ważne jest, aby blok dynamiczny był poprawny składniowo.
Składnia linii BEGIN i END musi być poprawna i wymagane jest zachowanie odpowiedniej wielkości liter. Blok kodu zaczyna się od nowej linii tekstu przeznaczonej jedynie dla tej dyrektywy. W linii zawierającej wyrażenia BEGIN i END nie powinno być żadnego innego tekstu, można jedynie umieszczać tam dowolną ilość znaków odstępu. Dyrektywa musi być napisana dokładnie w takiej postaci, jak poniższa linia kodu. Linia ta musi być dokładnie taka, jak przedstawiona, z dokładnością do odstępów pomiędzy znakami. To samo obowiązuje dla dyrektywy END. Linie BEGIN i END nie mogą rozciągać się na większa ilość linii.
<!-- BEGIN DYNAMIC BLOCK: nazwa_bloku -->
Wszystkie te przykłady tworzą szkielet aplikacji WWW korzystających z szablonów. Następna część tego rozdziału zawiera kilka przykładów scenariuszy stosowanych w prawdziwych aplikacjach.
Zapożyczanie
Zapożyczanie jest bardzo łatwo realizowalne za pomocą witryny opartej o szablony. Zapożyczanie