Magento - используйте альтернативный "price.phtml" (в дополнение к существующему) - PullRequest
4 голосов
/ 20 января 2011

Я ищу способ использования альтернативного template/catalog/product/price.phml в одном конкретном месте и продолжения использования существующего файла price.phtml во всех других местах.

Чтобы объяснить более подробно, мне нужно отобразить обычную цену, а затем другую специальную цену прямо под ней - но только на странице продукта (для основного отображаемого продукта). Эта специальная цена не является ценой, которая может быть рассчитана по правилам цены каталога, поэтому я написал свой собственный модуль для расчета. Таким образом, везде, где я показываю цены, я хочу отобразить с помощью обычного файла ol 'template/catalog/product/price.phtml ... но для страницы продукта (основной продукт - не связанный, продажи и т. Д.) Я хочу использовать свой собственный template/catalog/product/price-custom.phtml файл шаблона. Кто-нибудь может помочь?

Обычно я просто просматриваю XML-файлы макета (например, catalog.xml), чтобы найти эти типы вещей, но price.phtml - это нечто особенное - это не так просто. И что касается меня, я не могу понять, есть ли простой способ условно поменять его на просматриваемой странице. Я знаю, что могу просто обновить price.phtml, чтобы всегда распечатывать эту дополнительную цену, а затем использовать css, чтобы скрыть цену везде, но я бы не стал этого делать, если это возможно.

(Также вы можете знать, что у меня есть только простые продукты.)

Ответы [ 5 ]

5 голосов
/ 11 ноября 2011

Создайте файл 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

5 голосов
/ 20 января 2011

Это можно сделать в 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 голос
/ 30 июля 2015

Недавно у меня было похожее требование, когда предпочтительным решением было другое ценовое предложение для страницы продукта.

Ценовой блок, кажется, является чем-то особенным в Magento (по крайней мере, в теме RWD), он определен в catalog.xml как просто тип блока и имя в дескрипторе <default/> :

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

Если вы посмотрите, как некоторые основные файлы макета устанавливают шаблон цены, вы найдете примеры, подобные этому (из bundle.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>
1 голос
/ 20 января 2011

Или в вашем php блоке.

Смотрите пример здесь:

Mage_Catalog_Block_Product_Abstract

protected $_priceBlockDefaultTemplate = 'catalog/product/price.phtml';
protected $_tierPriceDefaultTemplate  = 'catalog/product/view/tierprices.phtml';
0 голосов
/ 31 марта 2014

Правильный способ достижения этого:

<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>

...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...