lication_Module_Bootstrap
{
}
并且在application/Bootstrap.php文件里加入以下方法:
复制代码 代码如下:
protected function _initAppAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
''namespace'' => ''App'',
''basePath'' => dirname(__FILE__),
));
return $autoloader;
}
复制代码 代码如下:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout = "layout"
admin.resources.layout.layout = "admin"
第二种,不同模块的布局脚本文件分别存放在各自的模块文件夹下
可以在application下新建如下目录和文件:
application/layouts/scripts/layout.phtml
application/modules/admin/layouts/scripts/layout.phtml
在配置文件application.ini中添加如下几行:
复制代码 代码如下:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout = "layout"
admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts"
不论是第一种还是第二种,这时如果访问http://localhost/admin,你会发现系统并没有使用期望的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());
}
再次访问http://localhost/admin,应当就可以看到使用指定的布局文件了。
如果要针对某个特定的controller使用特定的layout,可以在controller的init()方法里添加如下代码:
复制代码 代码如下:
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout(''layout_special'');