我正在尝试在模块中获取工作布局。所以我在名为'adminLayout'
的模块的视图文件夹中创建了一个布局假设init()方法中的AdminModule.php
布局。
所以现在它看起来像这样:
public function init()
{
$this->layoutPath = Yii::getPathOfAlias('application.modules.admin.views.layouts');
$this->layout = 'adminLayout';
// this method is called when the module is being created
// you may place code here to customize the module or the application
// import the module-level models and components
$this->setImport(array(
'admin.models.*',
'admin.components.*',
));
}
但由于某种原因,布局不适用于模块。我试图将“public $ layout”添加到控制器中并且它可以工作。
无法弄清楚是什么问题。
此外,我尝试将布局设置添加到配置文件夹中的main.php
,但仍然没有操作。如果有人可以提供帮助,将不胜感激。
答案 0 :(得分:4)
解决方案是在模块中的beforeControllerAction上设置布局。它应该工作。
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
$controller->layout = 'adminLayout';
return true;
}
else
return false;
}
答案 1 :(得分:1)
关于这个主题有很多帖子,答案在Yii文档中:
布局属性
public mixed $ layout;
此模块内控制器共享的布局。 如果控制器已显式声明其自己的布局,则将忽略此属性。如果为null(默认),则应用程序的布局或父模块的布局(如果可用) ) 将会被使用。如果这是错误的,那么将不使用任何布局。
只需从控制器中检测模块并相应地设置布局:
class Controller extends CController
{
public function init(){
//Set layout
$this->layout = ($this->module->id=='admin') ? '//layouts/column2' : '//layouts/column1';
.........
}
答案 2 :(得分:0)
在模块中创建资产文件夹。为assetsURL
添加以下代码:
private $_assetsUrl;
public function getAssetsUrl()
{
if ($this->_assetsUrl === null)
$this->_assetsUrl = Yii::app()->getAssetManager()->publish(
Yii::getPathOfAlias('admin.assets') );
return $this->_assetsUrl;
}
创建beforeControllerAction
功能,然后添加$controller->layout
:
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
// this overwrites everything in the controller
$controller->layout = 'adminLayout';
// this method is called before any module controller action is performed
return true;
}
else
return false;
}
导入所有CSS
和JS
文件,例如:
<link rel="stylesheet" type="text/css" href="<?php echo $this->module->assetsUrl; ?>/css/style.default.css" media="screen, projection" />