6

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

4

5 回答 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 回答