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