Utworzenie layoutu
Jak nie trudno zauważyć, skrypty widoków z poprzedniej części zawierały jedynie fragmenty
kodu HTML, a nie całe strony.
Jest to zamierzone i ma na celu przygotowanie akcji tak, aby
zwracały jedynie zawartość związaną z samą akcją, a nie aplikacją jako taką.
Teraz należy umieścić generowaną treść w pełnoprawnej stronie HTML.
Przydatne jest również
nadanie całej aplikacji jednolitego, zwięzłego wyglądu. Aby to osiągnąć zostanie użyty
globalny layout (wzór) strony.
Zend Framework używa dwóch wzorów projektowych przy implementacji layoutów: Widok dwustopniowy
(Two Step View) oraz
Widok
złożony (Composite View).
Widok dwustopniowy jest najczęściej powiązany z Widokiem przekształconym
(Transform View) - podstawową cechą jest założenie, że aplikacja tworzy widok
podrzędny, który zostaje umieszczony w widoku głównym (layout) i dopiero taki - złożony
widok jest przetwarzany do pokazania użytkownikowi.
Widok złożony natomiast, zakłada tworzenie jednego bądź wielu
autonomicznych widoków bez relacji rodzic-potomek.
Zend_Layout jest komponentem, który łączy te wzorce w
aplikacji Zend Framework. Każdy skrypt widoku (view script) posiada własne elementy i
nie musi zajmować się wyświetlaniem elementów wspólnych dla całej strony.
Mogą powstać sytuacje, w których niezbędne okaże się umieszczenie globalnych elementów w
pojedynczym widoku. W tym celu Zend Framework udostępnia szereg
pojemników (placeholders), które umożliwiają dostęp do takich
elementów z poziomu lokalnego skryptu widoku.
Aby rozpocząć korzystanie z Zend_Layout należy
najpierw poinstruować bootstrap aby
włączył zasób Layout. Można to osiągnąć za pomocą komendy
zf enable layout (w katalogu tworzonego projektu):
Tak jak jest to napisane w potwierdzeniu komendy, plik
application/configs/application.ini został zaktualizowany i
zawiera następujący wpis w sekcji production:
W rezultacie plik INI powinien wyglądać następująco:
Dodany zapis powoduje, że aplikacja szuka skryptów widoku w katalogu
application/layouts/scripts.
Należy zauważyć, iż taki katalog wraz z plikiem layout.phtml
zostały utworzone w strukturze projektu przez narzędzie wiersza poleceń zf.
Następną przydatną rzeczą będzie upewnienie się, że deklaracja XHTML
DocType jest umieszczona i poprawnie sformułowana.
Aby to osiągnąć należy dodać zasób do bootstrapa.
Najprostszym sposobem na dodanie zasobu bootstrap jest utworzenie chronionej metody o
nazwie zaczynającej się na _init. Celem jest zainicjalizowanie
deklaracji DocType więc nowa metoda w klasie bootstrap może się nazywać
_initDoctype():
W ciele metody należy powiadomić zasób widoku aby użył odpowiedniego DocType.
Tylko skąd wziąć obiekt widoku? Najłatwiejszym rozwiązaniem jest
zainicjalizowanie zasobu View. Potem można pobrać
obiekt i go użyć.
Aby zainicjalizować zasób widoku należy dodać następującą linijkę do pliku
application/configs/application.ini w sekcji
production:
Ten zapis inicjalizuje widok bez żadnych opcji (pisownia '[]' oznacza,
że "view" jest tablicą bez żadnych kluczy ani wartości).
Teraz, skoro widok jest skonfigurowany, można wrócić do metody
_initDoctype().
W niej należy upewnić się, że zasób View został
zainicjowany (na podstawie zapisów w pliku konfiguracyjnym), pobrać obiekt
widoku i go skonfigurować:
bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
}
]]>
Po zainicjalizowaniu Zend_Layout i ustawieniu
deklaracji Doctype, należy utworzyć główny layout strony:
doctype() ?>
Zend Framework Quickstart Application
headLink()->appendStylesheet('/css/global.css') ?>
layout()->content ?>
]]>
Za pomocą view helpera layout() pobierana jest zawartość
przeznaczona do wyświetlenia (znajduje się w zmiennej "content"). Można ją umieszczać w
innych częściach layoutu ale w większości przypadków takie podejście wystarczy.
Należy zwrócić uwagę na użycie view helpera headLink(). Jest to
prosty sposób na zachowanie kontroli nad elementami <link> dodawanymi w
różnych miejscach aplikacji oraz na wygenerowanie kodu HTML
dla tych elementów w pliku layoutu bądź innego skryptu widoku.
Jeśli zajdzie potrzeba dodania dodatkowego arkusza CSS w pojedynczej akcji to
można to zrobić używając headLink()(na generowanej
stronie pojawi się automatycznie).
Punkt kontrolny
Teraz należy udać się pod adres "http://localhost" i sprawdzić efekty oraz
wygenerowany kod. Powinien pojawić się nagłówek XHTML,
elementy head, title oraz body.