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.