5. Inne rodzaje sekcji

Zagnieżdżanie sekcji oraz zabawy formatami danych to dopiero przedsmak prawdziwej zabawy. Zwykłe liniowe listy elementów są wprawdzie wykorzystywane często, ale nie obejmują wszystkich możliwych pomysłów twórców szablonów. Dlatego w OPT instrukcja opt:section jest w rzeczywistości tylko jednym z przedstawicieli całego zbioru instrukcji zwanego właśnie sekcjami i nie powinno się między nimi stawiać znaku równości. Pozostałe sekcje to:

  1. opt:selector - połączenie sekcji z instrukcją switch, dzięki czemu możemy zdefiniować kilka różnych sposobów wyświetlania elementów.
  2. opt:grid – wyświetla elementy listy w kolumnach.
  3. opt:tree – wyświetla drzewa, czyli listy, w których elementy można zagnieżdżać w sobie dowolną ilość razy.

Co ważniejsze, potrafią one ze sobą współpracować. Przykładowo, zagnieżdżając np. opt:grid w opt:section, kompilator wciąż utworzy między nimi powiązanie identyczne, jak te pokazane w poprzednim rozdziale. Przyjrzyjmy się zatem prawdziwej potędze sekcji i wyświetlmy galerię zdjęć:

<table class="gallery">
  <opt:grid name="images" cols="5">
   <tr>
     <opt:item><td><img parse:src="$images.picture" /></td></opt:item>
     <opt:emptyItem><td> </td></opt:emptyItem>
   </tr>
  </opt:grid>
</table>

Wykonanie czegoś takiego w czystym PHP dałoby klasyczny przykład wyjątkowo nieczytelnego kodu „napisz i zapomnij”. Jednak OPT jest inteligentniejszy i potrafi zadbać o to, by twórca szablonu mógł napisać przejrzysty kod, i to bez zabawy szczegółami implementacyjnymi. Po prostu podajemy, jak ma wyglądać pojedynczy element ze zdjęciem, jak mają wyglądać puste elementy, a parser już zadba o to, by w każdym wierszu było dokładnie pięć kolumn oraz ewentualne braki w ostatnim zostały dopełnione pustymi komórkami.

Polecamy zapoznać się także z pozostałymi rodzajami sekcji i poćwiczyć łączenie ich ze sobą.