This post is based on Robert Conner's code forCakePHP 1.x., and I made some changes to get it to work onCakePHP 2.x . The original post can be found here.
Maybe some people have faced problems trying to send some content to the layout on CakePHP. By content I mean not only a simple string but a whole a piece of HTML code. To solve this, we can create a Helper on CakePHP 2.x, according to the following steps:
1. Create the Helper
On theViews/Helpers folder, you need to create the .php file for the helper. In this case we will call it 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. Setting up the content
For setting up the content that we want to send to the layout, we use the Helper
$layout = $this->Helpers->load('Layout');
$layout->blockStart('custom_content');
Right after this, we specify the content that will be sent to the layout
<div>Custom content</div>
and we close the block
$layout->blockEnd($this);
3. Show the content
For showing the content on the layout, we add the following
$layout = $this->Helpers->load('Layout');
$layout->output($custom_content_for_layout);
As we can see, this is really simple and also very useful when trying to customize the content on the layout according to the view we are loading
I wrote this article also on The Bakery
CodeProject