CakePHP 2.9.5 $ this-> assign(' title')无法正常工作,如文档中所述

时间:2017-01-30 11:38:48

标签: php cakephp

在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;

我哪里错了?

3 个答案:

答案 0 :(得分:0)

如果这对你不起作用 - 而2.9.5是一个有趣的版本试试这个:

/ Viewouts / default.ctp

中的

解析网址并拉出路径,在标题后设置此项或将您的标题设置为首选项

以下片段:

<?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);