2011-01-20 24 views
4

我正在寻找一种方法在一个特定位置使用备用template/catalog/product/price.phml,并继续使用现有的price.phtml文件其他地点。要进一步解释,我需要显示正常价格,然后显示正下方的另一个特殊价格 - 但仅限于产品页面(显示的主要产品)。这个特殊的价格不是可以通过目录价格规则计算出来的价格,所以我编写了自己的模块来进行计算。因此,无论我在哪里显示价格,我都想用常规ol'template/catalog/product/price.phtml文件显示价格......但对于产品页面(主要产品 - 不是相关的,加售等),我想使用我自己定制的template/catalog/product/price-custom.phtml模板文件。任何人都可以帮忙吗?Magento - 使用替代的“price.phtml”(除了现有的)

正常情况下,我只是寻找布局XML文件(例如catalog.xml)来找到这些类型的东西,但price.phtml有点特别 - 它并不那么简单。而对于我的生活,我无法弄清楚是否有一种简单的方法在被查看的页面上有条件地交换它。我知道我只需更新price.phtml就可以打印出额外的价格,然后使用css来隐藏价格,但如果可能的话,我宁愿不这样做。

(你可能也想知道,我只有简单的产品。)

回答

1

或者在你的PHP代码块。

见这里的例子:

Mage_Catalog_Block_Product_Abstract

protected $_priceBlockDefaultTemplate = 'catalog/product/price.phtml'; 
protected $_tierPriceDefaultTemplate = 'catalog/product/view/tierprices.phtml'; 
+0

我采纳了你的建议,并将它与clockworkgeek的建议结合起来。下面是我所做的一个概述:我创建了一个扩展Mage_Catalog_Block_Product_Abstract的类,并覆盖了$ _priceBlockDefaultTemplate变量和我自己的模板文件的路径。然后在local.xml布局文件中,我做了一个<参考名称=“product.info”> for shaune 2011-02-03 23:04:04

5

这可以在布局XML文件来完成:

<layout> 
    <PRODUCT_TYPE_simple> 
     <reference name="product.clone_prices"> 
      <action method="setTemplate"> 
       <template>catalog/product/price-custom.phtml</template> 
      </action> 
     </reference> 
    </PRODUCT_TYPE_simple> 
</layout> 
+0

您的建议有帮助,因为它使我走上了正确的道路。我最终这样做了 ,其中mymodule/simple是一个类,我创建了扩展Mage_Catalog_Block_Product_Abstract。谢谢您的帮助。 – shaune 2011-02-03 23:09:47

+0

”与删除了,它就像魅力!谢谢 – anshuman 2012-06-29 09:57:28

5

创建local.xml文件,把它放在app/frontend/default/YOURTEMPLATE/layout

local.xml文件,添加:

<?xml version="1.0" encoding="UTF-8"?> 
<layout> 
    <!-- Override price template on product view page -->    
    <PRODUCT_TYPE_simple> 
     <reference name="product.info.simple"> 
      <action method="setTemplate"> 
       <template>catalog/product/price_product_page.phtml</template> 
      </action> 
     </reference> 
    </PRODUCT_TYPE_simple> 
    <!-- /Override price template on product view page -->    
</layout> 

创建一个副本catalog/product/price.phtml,并把它放在YOURTEMPLATE/templates/product/product_price_page.phtml

这将覆盖price.phtml模板,并与product_price_page.phtml

0

的正确方法更换,以实现它:

<PRODUCT_TYPE_simple> 
    <reference name="product.info.simple"> 
     <action method="addPriceBlockType"><type>simple</type><block>catalog/product_price</block><template>catalog/product/price-product-page.phtml</template></action> 
    </reference> 
</PRODUCT_TYPE_simple> 

<PRODUCT_TYPE_configurable> 
    <reference name="product.info.configurable"> 
     <action method="addPriceBlockType"><type>configurable</type><block>catalog/product_price</block><template>catalog/product/price-product-page.phtml</template></action> 
    </reference> 
</PRODUCT_TYPE_configurable> 

...

1

我最近有一个类似的要求,其中产品页面的不同价格模板是首选解决方案。

价格块似乎是一个特例的Magento的东西(在RWD主题至少),它在的catalog.xml作为一个简单的块类型和名称的已定义的<default/>手柄内:

<block type="catalog/product_price_template" name="catalog_product_price_template" /> 

如果你看看一些核心布局文件如何设置价格模板,你会发现这样的例子(从捆绑。XML):

<reference name="catalog_product_price_template"> 
    <action method="addPriceBlockType"> 
     <type>bundle</type> 
     <block>bundle/catalog_product_price</block> 
     <template>bundle/catalog/product/price.phtml</template> 
    </action> 
</reference> 

他们称一个名为addPriceBlockType方法,你可以在找到Mage_Catalog_Block_Product_Abstract

在此基础上和一个小实验后,我发现了以下解决方案为我:

<catalog_product_view> 
    <reference name="product.info"> 
     <action method="addPriceBlockType"> 
      <type>simple</type> 
      <block>catalog/product_price</block> 
      <template>catalog/product/price_product_page.phtml</template> 
     </action> 
     <action method="addPriceBlockType"> 
      <type>configurable</type> 
      <block>catalog/product_price</block> 
      <template>catalog/product/price_product_page.phtml</template> 
     </action> 
     <!-- Set for each product type as necessary e.g. bundled, virtual etc... --> 
    </reference> 
</catalog_product_view> 
相关问题