使用 Cake 2.x 将内容发送到布局

这篇文章基于 Robert Conner 为 CakePHP 1.x 编写的代码,我在此基础上做了一些改动,使其适用于 CakePHP 2.x,并添加了一些关于如何使用它的说明。原始文章发布在 https://bakery.cakephp.com.cn/articles/rtconner/2007/08/28 /anything_for_layout-making-html-from-the-view-available-to-the-layout 可能许多人遇到过在 CakePHP 上将一些内容发送到布局的问题。我所说的内容不仅仅是一段简单的字符串,而是一个完整的 HTML 代码片段。为了解决这个问题,我们可以根据以下步骤在 CakePHP 2.x 上创建一个助手:

1. 创建助手

在 Views/Helpers 文件夹中,你需要创建助手的 .php 文件。在本例中,我们将它命名为 LayoutHelper.php

class LayoutHelper extends AppHelper {

 var $__blockName = null;

 function blockStart($name) {
 if (empty($name)) trigger_error('LayoutHelper::blockStart - name is a required parameter');
 if (!is_null($this->__blockName))
 trigger_error('LayoutHelper::blockStart - Blocks cannot overlap');
 $this->__blockName = $name; ob_start();
 return null;
 }

 function blockEnd(&$view) {
 $buffer = @ob_get_contents();
 @ob_end_clean();
 $out = $buffer;
 $view->viewVars[$this->__blockName . '_for_layout'] = $out; $this->__blockName = null;
}

function output($var) {
 if (isset($var) && $var != null)
 echo $var;
 }
 }

2. 设置内容

为了设置要发送到布局的内容,我们使用助手

$layout = $this->Helpers->load('Layout');
$layout->blockStart('custom_content');

在此之后,我们指定要发送到布局的内容

<div>
Custom content
</div>

然后我们关闭块

$layout->blockEnd($this);

3. 显示内容

为了在布局中显示内容,我们添加以下内容

$layout = $this->Helpers->load('Layout');
$layout->output($custom_content_for_layout);

正如我们所见,这非常简单,而且在尝试根据我们加载的视图定制布局中的内容时非常有用