Autor wpisu: batman, dodany: 16.11.2012 13:00, tagi: php
Autor wpisu: batman, dodany: 12.11.2012 21:24, tagi: internet
Autor wpisu: Marek, dodany: 07.11.2012 22:06, tagi: php, zend_framework
Zend Framework
Eleganckim sposobem na użycie innego layoutu niż domyślny w jednym z modułów, jest napisanie własnego pluginu, który dołączymy do front kontrolera w klasie bootstrapa modułu. Żeby ten został zaczytany przez naszą aplikację, musimy się upewnić, że zainicjowaliśmy zasób modules np. w pliku application.ini:
resources.modules[] = ""
Dla przykładu załóżmy, że inny layout będzie miał moduł Blog. Tworzymy zatem w katalogu:
/application/modules/blog/
klasę Blog_Bootstrap, w której dołączamy do front kontrolera nasz plugin np. za pomocą metody _initPlugins():
class Blog_Bootstrap extends Zend_Application_Module_Bootstrap { protected function _initPlugins(){ $front = $this->getApplication() ->bootstrap('frontcontroller') ->getResource('frontcontroller'); $front->registerPlugin(new Blog_Plugin_Layout()); } }
Najpierw pobieramy zasób front kontrolera, następnie rejestrujemy nasz plugin za pomocą metody registerPlugin().
Czas na kod samego pluginu:
class Blog_Plugin_Layout extends Zend_Controller_Plugin_Abstract { public function routeShutdown(Zend_Controller_Request_Abstract $request) { if ('blog' == $request->getModuleName()){ Zend_Layout::getMvcInstance()->setLayout('blog'); } } }
Nasz plugin dziedziczy po klasie Zend_Controller_Plugin_Abstract, a więc możemy użyć metody routeShutdown(), która zostanie uruchomiona zaraz po ustaleniu routingu. Dzięki czemu mamy możliwość sprawdzenia w jakim module aktualnie się znajdujemy. A więc sprawdzamy czy nazwa modułu jest równa ‚blog’, jeśli tak, zmieniamy layout na plik /application/layouts/blog.phtml.
Zend Framework2
A jak wygląda ustalenie specyficznego layoutu dla modułu w Zend Framework 2?
Zmiana layoutu dla modułu w ZF2 jest dużo prostsza:
- instalujemy moduł Evana Coury’ego stąd: https://github.com/EvanDotPro/EdpModuleLayouts
- dodajemy tablicę do pliku konfiguracyjnego modułu:
array( 'module_layouts' => array( 'MyBlog' => 'layout/blog', ) );