我在这里再次提出有关yii框架的问题。
我下有一个页面views/myviewname/admin.php.
我下有一个页面views/myotherviewname/admin.php.
现在我想给这些页面提供另一种样式。但是我该怎么做呢?
我themes/classis/views/myviewname/admin.php
在该文件下创建了一个页面,并在其中得到了以下信息:
<?php /* @var $this Controller */ ?>
<?php echo $content; ?>
但是我得到一个错误。因为$content
没有定义。
如何为这些页面设置样式?如果我可以一次设置所有管理页面的样式,那就太好了。
首先,不可否认的是,$content
变量将被称为undefined,因为它只能在中使用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
包含基本主题结构(骨架)的2个布局myLayout1.php
,myLayout2.php
分别命名为和。同样,我们已经在我们的基本控制器中定义了默认布局(通常是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
布局。在前面,如果要修改视图内容的样式,则需要修改布局。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句