我想为每个控制器和动作设置不同的标题(头部)。 如何从控制器执行此操作?
答案 0 :(得分:10)
class SiteController {
public function actionIndex() {
$this->pageTitle = 'Home page';
//...
}
//..
}
<title><?php echo $this->pageTitle; ?></title>
也许您忘了在HTML中添加引用?
答案 1 :(得分: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
}
}
但是,当您要在“标题共享”方案中包含或排除每个操作时,这需要您单独访问每个操作。没有这个缺点的解决方案是使用filter。例如:
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
}
}
答案 2 :(得分:1)
您可以使用函数init或操作之前或在实际操作调用之前运行哪个调用。因此,在该函数中,您可以为控制器设置公共pageTitle变量。
使用像这样:
public function init()
{
parent::init();
$this->pageTitle = "My Page Title";
}
答案 3 :(得分:0)
你可以这样给: -
$this->set("title", "Enrollment page");
并通过提供不同的名称或标题在您的ctp文件中使用此$ title ..
试试这个..
答案 4 :(得分:0)
在VIEW页面(index.php,view.php,create.php等)
$this->setPageTitle('custom page title');