1

属性セット X に属する製品で、すべての製品でレイアウトの更新を 1 つずつ設定せずに別のテンプレートを使用したい。

レイアウト ファイルにこの新しいハンドルを作成しました。

<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');

これにより、catalog/product/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>

バックエンドの製品 Custom Layout Update で動作します。

誰でも私を助けることができますか?

4

1 に答える 1

1

Observerを介してなんとか動作させることができました

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);
}

}
于 2013-01-25T08:46:43.670 に答える