Як відбувається рендеринг price.phtml на сторінці списку продуктів каталогу?


12

Каталог файлів шаблонів сторінки списку продуктів - Каталог list.phtml. Якщо візуалізація всіх продуктів у категорії відбувається за допомогою foreachциклу.

Я розгублений з приводу передачі price.phtml. Тому що немає блоку для цього в ручці<catalog_category_default>

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

Як цей метод пов'язаний price.phtml?


шукайте "price.phtml" у catalog.xml в базі / за замовчуванням / вашій_темі, це буде дочірнім блоком до блоку, що містить list.phtml.
Шатіш

Відповіді:


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/…
Mukesh

Якби я хотів отримати суперціночні ціни, я б просто використав <? Php echo $ this-> getPriceHtml ($ _ продукт); ?> чи мені потрібно вказати, який тип ціноутворення? Багатоярусна?
Elva Sandoval

Коррент. Метод визначає тип товару і відповідно надає ціну.
Вінай

привіт @Vinai Я спробував це зробити, але ціна залишається фіксованою. Це не змінюється, коли я вибираю колір, який відрізняється ціною. Найвища ціна все-таки змінюється, але не та, яка знизу внизу, поряд із додаванням у кошик. Дивіться тут jennyyootest.com/index.php/adelle.html
Elva Sandoval

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