在CakePHP 2.9.5 https://book.cakephp.org/2.0/en/views.html的文档中,它说:
$ title_for_layout自2.5开始不推荐使用,在您的布局中使用
$this->fetch('title')
,而使用$this->assign('title', 'page title')
。
在app / View / Layouts / default.ctp中我有这个,偶然附带CakePHP并且没有被修改:
<title>
<?php echo $cakeDescription ?>:
<?php echo $this->fetch('title'); ?>
</title>
在我的视图文件中:
<?php $this->assign('title', 'My page title'); ?>
所以这应该输出&#34;我的页面标题&#34;在<title>
标签中,只是提出了默认的CakePHP标题&#34; CakePHP:快速开发的php框架&#34;
我哪里错了?
答案 0 :(得分:0)
如果这对你不起作用 - 而2.9.5是一个有趣的版本试试这个:
解析网址并拉出路径,在标题后设置此项或将您的标题设置为首选项
以下片段:
<?php
$url = $_SERVER['REQUEST_URI'];
$url_array = parse_url($url);
preg_match('@/(?<path>[^/]+)@', $url_array['path'], $m);
$url_folder = $m['path'];
$cakeDescription = 'Prospector : '.$url_folder;
?>
<!DOCTYPE html>
<html>
<head>
<?php echo $this->Html->charset(); ?>
<title>
<?php echo $cakeDescription ?>:
</title>
$ url_folder包含我假设您追求的路径,因此如果您查看的是example.com/companies/index,例如$ url_folder包含&#39;公司&#39;
所以使用上面的代码,标题将设置在Prospector:这个实例中的公司。
您当然可以根据需要进行大写等,根据您的偏好删除Prospector。
下面的整页 - 请注意这是一个干净的2.9.5安装:
<?php
$url = $_SERVER['REQUEST_URI'];
$url_array = parse_url($url);
preg_match('@/(?<path>[^/]+)@', $url_array['path'], $m);
$url_folder = $m['path'];
$cakeDescription = 'Prospector : '.$url_folder;
?>
<!DOCTYPE html>
<html>
<head>
<?php echo $this->Html->charset(); ?>
<title>
<?php echo $cakeDescription ?>:
</title>
<?php
echo $this->Html->meta('icon');
echo $this->Html->css('cake.generic');
echo $this->fetch('meta');
echo $this->fetch('css');
echo $this->fetch('script');
?>
</head>
<body>
<div id="container">
<div id="header">
<h1><?php echo $this->Html->link($cakeDescription, 'http://cakephp.org'); ?></h1>
</div>
<div id="content">
<?php echo $this->Flash->render(); ?>
<?php echo $this->fetch('content'); ?>
</div>
<div id="footer">
<?php echo $this->Html->link(
$this->Html->image('cake.power.gif', array('alt' => $cakeDescription, 'border' => '0')),
'http://www.cakephp.org/',
array('target' => '_blank', 'escape' => false, 'id' => 'cake-powered')
);
?>
<p>
</p>
</div>
</div>
<?php echo $this->element('sql_dump'); ?>
</body>
</html>
当然,如果您希望标题与模型相同,这只适合您。
如果您不想要型号名称,但可以使用型号名称进行测试,那么您可以使用$ url_folder在交换机中进行测试。
答案 1 :(得分:0)
答案是我原来的代码有效。但是默认布局文件需要进行更改...
在Layouts/default.ctp
中,你有一个干净的安装:
<title>
<?php echo $cakeDescription ?>:
<?php echo $this->fetch('title'); ?>
</title>
$cakeDescription
的字符串在视图中的标题集之前回显。默认字符串很长,因此如果您在浏览器选项卡中查看它(就像我一样),标题似乎永远不会改变!除非你查看来源。
在任何情况下,您都需要删除此变量,否则所有标题都会预先添加Cake的默认文本。因此,解决方案只是将上述内容更改为:
<title>
<?php echo $this->fetch('title'); ?>
</title>
在您的视图中,代码按照记录的方式工作:
$this->assign('title', 'Page title here');
这是Cake开发人员部分的默认设置,因为您没有理由在实际应用程序中想要标题标记中的默认文本。
答案 2 :(得分:-1)
$title = 'Title for your page';
$this->set(compact('title'));
然后在你看来
$this->assign('title',$title);