我已经实现了页面标题,所有页面都整齐地显示了标题。 现在我也希望显示网站名称。 我可以像
一样编写代码<title><?php echo Yii::app()->name . $this->pageTitle ?></title>
但是对于标题未设置的页面(即默认设置为CController
),网站名称将重复出现。
我想简单地覆盖我的控制器的setPageTitle
方法以预先设置网站名称。怎么做?
答案 0 :(得分:4)
您不必将$pageTitle
添加到控制器,它已经是Controller
类中的变量,因此只要您的控制器extend Controller
您应该没问题。然后,您可以随意设置页面标题。您可以为整个控制器,单个操作甚至视图更改它。
class MyController extends Controller {
public function actionAdmin() {
$this->pageTitle = 'I got set by action'; //only for this action
}
}
或在视图中
<?php
$this->pageTitle = 'I got set by the view'; //anytime this view gets called
?>
<h1>View File</h1>
如果您希望网站名称始终位于标题的末尾,只需修改主要布局:
<title><?php echo CHtml::encode($this->pageTitle); ?> <?php echo Yii::app()->name; ?></title>
答案 1 :(得分:4)
这是我解决了试图覆盖CController的方法setPageTitle方法的问题
class MyController extends Controller
{
public function setPageTitle($value){
$this->pageTitle = Yii::app()->name ." >> ". $value ;
}
}
现在,这个值将在没有app名称的布局中设置,即
<title><?php echo CHtml::encode($this->pageTitle); ?></title>
并在视图中删除应用名称。
$this->pageTitle = Yii::app()->name . ' >> Custom Title' ;//remove this to show instead
$this->pageTitle = 'Custom Title' ;//Plain title
现在输出
我的应用名称&gt;&gt;自定义标题
如果某些页面已在这些控制器的视图中连接了应用程序名称,则只需覆盖该控制器中的setPageTitle。但更好的方法是遵循常见的事情,因此覆盖基本控制器中的setPageTitle。
答案 2 :(得分:1)
如果您想要更多自动&#39;,例如:
你可以制作一个这样的过滤器:(也适用于多语言!!!)
1-在protected / components /
中创建一个文件PageTitleFilter.phpclass PageTitleFilter extends CFilter {
public $controller;
protected function preFilter($filterChain) {
// logic being applied before the action is executed
$this->controller->pageTitle = Yii::t('app', Yii::app()->controller->action->id) . ' ' . Yii::t('app', Yii::app()->controller->id);
return true; // false if the action should not be executed
}
protected function postFilter($filterChain) {
// logic being applied after the action is executed
}
}
2-在你的控制器中:
class MyController extends Controller {
public function filters() {
return array(
'accessControl', // perform access control for CRUD operations
array(
'PageTitleFilter + view, create, update, delete, admin',
'controller' => $this
),
);
}
}
然后你把一个文件protected / messages / es / app.php与每个动作的翻译放在一起,如:
return array(
'view'=>'ver',
'delete'='eliminar'
);
link:http://www.yiiframework.com/doc/guide/1.1/es/topics.i18n#locale-and-language
如果您想更改默认的pageTitle,可以执行任何操作:
$this->pageTitle= 'My page title';
如果您不想要多语言,请删除Yii :: t(&#39; app&#39;)功能!
答案 3 :(得分:0)
在每个控制器中,添加此属性变量:
class MyController extends Controller {
public $pageTitle = 'My Custom Title';
同样,您可以覆盖每个控制器的布局:
class MyController extends Controller {
public $layout = '//layouts/myCustomLayout';