在静态页面视图中设置页面标题

时间:2011-01-14 19:40:30

标签: php cakephp

我正在使用CakePHP 1.3

我有一个名为temp.ctp的静态页面位于app/views/pages/temp.ctp

可以从我的网站访问,例如:localhost/pages/temp

我正在尝试从视图中设置页面标题。

我已经尝试将以下每个内容放在temp.ctp文件中:

<?php $this->set("title_for_layout","Temp Temp Temp"); ?>

<? $this->pageTitle = 'Temp Temp Temp'; ?>

整个文件如下所示:

<?php $this->set("title_for_layout","Temp Temp Temp"); ?>


Hello World temp

使用cakephp 1.3附带的默认layout(页眉和页脚)。

两者都没有奏效。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

根据CakePHP Google Group上的一个帖子,应该可以直接在你的视图中使用$this->set("title_for_layout","Temp"); - 在CakePHP 1.3中,1.2使用this->pageTitle = "Temp";

根据故障单,页面控制器仍然使用$ title而不是$ title_for_layout,所以请尝试:

$this->set("title","Temp");

http://cakephp.lighthouseapp.com/projects/42648/tickets/511-pages-controller-needs-updating-for-title_for_layout

答案 1 :(得分:0)

首先要理解的是,默认情况下,您不应该从视图文件中设置页面标题。那时实际上已经太晚了。 Controller将最终的HTML分为两部分:它将View放在Layout中。布局文件是默认使用$title_for_layout设置页面标题的位置。

看一下cake / libs / view / layouts / default.ctp。在<head>中,您会看到这个,这解释了您已经描述过的内容

<title>
    <?php __('CakePHP: the rapid development php framework:'); ?>
    <?php echo $title_for_layout; ?>
</title>

由于Controller是您设置viewVars的地方,$this->set("title_for_layout","Temp Temp Temp");仅适用于Controller。它在视图或布局文件中没有任何作用(正如您在问题中记录的那样)。

您可能有充分的理由跳过布局并使用单个静态视图.ctp文件。为此,请在Controller中将 autoLayout 变量设置为false。您可以像设置名称,使用等变量一样为整个Controller设置此项: var $autoLayout = false; 或使用 $this->autoLayout = false; 按方法分类。

Now Cake仅渲染您的视图.ctp文件,而不包含布局的包装。所有viewVars仍然可用,因此如果需要,您可以使用$ title_for_layout,否则硬编码标题。无论哪种方式,您都需要在视图.ctp文件的顶部包含您自己的<head> / <title>代码,因为它不再包含在布局中。