2012-03-20 4 views
3

Magentoのインストールで製品ページを変更しようとしています。現在のテーマでは、ページの主要部分に製品オプションが表示されます。私はそれらをより多くの情報タブに表示させようとしています。問題は、製品オプションがXMLの構造ブロックによって作成され、別の位置に移動するだけではなく、「翻訳」する必要があるということです。ここでMagentoで異なるタイプのブロックをネストする

は、XMLの製品のオプションのチャンクです:

<block type="catalog/product_view" name="product.info.options.wrapper" as="product_options_wrapper" template="catalog/product/view/options/wrapper.phtml" translate="label"> 
    <label>Info Column Options Wrapper</label> 
    <block type="core/template" name="options_js" template="catalog/product/view/options/js.phtml"/> 
    <block type="catalog/product_view_options" name="product.info.options" as="product_options" template="catalog/product/view/options.phtml"> 
     <action method="addOptionRenderer"><type>text</type><block>catalog/product_view_options_type_text</block><template>catalog/product/view/options/type/text.phtml</template></action> 
     <action method="addOptionRenderer"><type>file</type><block>catalog/product_view_options_type_file</block><template>catalog/product/view/options/type/file.phtml</template></action> 
     <action method="addOptionRenderer"><type>select</type><block>catalog/product_view_options_type_select</block><template>catalog/product/view/options/type/select.phtml</template></action> 
     <action method="addOptionRenderer"><type>date</type><block>catalog/product_view_options_type_date</block><template>catalog/product/view/options/type/date.phtml</template></action> 
    </block> 
</block> 

だからPHTMLのいくつかのchucnksが付加されたがcatalog/product_viewブロックがあります。はい。しかし、タブを作成するXMLは、何か別のものを求めています。ここではサンプルです:

<block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml"> 
    <action method="addTab" translate="title" module="catalog"> 
     <alias>options</alias> 
     <title>Options</title> 
     <block>catalog/product_view</block> 
     <template>catalog/product/view/options/wrapper.phtml</template> 
    </action> 
</block> 

ここでの主なブロックよりもブロックの異なるタイプが明確に存在し<block>foo/bar_baz</block>ビットが。そこにどのように構造ブロックを挿入できますか?最初に引用されたXMLブロブによって生成されたコンテンツの全体バンドルが、<action method="addTab">の中にネストされた<block>タグで使用できるようにしようとしています。

ボーナスポイント

<block>のためのこれら二つの異なる使用例実際の名前は何ですか、どのような<block>タグのとその属性内容の違いは、どこでこの美しい緑に地球はこれのいずれかの文書化されていますか?


ここでは、セルゲイの答えに基づいて私のために働いてしまったXMLのブロックがあります。

<block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" > 
    <action method="addTab" translate="title" module="catalog"> 
     <alias>product_options_wrapper</alias> 
     <title>Options</title> 
     <block>catalog/product_view_description</block> 
     <template>catalog/product/view/options/wrapper.phtml</template> 
    </action> 
    <!-- Inserting an extra block that will generate the content of the Options tab. --> 
    <block type="catalog/product_view" name="product.info.options.wrapper" as="product_options_wrapper" template="catalog/product/view/options/wrapper.phtml"> 
     <block type="catalog/product_view_options" name="product.info.options" as="product_options" template="catalog/product/view/options.phtml"> 
      <action method="addOptionRenderer"><type>text</type><block>catalog/product_view_options_type_text</block><template>catalog/product/view/options/type/text.phtml</template></action> 
      <action method="addOptionRenderer"><type>file</type><block>catalog/product_view_options_type_file</block><template>catalog/product/view/options/type/file.phtml</template></action> 
      <action method="addOptionRenderer"><type>select</type><block>catalog/product_view_options_type_select</block><template>catalog/product/view/options/type/select.phtml</template></action> 
      <action method="addOptionRenderer"><type>date</type><block>catalog/product_view_options_type_date</block><template>catalog/product/view/options/type/date.phtml</template></action> 
     </block> 
    </block> 
</block> 
+0

ボーナスの質問は正確にできますか?私はあなたに詳細を教えてもらえると思いますが、あなたの質問を完全に理解することはできません。 – Sergey

答えて

2

興味深い質問:私はMage_Catalog_Block_Product_View_Tabsクラスを見て、addTab機能を調べる:

function addTab($alias, $title, $block, $template) { 
     if (!$title || !$block || !$template) { 
      return false; 
     } 

     $this->_tabs[] = array(
     'alias' => $alias, 
     'title' => $title 
     ); 

     $this->setChild($alias, 
      $this->getLayout()->createBlock($block, $alias)->setTemplate($template) 
     ); 
} 

ですから、引数として渡されたすべての要素がプライベート_tabs配列に追加してもされていることがわかります現在のブロックの子として追加されました。この関数は他のパラメータを受け入れないため、不便です。

これは、すべてのタブがcatalog/product/view/tabs.phtmlでレンダリングされる方法です:タブがはと子ブロックを持つ民間_tabsのアレイに割り当てられている場合にのみコンテンツをレンダリングすることを教えてくれる

<?php foreach ($this->getTabs() as $_index => $_tab): ?> 
    <?php if($this->getChildHtml($_tab['alias'])): ?> 

$_tab['alias']の値に一致するaliasプロパティ。しかし、私たちができることは、タブを追加し、同じ名前と上書きのブロックを定義する標準のMagentoメソッドで、必要なブロックコンテンツを置き換えることです。

はここにあなたのコードに基づいて作業例です:これは私たち自身のタブに表示されるオプションでフロントエンドにレンダリングタブを与える

<block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" > 
    <action method="addTab" translate="title" module="catalog"> 
     <alias>description</alias> 
     <title>description</title> 
     <block>catalog/product_view_description</block> 
     <template>catalog/product/view/description.phtml</template> 
    </action> 
    <action method="addTab" translate="title" module="catalog"> 
     <alias>product_options</alias> 
     <title>test</title> 
     <block>catalog/product_view_description</block> 
     <template>catalog/product/view/dummy_example.phtml</template> 
    </action> 
    <reference name="product_options"> 
     <action method="addOptionRenderer"><type>text</type><block>catalog/product_view_options_type_text</block><template>catalog/product/view/options/type/text.phtml</template></action> 
     <action method="addOptionRenderer"><type>file</type><block>catalog/product_view_options_type_file</block><template>catalog/product/view/options/type/file.phtml</template></action> 
     <action method="addOptionRenderer"><type>select</type><block>catalog/product_view_options_type_select</block><template>catalog/product/view/options/type/select.phtml</template></action> 
     <action method="addOptionRenderer"><type>date</type><block>catalog/product_view_options_type_date</block><template>catalog/product/view/options/type/date.phtml</template></action> 
    </reference> 
</block> 

。私たちは、<action method="addTab">タグとchildHtmlブロックのリストを生成し

  1. :ここ

    は、私たちが実際にすることを得た方法です。

  2. 新しいブロックproduct.info.optionsを必要なコンテンツで作成し、as="product_options"を使用して、addTabメソッドが探しているブロックと同じ別名を付けました。それは別名「product_options」とのブロックを探し、正味の効果は、私たちのブロックとそのoptions.phtmlテンプレートではなくdummy_example.phtmlのレンダリングされることをあるとき
  3. addTab方法は、私たちの新しいブロックし、代わりにdummy_example.phtmlテンプレートのそのテンプレートを使用しています。

更新番号blockを既存のものにreferenceで置き換えました。今、このソリューションはより信頼性が高くなります。

+0

これは参考になり有望です。これは何ですか? '' - phtmlファイルはMagentoインストールの一部ではありません。あなたの答えをテストするために使っていたもののように見えます。そのファイルには何が入っていますか? –

+0

はい、それは私のテスト環境からのものです。ファイルは 'description.phtml'に似ていますが、カスタム属性' care'に対してです。この例では、このデータで作成された原因属性はあまり重要ではないので、最後に上書きされます。 description.phtmlで置き換えてください – Sergey

+0

ああ!さて、それはいくつかの論争を取ったが、私はその解決策を働かせた。ありがとうございました。 –

関連する問題