如何设置控制器操作的页面标题?

时间:2012-04-30 03:24:58

标签: php controller yii

我想为每个控制器和动作设置不同的标题(头部)。 如何从控制器执行此操作?

5 个答案:

答案 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');