2012-02-03 80 views

回答

6

從你的bootstrap.php文件,你可以做這樣的事情:

protected function _initLayoutName() 
{ 
    // use sitelayout.phtml as the main layout file 
    Zend_Layout::getMvcInstance()->setLayout('sitelayout'); 
} 

如果要使用不同的佈局不同的模塊,你需要註冊在引導一個插件,並有插件包含下面的代碼:

class Application_Plugin_LayoutSwitcher extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
    { 
     $module = $request->getModuleName(); // get the name of the current module 

     if ('admin' == $module) { 
      // set the layout to admin.phtml if we are in admin module 
      Zend_Layout::getMvcInstance()->setLayout('admin'); 
     } else if ('somethingelse' == $module) { 
      Zend_Layout::getMvcInstance()->setLayout('somethingelse'); 
     } 
    } 
} 

從你的application.ini中,你可以做到這一點,設置佈局腳本:

resources.layout.layout = "layoutname" 

但是,這不適用於每個佈局。如果您需要根據模塊更改佈局,則必須使用插件,但可以使用application.ini中的設置來設置默認佈局名稱。

+0

THX!這是我正在尋找,但有沒有辦法在ini配置文件中做到這一點? – blacktie24 2012-02-04 05:02:24

+1

我剛剛用一個例子更新了答案。 – drew010 2012-02-04 05:22:47

+0

gotcha,thx再次的詳細回覆! – blacktie24 2012-02-04 05:41:41

3

如果你想利用基於您的模塊 您可以創建一個插件,在您的自舉註冊它有特定的佈局:

<?php 

class Plugin_LayoutModule extends Zend_Controller_Plugin_Abstract 
{ 
     /** 
     * preDispatch function. 
     * 
     * Define layout path based on what module is being used. 
     */ 
     public function preDispatch(Zend_Controller_Request_Abstract $request) 
     { 
       $module = strtolower($request->getModuleName()); 
       $layout = Zend_Layout::getMvcInstance(); 

       if ($layout->getMvcEnabled()) 
       { 
         $layout->setLayoutPath(APPLICATION_PATH . '/modules/' . $module . '/layouts/'); 
         $layout->setLayout($module); 
       } 
     } 
} 

//Register it in your bootstrap.php  
    <?php 
     defined('APPLICATION_PATH') 
      or define('APPLICATION_PATH', dirname(__FILE__)); 
     ... 

     Zend_Layout::startMvc(); 
     $frontController->registerPlugin(new Plugin_LayoutModule()); 
    ?> 

編輯:

設置佈局到另一個文件使用.ini文件:

創建layout.ini文件,並把它:

[layout] 
layout = "foo" 
layoutPath = "/path/to/layouts" 
contentKey = "CONTENT" 

在引導文件:

$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); 

$layout = Zend_Layout::startMvc($config); 
+0

Thx求救!正如我前面問drew010,是否有任何方法通過ini配置文件設置默認佈局名稱? – blacktie24 2012-02-04 05:03:31

+0

使用layout.ini文件編輯我的答案 – 2012-02-04 05:55:13