Magento - 使用替代的“price.phtml”(除了现有的)

时间:2011-01-20 14:32:01

标签: magento

我正在寻找一种方法,在一个特定位置使用替代template/catalog/product/price.phml,并继续在所有其他位置使用现有的price.phtml文件。

为了进一步说明,我需要显示常规价格,然后是它下方的另一个特价 - 但仅限于产品页面(显示的主要产品)。这个特殊价格不是可以通过目录价格规则计算的价格,因此我编写了自己的模块来进行计算。所以,在我显示价格的任何地方,我想用常规的'template/catalog/product/price.phtml文件显示...但是对于产品页面(主要产品 - 不是相关的,加售等)我想用我自己的自定义template/catalog/product/price-custom.phtml模板文件。有人可以帮忙吗?

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

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

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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

答案 2 :(得分:1)

或者在你的php块中。

参见此处的示例:

Mage_Catalog_Block_Product_Abstract

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

答案 3 :(得分:1)

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

价格块似乎是Magento中的一个特例(至少在RWD主题中),它在 catalog.xml 中定义为{{1}中的块类型和名称句柄:

<default/>

如果你看看一些核心布局文件如何设置价格模板,你会发现这样的例子(来自bundle.xml):

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

他们调用名为<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> 的方法,您可以在 Mage_Catalog_Block_Product_Abstract

中找到该方法

基于此,经过一些实验,我发现以下解决方案对我有用:

addPriceBlockType

答案 4 :(得分: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>

...