Jak przebiega renderowanie price.phtml na stronie z listą produktów w katalogu?

12

Plik szablonu strony katalogu z wykazem produktów to list.phtml. Gdzie renderowanie wszystkich produktów w kategorii odbywa się za pomocą foreachpętli.

Jestem zdezorientowany co do renderowania pliku price.phtml. Ponieważ nie ma dla niego żadnego bloku<catalog_category_default>

Teraz <?php echo $this->getPriceHtml($_product, true) ?>zwraca cenę produktu.

W jaki sposób ta metoda jest powiązana price.phtml?

Ricky Sharma
źródło
wyszukaj „price.phtml” w catalog.xml w base / default / your_theme, będzie to blok potomny bloku zawierającego list.phtml.
Shathish

Odpowiedzi:

12

Wyświetlanie ceny produktu

Metoda getPriceHtml()jest zdefiniowana w klasie bloku Mage_Catalog_Block_Product_Abstract.

Metoda wykorzystuje mechanizm renderujący ceny, który zależy od typu produktu:

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

Mechanizm renderujący ceny to blok z powiązanym szablonem. Oba zależą od rodzaju produktu.

Jeśli dla określonego typu produktu nie zdefiniowano bloku ani szablonu, domyślnie jest to catalog/product_priceblok i catalog/product/price.phtmlszablon.

Gdzie są zdefiniowane rendery i szablony cen dla typów produktów?

Bloki cenowe i renderery są zwykle określane przy użyciu układu XML, więc moduły, które dodają nowe typy produktów, mogą łatwo dodawać własne renderery. Na przykład. dołączony produkt dodaje swój renderer ceny w następujący sposób w bundle.xmlpliku układu:

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

Niestandardowe szablony cen lub renderery

Za pomocą tego samego mechanizmu można również zastąpić domyślne renderery. Jeśli chcesz tylko zmienić szablon i zachować domyślny typ bloku cenowego, po prostu wywołaj addPriceBlockTypeplik układu z domyślnym blokiem (patrz wyżej) i szablonem.

Renderowanie bloku cenowego

Kod do renderowania bloku cen wygląda następująco:

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

$displayMinimalPriceI $idSuffixzmienne są opcjonalne argumenty do getPriceHtmlmetody.

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

Jest $idSuffixon używany w szablonie ceny do uzupełnienia identyfikatora CSS <span>tagu otaczającego rzeczywistą cenę, na przykład:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
Vinai
źródło
@Vinai, czy możesz coś zasugerować na stackoverflow.com/questions/20949796/…
Mukesh
Gdybym chciał uzyskać wycenę super atrybutów, po prostu użyłbym <? Php echo $ this-> getPriceHtml ($ _ product); ?> czy muszę określić, jaki rodzaj wyceny? Wielowarstwowy?
Elva Sandoval,
Corrent. Metoda określi rodzaj produktu i odpowiednio wyrenderuje cenę.
Vinai,
Cześć @ Vinai Próbowałem to zrobić, ale cena pozostaje stała. Nie zmienia się, gdy wybieram inny kolor. Najwyższa cena się zmienia, ale nie ta poniżej w pobliżu obok dodaj do koszyka. Zobacz tutaj jennyyootest.com/index.php/adelle.html
Elva Sandoval
Musisz zmienić JavaScript, aby zmienić obie ceny.
Vinai,