2013-01-17 51 views
5

我對Zend Framework中的佈局有疑問。 這是我的項目結構:不同模塊的多種佈局 - Zend Framework

  • 我有2個名爲「backoffice」和「frontoffice」的模塊。
  • 我有一個layout.phtml的佈局/腳本爲後臺和frontoffice。
  • 現在我想單獨的「佈局/腳本」的「後臺」和「frontoffice」
  • 在我的application.ini我:resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

現在,我怎麼解決這個問題,我有單獨的佈局?

回答

8

只需在layout/scripts文件夾中放置另一個佈局,並告訴任何模塊,控制器或操作使用該其他佈局而不是默認佈局。

如果你想讓一個控制器使用不同的佈局,您可以將您的init()

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

可以分別做特定的動作或對整個模塊以下。

+0

完美的作品!非常感謝! – nielsv

1

您應該爲此寫入前端控制器插件(稱爲佈局選擇器)。

在你bootstrap.php中註冊該插件 - 佈局選擇:

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

自動加載的命名空間MY_中的application.ini

Autoloadernamespaces[] = "My_" 

最後,創建/庫的新文件夾「我的'並在其中的文件夾'插件',並在其中的文件'LayoutSelector.php'與代碼:

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通過這種方式,未來的每個模塊都將使用適當的佈局,無需在每個控制器中編寫選擇佈局。

3

將這個到你的application.ini

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

您的佈局文件將/modules/MODULE_NAME/views/scripts/layout.phtml