Как происходит рендеринг price.phtml на странице со списком товаров в каталоге?


12

Файл шаблона страницы каталога товаров list.phtml. Где рендеринг всех продуктов в категории происходит с помощью foreachцикла.

Я запутался по поводу рендеринга price.phtml. Потому что в ручке нет блока<catalog_category_default>

Теперь <?php echo $this->getPriceHtml($_product, true) ?>возвращается цена товара.

Как этот метод связан с price.phtml?


поиск "price.phtml" в catalog.xml в base / default / your_theme, это будет дочерний блок для блока, содержащего list.phtml.
Shathish

Ответы:


12

Отображение цены продукта

Метод getPriceHtml()определен в классе блоков Mage_Catalog_Block_Product_Abstract.

В методе используется средство визуализации цен, которое зависит от типа продукта:

$type_id = $product->getTypeId(); // e.g. simple, configurable, bundle, grouped, ...
$this->_preparePriceRenderer($type_id)

Рендерер цены - это блок со связанным шаблоном. Оба зависят от типа продукта.

Если для указанного типа продукта не определен ни блок, ни шаблон, по умолчанию используется catalog/product_priceблок и catalog/product/price.phtmlшаблон.

Где определяются средства визуализации цен и шаблоны для типов продуктов?

Ценовые блоки и средства визуализации обычно указываются с использованием макета XML, поэтому модули, которые добавляют новые типы продуктов, также могут легко добавлять свои собственные средства визуализации. Например. связанный продукт добавляет средство визуализации цены следующим образом в bundle.xmlфайле макета:

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

Пользовательские шаблоны цен или рендеры

Используя тот же механизм, можно также переопределить рендеры по умолчанию. Если вы хотите просто изменить шаблон и сохранить тип ценового блока по умолчанию, просто вызовите addPriceBlockTypeфайл макета с блоком по умолчанию (см. Выше) и вашим шаблоном.

Рендеринг ценового блока

Код для визуализации блока цены выглядит следующим образом:

$this->_preparePriceRenderer($type_id)
    ->setProduct($product)
    ->setDisplayMinimalPrice($displayMinimalPrice)
    ->setIdSuffix($idSuffix)
    ->toHtml();

$displayMinimalPriceИ $idSuffixпеременные являются дополнительными аргументами для getPriceHtmlметода.

public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')

$idSuffixИспользуются в шаблоне цен , чтобы завершить CSS идентификатор <span>тега окружающего фактическую цену, например:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">

@Vinai, не могли бы вы предложить что-нибудь на этом stackoverflow.com/questions/20949796/…
Мукеш

Если бы я хотел получить оценку супер атрибутов, я бы просто использовал <? Php echo $ this-> getPriceHtml ($ _ product); ?> или мне нужно уточнить какой тип ценообразования? Многоуровневое?
Эльва Сандовал

Corrent. Метод будет определять тип продукта и соответственно отображать цену.
Vinai

Привет @ Vinai Я пытался сделать это, но цена остается фиксированной. Он не меняется, когда я выбираю цвет, который отличается от цены. Верхняя цена меняется, но не та, что ниже, рядом, добавьте в корзину. Смотрите здесь jennyyootest.com/index.php/adelle.html
Эльва Сандовал

Вы должны настроить JavaScript, чтобы изменить обе цены.
Vinai
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.