0

カスタム製品タイプ (ホテル) を作成しました。バックエンドにカスタム オプション タブがあります。

特定の製品 (ホテル) にいくつかのカスタム オプションを追加しました。カスタム オプションを出力するために、カスタム テーマの view.phtml に html を追加しました。

<?php if ($this->hasOptions()):?> <?php echo $this->getChildHtml('container1','', true, true) ?> <?php endif;?> 

また、レイアウトにブロックを追加しました。

            <block type="core/template_facade" name="product.info.container1" as="container1">
                <action method="setDataByKey"><key>alias_in_layout</key><value>container1</value></action>
                <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
                <action method="append"><block>product.info.options.wrapper</block></action>
                <action method="append"><block>product.info.options.wrapper.bottom</block></action>
            </block>
            <block type="core/template_facade" name="product.info.container2" as="container2">
                <action method="setDataByKey"><key>alias_in_layout</key><value>container2</value></action>
                <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
                <action method="append"><block>product.info.options.wrapper</block></action>
                <action method="append"><block>product.info.options.wrapper.bottom</block></action>
            </block>

<action method="unsetCallChild"><child>container1</child><call>ifEquals</call><if>0</if>   <key>alias_in_layout</key><key>options_container</key></action>
<action method="unsetCallChild"><child>container2</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action> 

しかし、<?php echo $this->getChildHtml('container1','', true, true) ?>空に戻ります。

オプション ブロックを表示するにはどうすればよいですか?

4

1 に答える 1

1

この問題を解決し、カスタム オプションをレンダリングする関数をヘルパーに作成しました。コードは以下のとおりです。

  public function getHotelCustomOptionsHtml(Mage_Catalog_Model_Product $product)
{

    $blockOption = Mage::app()->getLayout()->createBlock("Mage_Catalog_Block_Product_View_Options");
    $blockOption->addOptionRenderer("default","catalog/product_view_options_type_default","catalog/product/view/options/type/default.phtml");
    $blockOption->addOptionRenderer("text","catalog/product_view_options_type_text","inchoo_catalog/product/view/options/type/text.phtml");
    $blockOption->addOptionRenderer("file","catalog/product_view_options_type_file","catalog/product/view/options/type/file.phtml");
      $blockOption->addOptionRenderer("select","catalog/product_view_options_type_select","catalog/product/view/options/type/select.phtml");

    $blockOption->addOptionRenderer("date","catalog/product_view_options_type_date","catalog/product/view/options/type/date.phtml") ;
    $blockOptionsHtml = null;
     if($product->getTypeId() =="hotel")
     {
        $blockOption->setProduct($product);
        if($product->getOptions())
        {
            foreach ($product->getOptions() as $o)
            {
                $blockOptionsHtml .= $blockOption->getOptionHtml($o);
            };
        }
     }

     return $blockOptionsHtml;
}
于 2012-12-15T03:15:20.987 に答える