Passing variables to a child html block in Magento

Did you know you can pass variables via setData() to blocks in exactly the same way you do with other objects.

You have a template block which you are including on multiple parts of your Magento site and you want to use it on your new pages.. The catch? It’s expecting a variable to be in scope.

For example you may have something like this

// loop through all products
foreach ($this->getProductCollection as $_product) {
	// display this products thumbnail image
	echo $this->getChildHtml("products.thumbnail");
} // end for

It doesn’t seem sensible to just change the template file to reload (lets say) a Product Model which you already have instantiated the parent block.

What you can do however is use the setData method on the block object to pass your product instance.

$this->getChild("products.thumbnail")->setData("product", $_product);
echo $this->getChildHtml("products.thumbnail");    

Inside your template file you could do something similar to

// get the product 
$_product = $this->getProduct();


Buy Me A Coffee
back arrowBack to Index