2013-01-25 28 views
1

我希望我的产品属于属性集X使用不同的模板,而不必在所有产品中逐个设置布局更新。根据属性集合更新产品布局

我创建的布局文件这个新的句柄:

<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> 

然后我延长相关助手(Mage_Catalog_Helper_Product_View)与以适应这一点:

if ($product->getAttributeSetId()==X) $update->addHandle('product_view_bis'); 

这应该更换目录/产品/ view.phtml用我自己的文件调用一些自定义块

它根本不起作用。但如果我把这个:

<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> 

在产品后台定制布局更新它的工作原理。

谁能帮助我?

回答

1

我设法得到它通过观测工作

我设置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); 
} 

} 
相关问题