2012-03-20 28 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> 

所以這是一個catalog/product_view塊有向其中加入PHTML的幾個chucnks。好的。但是,創建選項卡的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 blob生成的整個內容包可以用在嵌套在<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 2012-03-20 20:39:48

回答

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呈現:

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

這告訴我們一個標籤將只渲染分配給私人_tabs陣列有一個孩子塊與內容alias屬性值爲$_tab['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> 

這給我們呈現與自己的選項卡中顯示的選項前端標籤。

下面是我們如何真正得到了:

  1. 我們產生的childHtml塊與<action method="addTab">的標籤列表。
  2. 我們創建了一個新塊,product.info.options,其中包含我們想要的內容,並使用as="product_options"爲它賦予與addTab方法正在查找的塊相同的別名。
  3. addTab方法使用我們的新的塊和它​​的模板,而不是dummy_example.phtml模板時,它看起來與別名「product_options」塊,而實際效果是我們的塊及其options.phtml模板獲取呈現,而不是dummy_example.phtml

UPDATE。替換blockreference創建爲已有的。現在這個解決方案更可靠。

+0

好的,這是有益的,它看起來很有希望。這是什麼? '' - 該phtml文件不是我的Magento安裝的一部分。它看起來像你用來測試你的答案。那個文件裏有什麼? – 2012-03-20 22:13:17

+0

是的,這是來自我的測試環境。文件與'description.phtml'類似,但對於自定義屬性'care'。在這個例子中並不重要,因爲用這個數據創建的屬性最終會被覆蓋。只需將其替換爲description.phtml – Sergey 2012-03-20 22:17:59

+0

艾哈!好吧,它花了一些爭論,但我得到了解決方案的工作。謝謝。 – 2012-03-20 23:15:10