2013-01-17 6 views
5

Mam pytanie dotyczące układów w Zend Framework. To jest moja struktura mojego projektu:Wiele układów dla różnych modułów - Zend Framework

  • Mam 2 moduły o nazwie "backoffice" i "frontoffice".
  • Mam jeden layout.phtml w układach/skryptach zarówno dla zaplecza biurowego, jak i frontoffice.
  • Teraz chcę oddzielne układy "/ scripts" za "backoffice" i "FrontOffice"
  • W moim application.ini mam: resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

Teraz jak mogę rozwiązać ten problem, że mam oddzielne układy?

Odpowiedz

8

Po prostu umieść kolejny układ w folderze layout/scripts i powiedz jakiemukolwiek modułowi, kontrolerowi lub akcji, aby użyć innego układu zamiast domyślnego układu.

Jeśli chcesz, aby kontroler użyć innego układu, można umieścić następujące informacje w swojej init()

$this->_helper->layout->setLayout('layoutname'); 

Można to zrobić odpowiednio do konkretnych działań lub do całego modułu.

+0

Działa idealnie! Dziękuję bardzo! – nielsv

1

Powinieneś napisać wtyczkę kontrolera frontowego do tego celu (zwaną selektorem układu).

W swojej bootstrap.php zarejestrować ten plugin - selektor układ:

protected function _initPlugins(){ 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new My_Plugins_LayoutSelector()); 
} 

Auto nazw obciążenie My_ w application.ini

Autoloadernamespaces[] = "My_" 

I wreszcie stworzyć w/Library nowego folderu „My "iw tym folderze" Wtyczki "i plik" LayoutSelector.php "z kodem:

class My_Plugins_LayoutSelector extends Zend_Controller_Plugin_Abstract { 
    public function preDispatch(Zend_Controller_Request_Abstract $request) { 
     $module = $request->getModuleName(); 
     $layout = Zend_Layout::getMvcInstance(); 
     $layout->setLayout($module); 
    } 
} 

I W ten sposób każdy moduł w przyszłości będzie wykorzystywał odpowiedni układ i nie ma konieczności zapisu w każdym sterowniku, aby wybrać układ.

3

Włóż to do swojego application.ini

resources.layout.layout = "layout" 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

Plik układ będzie /modules/MODULE_NAME/views/scripts/layout.phtml