我正在使用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
(页眉和页脚)。
两者都没有奏效。这样做的正确方法是什么?
答案 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");
答案 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>
代码,因为它不再包含在布局中。