zend framework多模块多布局配置(2)


resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout = "layout"
admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts"


不论是第一种还是第二种,这时如果访问,你会发现系统并没有使用期望的admin.phtml作为布局文件,而是使用了默认的layout.phtml。这是因为admin那行配置并不是系统默认能处理的有效配置,所以我们要自己来处理它。

我们新建文件:library/Rockux/Controller/Action/Helper/LayoutLoader.php,

针对第一种情况代码如下:

复制代码 代码如下:


class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{

public function preDispatch()
{
$bootstrap = $this->getActionController()
->getInvokeArg('bootstrap');
$config = $bootstrap->getOptions();
$module = $this->getRequest()->getModuleName();
if (isset($config[$module]['resources']['layout']['layout'])) {
$layoutScript = $config[$module]['resources']['layout']['layout'];
$this->getActionController()
->getHelper('layout')
->setLayout($layoutScript);
}
}

}


针对第二种情况代码如下:

复制代码 代码如下:


class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{

public function preDispatch()
{
$bootstrap = $this->getActionController()
->getInvokeArg('bootstrap');
$config = $bootstrap->getOptions();
$module = $this->getRequest()->getModuleName();
if (isset($config[$module]['resources']['layout']['layoutPath'])) {
$layoutPath =
$config[$module]['resources']['layout']['layoutPath'];
$this->getActionController()
->getHelper('layout')
->setLayoutPath($layoutPath);
}
}
}


接下来我们还需要将它添加到application/Bootstrap.php里去

复制代码 代码如下:


protected function _initLayoutHelper()
{
$this->bootstrap('frontController');
$layout = Zend_Controller_Action_HelperBroker::addHelper(
new Rockux_Controller_Action_Helper_LayoutLoader());
}


再次访问,应当就可以看到使用指定的布局文件了。
如果要针对某个特定的controller使用特定的layout,可以在controller的init()方法里添加如下代码:

复制代码 代码如下:


$layout = Zend_Layout::getMvcInstance();
$layout->setLayout('layout_special');

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9eb5eaa9beceba3bbc3054af9f1b3044.html