Mi az a layout? Itt kicsit utánna olvashatsz, ha felmerül benned ez a kérdés.
Első lépésben, állítsuk be a ZF-et, hogy használja a layout-ot, szerkesszük az application.ini fájlt és illeszük bele a következőt:
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
Hozzuk létre az application mappában a layouts mappát, és egyből hozzuk létre a layout.phtml fájlt is. Egy egyszerü minta layout.phtml -re
<html> <head> <?= $this->headTitle() ?> <?= $this->headLink()?> <?= $this->headStyle() ?> <?= $this->headScript() ?> <?= $this->headMeta() ?> </head> <body> <?=$this->layout()->content ?> <?= $this->InlineScript() ?> </body> </html>
A külömböző, használható view helperekről itt olvashatsz többet. Ajánlom figyelmedbe a placeholder helpert is. Nagy az oldal, keress rá a headstyle, headscript stb. szóra.
Szuper, mostmár lehet nekiállni kitalálni a dizájnt, áttenni html-be és már formába is lehet önteni az oldalt.
Mi van, ha az egyes modulokhoz más-más dizájnt akarunk használni? A controllerben, a $this->view->layout()->setLayout([fájlnév kiterjesztés nélkül]); parancsal megváltoztathatjuk az épp aktuális layout scriptet, de minden egyes controllerben csináljuk ezt meg? Mi van ha változtatni akarunk, mindenhol írjuk át? NEM!
Készítsünk egy controller plugint.
class My_Plugin_Layout extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup( $request ) { $layout = Zend_Layout::getMvcInstance(); switch( $request->getModuleName() ) { case 'default': $layout->setLayout('layout'); break; case 'admin': $layout->setLayout('admin'); break; } } }
És ezzel minden probléma megoldva, egy helyen állítható be minden. Én úgy csinálom, hogy a modulokhoz tartozó layout-ot az application.ini -ben lehet megadni. Ha úgy érzed szükségesnek, akár controllerre vagy action-re is adhatsz meg más-más layout-ot ezzel a módszerrel, mindezt egy helyen, azaz a ha később módosítani kell, nem kell végigbogarásznód a fél programot.