如何在Yii中设置带有pagetitle的Sitename

Swa*_*kar 7 php frameworks yii

我已经实现了页面标题,所有页面都整齐地显示了标题.现在我也希望显示网站名称.我可以编写代码

<title><?php echo Yii::app()->name . $this->pageTitle ?></title>
Run Code Online (Sandbox Code Playgroud)

但对于那些未设置标题的页面(即默认设置CController),网站名称将重复出现.

我想简单地覆盖setPageTitle我的控制器的方法来preename.怎么办?

Pit*_*ate 5

您不必将其添加$pageTitle到控制器中,它已经是Controller该类中的变量,因此只要您使用控制器就extend Controller可以了。然后,您可以在任意位置设置页面标题。您可以为整个控制器,单个动作甚至是视图进行更改。

class MyController extends Controller {
    public function actionAdmin() {
        $this->pageTitle = 'I got set by action'; //only for this action
    }
}
Run Code Online (Sandbox Code Playgroud)

或在视图中

<?php
$this->pageTitle = 'I got set by the view'; //anytime this view gets called
?>
<h1>View File</h1>
Run Code Online (Sandbox Code Playgroud)

如果您希望站点名称始终位于标题的末尾,只需修改主布局即可:

<title><?php echo CHtml::encode($this->pageTitle); ?> <?php echo Yii::app()->name; ?></title>
Run Code Online (Sandbox Code Playgroud)


Swa*_*kar 5

这就是我试图覆盖CController的setPageTitle方法的方法解决的问题

class MyController extends Controller
{
  public function setPageTitle($value){
    $this->pageTitle = Yii::app()->name ." >> ". $value ;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,此值将在布局中设置而无需应用程序名称,即

<title><?php echo CHtml::encode($this->pageTitle); ?></title>
Run Code Online (Sandbox Code Playgroud)

并在视图中删除应用名称。

$this->pageTitle = Yii::app()->name . ' >> Custom Title' ;//remove this to show instead
$this->pageTitle = 'Custom Title' ;//Plain title
Run Code Online (Sandbox Code Playgroud)

现在的输出将是

我的应用名称>>自定义标题

如果某些页面已经在视图中为这些控制器串联了应用程序名称,则您只需要在该控制器中覆盖setPageTitle,但是更好的方法是始终遵循通用原则,因此在基本控制器中覆盖setPageTitle。