我再次提出有关yii框架的问题。
我在views/myviewname/admin.php.
下面有一个页面
我在views/myotherviewname/admin.php.
下面有一个页面
现在我想给那些页面另一种风格。但是我该怎么做?
我在themes/classis/views/myviewname/admin.php
下创建了一个页面,在该文件中我得到了这个:
<?php /* @var $this Controller */ ?>
<?php echo $content; ?>
但是我收到了一个错误。因为$content
未定义。
我如何设计这些页面的样式?如果我可以一次设置所有管理页面的样式,那就太好了。
答案 0 :(得分:2)
首先,不可否认的是,$content
变量将被称为未定义,因为它只能用于Layouts
,而不能用于Views
。
您可能知道,如果您已经为应用程序设置了主题(在'theme'=>'myTheme'
的主配置文件中),Yii会在themes/myTheme
中查找该主题,并且所有视图都将在{{ 1}}而不是themes/myTheme/views/x/y.php
。此外,您的布局将被位于views/x/y.php
的布局覆盖。
现在,我们假设我们要创建2个主题:
我们应该创建如下结构:
themes/myTheme/layouts
我们有一个+themes
+darkTheme
+views
+layouts
+main.php
+myLayout1.php
+myLayout2.php
+myController
+myView1.php
+lightTheme
+views
+layouts
+main.php
+myLayout1.php
+myLayout2.php
+myController
+myView1.php
,它包含我们的基本主题结构(骨架),以及分别名为main.php
和myLayout1.php
的2个布局。我们还已经在我们的基本控制器中定义了一个默认布局(通常为myLayout2.php
),如下所示:
Controller.php
现在,我们有一个主要布局,默认显示public $layout='//layouts/myLayout1';
内的所有内容。我们可以在下面的操作中更改布局:
myLayout1
我们也可以像下面这样更改应用主题:
$this->layout="myLayout2";
注意:主题名称区分大小写。如果您尝试激活不存在的主题,Yii :: app() - &gt;主题将返回null。
以上代码可以写入Yii::app()->theme="lightTheme";
方法或每个操作。请注意,如果您呈现beforeAction()
(myView1
)并且主题设置为$this->render('myView1')
,则Yii将呈现darkTheme
而不是themes/darkTheme/views/myController/myView1.php
。
为了更清楚,views/myConteoller/myView1.php
将用于布局。此外,值得注意的是,$content
将被视图中的所有内容所取代。因此,如果要修改整个页面的架构,则必须修改$content
布局。在前面,如果要修改视图内容的样式,则需要修改布局。