在 Yii 中设置样式管理页面


Style admin page in Yii

我在这里再次提出有关 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 个主题:

  1. 黑暗主题
  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.phpmyLayout2.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布局。在前面,如果要修改视图内容的样式,则需要修改布局。