使用 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);
正如我们所见,这非常简单,而且在尝试根据我们加载的视图定制布局中的内容时非常有用