Maybe I'm going about this the wrong way, but I'm quite new to Magento and I don't know any better. I'm trying to add a block to my front page, which I believe is cms_index_index (is that correct?). This works:
<cms_index_index>
<reference name="content">
<block type="core/template" name="start_recs" as="start_recs" template="path/to/recommendations.phtml"></block>
</reference>
</cms_index_index>
But in my recommendations.phtml, I want to reference another block, addtocart_special.phtml. I did that in other catalog blocks and it worked fine, but somehow I cannot make this work in cms_index_index. What I tried is this:
<cms_index_index>
<reference name="content">
<block type="core/template" name="start_recs" as="start_recs" template="path/to/recommendations.phtml">
<action method="setBlockId"><block_id>start-recs</block_id></action>
<block type="core/template" name="addtocart_special" as="addtocart_special" template="catalog/product/view/addtocart_special.phtml">
</block>
</block>
</reference>
</cms_index_index>
And in my recommendations.phtml, I call the addtocart_special like this:
$this->getChild('addtocart_special')->setData('product', $_product);
echo $this->getChildHtml('addtocart_special', false);
But this results in the following error:
Fatal error: Call to a member function setData() on a non-object in /home/www/project/path/to/recommendations.phtml on line 125
I just don't get why. Why is getChild('addtocart_special') a non-object? What am I missing?