如何在配置文件中为前端添加新布局,并为管理部分保留一个
答案 0 :(得分:0)
默认情况下,这是不可能的,因为在路由请求之前(显然)执行了引导程序。如果调用前端或后端,则引导程序无法知道。您可以创建 FrontControlle -Plugin,它读取(自定义)配置设置和路由请求,然后设置正确的布局。
答案 1 :(得分:0)
我有完全相同的问题,并通过子类化bootstrap解决了它。所以我有三个引导程序文件
类似于bootstrap文件的东西(它们都可以放在默认的Zend位置)
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initXXX() {
/* COMMON FOR ALL */
}
/* ... etc ... */
}
class BootstrapAdmin extends Bootstrap
{
protected function _initAdmin1() {
/* specific for admin */
}
/* ... etc ... */
}
class BootstrapUser extends Bootstrap
{
protected function _initUser1() {
/* specific for admin */
}
/* ... etc ... */
}
其中(1)和(2)延伸(3)。如果你愿意,我会重新创建代码。
之后在index.php中:
if ($adminMode) {
$application->setBootstrap(APPLICATION_PATH . '/Name_of_Bootstrap_file.php', 'BootstrapAdmin');
} else {
$application->setBootstrap(APPLICATION_PATH . '/Name_of_Bootstrap_file.php', 'BootstrapUser');
}
我第一次这样做时,我将所有类放在同一个文件Name_of_Bootstrap_file.php中,为了将它们一起更改,下次虽然可以采用不同的方式...
希望我帮助过。
答案 2 :(得分:0)
取决于加载了哪些模块的布局
在我的configs / application.ini
中resources.layout.layout = "default"
resources.layout.pluginClass = "Core_Controller_Plugin_ModuleBasedLayout"
然后是我的插件
<?php
class Core_Controller_Plugin_ModuleBasedLayout
extends Zend_Layout_Controller_Plugin_Layout
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$this->getLayout()->setLayoutPath(
Zend_Registry::get('config')->resources->frontController->moduleDirectory
. DIRECTORY_SEPARATOR . $request->getModuleName() . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'layouts' );
}
}
和我的bootstrap.php
protected function _initConfig() {
Zend_Registry::set ( 'config', new Zend_Config ( $this->getOptions () ) );
}
我的布局存储在views / layouts / default.php
中答案 3 :(得分:0)
以为我会使用我的解决方案。这假定“admin”部分是一个模块。
我开发了一个动作助手,而不是根据模块名称和配置切换布局 - ModuleLayoutLoader
您可以使用关联的ModuleLayout应用程序资源插件从配置文件中配置它。例如
resources.moduleLayout.admin.layout = "admin"
resources.moduleLayout.anotherModule.layout = "foo"
如果要将布局脚本分开,还可以使用类似的设置模块布局的layoutPath
属性
resources.moduleLayout.admin.layoutPath = APPLICATION_PATH "/path/to/admin/layout"