Reputation: 2384
I want my product belonging to attribute sets X use a different template without setting the layout update in all product one by one.
I created this new handle in the layout file :
<product_view_bis>
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/view7.phtml</template></action>
<block type="core/template" name="replacements" template="catalog/product/replacements.phtml">
<block type="replacements/replacement" name="replacement_options" template="catalog/product/replacement_options.phtml">
<action method="addOptionRenderer"><type>select</type><block>replacements/options</block><template>catalog/product/view/options/type/replacement.phtml</template></action>
</block>
</block>
</reference>
</product_view_bis>
Then I extend the Related Helper (Mage_Catalog_Helper_Product_View) to fit this with :
if ($product->getAttributeSetId()==X) $update->addHandle('product_view_bis');
This should replace the catalog/product/view.phtml with my own file which call some custom blocks
It doesn't work at all. But If I put this :
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/view7.phtml</template></action>
<block type="core/template" name="replacements" template="catalog/product/replacements.phtml">
<block type="replacements/replacement" name="replacement_options" template="catalog/product/replacement_options.phtml">
<action method="addOptionRenderer"><type>select</type><block>replacements/options</block><template>catalog/product/view/options/type/replacement.phtml</template></action>
</block>
</block>
</reference>
Into the product Custom Layout Update in the backend it works.
Can anyone help me ?
Upvotes: 1
Views: 325
Reputation: 2384
I managed to get it working through Observer
I set an event observer on controller_action_layout_generate_blocks_after
public function generateBlocksAfter($event)
{
$controller = $event->getAction();
//limit to the product view page
if($controller->getFullActionName() != 'catalog_product_view')
{
return;
}
$layout = $controller->getLayout();
$root = $layout->getBlock('root');
$product_info = $layout->getBlock('product.info');
if(!$product_info)
{
Mage::log('Could not find product.info block');
return;
}
$id = Mage::registry('current_product')->getId();
$prod = Mage::getModel('catalog/product')->load($id);
if ($prod->getAttributeSetId()==X) {
$product_info->setTemplate('catalog/product/view7.phtml');
$root->setTemplate('page/view7.phtml');
$replacement = $layout->createBlock('core/template')->setBlockAlias('replacements')->setTemplate('catalog/product/replacements.phtml')->setLayout($layout)->setNameInLayout('replacements');
$options = $layout->createBlock('replacements/replacement')->setBlockAlias('replacement_options')->setTemplate('catalog/product/replacement_options.phtml')->setLayout($layout)->setNameInLayout('replacement_options');
$options->addOptionRenderer('select','replacements/options','catalog/product/view/options/type/replacement.phtml');
$product_info->setChild('replacements',$replacement);
$replacement->setChild('replacement_options',$options);
}
}
Upvotes: 1