我想为每个控制器和动作设置不同的标题(在头部)。如何从控制器执行此操作?
问问题
14128 次
5 回答
11
你的控制器
class SiteController {
public function actionIndex() {
$this->pageTitle = 'Home page';
//...
}
//..
}
布局文件
<title><?php echo $this->pageTitle; ?></title>
也许你忘了在你的 html 中添加引用?
于 2012-04-30T08:32:03.370 回答
8
如果您想在每个操作中使用不同的标题
然后只需CController.pageTitle
在您的操作中设置值:
class MyController extends CController {
public function actionIndex() {
$this->pageTitle = "my title";
// other code here
}
}
如果您想在多个操作之间共享特定标题
一种方法是简单地遵循上述方法,可能使用类常量作为页面标题:
class MyController extends CController {
const SHARED_TITLE = "my title";
public function actionIndex() {
$this->pageTitle = self::SHARED_TITLE;
// other code here
}
public function actionFoo() {
$this->pageTitle = self::SHARED_TITLE;
// other code here
}
}
但是,这要求您在想要在“标题共享”方案中包含或排除每个操作时分别访问它。没有这个缺点的解决方案是使用过滤器。例如:
class MyController extends CController {
public function filters() {
// set the title when running methods index and foo
return array('setPageTitle + index, foo');
// alternatively: set the title when running any method except foo
return array('setPageTitle - foo');
}
public function filterSetPageTitle($filterChain) {
$filterChain->controller->pageTitle = "my title";
$filterChain->run();
}
public function actionIndex() {
// $this->pageTitle is now set automatically!
}
public function actionFoo() {
// $this->pageTitle is now set automatically!
}
}
如果您想在所有操作中使用相同的标题
这很明显,但为了完整起见,我提到它:
class MyController extends CController {
public $pageTitle = "my title";
public function actionIndex() {
// $this->pageTitle is already set
}
public function actionFoo() {
// $this->pageTitle is already set
}
}
于 2012-04-30T14:34:46.393 回答
1
您可以使用函数 init 或 before action 或在实际操作调用之前运行 which call。因此,在该函数中,您可以为控制器设置公共 pageTitle 变量。
像这样使用:
public function init()
{
parent::init();
$this->pageTitle = "My Page Title";
}
于 2012-04-30T05:03:37.627 回答
0
你可以这样给:-
$this->set("title", "Enrollment page");
并通过给出不同的名称或标题在你的 ctp 文件中使用这个 $title..
试试这个..
于 2012-04-30T05:32:21.160 回答
0
在 VIEW 页面中(index.php、view.php、create.php 等)
$this->setPageTitle('custom page title');
于 2014-04-09T08:52:29.690 回答