Wie erfolgt das Rendern von price.phtml in der Katalogproduktliste?

12

Die Vorlagendatei der Katalogproduktliste lautet list.phtml. Wobei das Rendern aller Produkte in der Kategorie mithilfe einer foreachSchleife erfolgt.

Ich bin verwirrt über die Darstellung der price.phtml. Weil es keinen Block dafür im Griff gibt<catalog_category_default>

Jetzt wird <?php echo $this->getPriceHtml($_product, true) ?>der Preis des Produkts zurückgegeben.

Wie ist diese Methode verknüpft price.phtml?

Ricky Sharma
quelle
Wenn Sie "price.phtml" in catalog.xml in base / default / your_theme suchen, ist dies der untergeordnete Block des Blocks, der list.phtml enthält.
Shathish

Antworten:

12

Produktpreisanzeige

Die Methode getPriceHtml()ist in der Blockklasse definiert Mage_Catalog_Block_Product_Abstract.

Die Methode verwendet einen Preisrenderer, der vom Produkttyp abhängt:

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

Der Preisrenderer ist ein Block mit einer zugehörigen Vorlage. Beides hängt vom Produkttyp ab.

Wenn für den angegebenen Produkttyp kein Block oder keine Vorlage definiert ist, werden standardmäßig der catalog/product_priceBlock und die catalog/product/price.phtmlVorlage verwendet.

Wo sind die Preisrenderer und Vorlagen für Produkttypen definiert?

Die Preisblöcke und Renderer werden normalerweise mithilfe von Layout-XML angegeben, sodass Module, die neue Produkttypen hinzufügen, problemlos auch ihre eigenen Renderer hinzufügen können. Beispielsweise. Das Produktpaket fügt den Preisrenderer wie folgt in die bundle.xmlLayoutdatei ein:

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

Benutzerdefinierte Preisvorlagen oder Renderer

Mit demselben Mechanismus können auch die Standardrenderer überschrieben werden. Wenn Sie nur die Vorlage ändern und den Standardpreisblocktyp beibehalten möchten, rufen Sie einfach addPriceBlockTypedie Layoutdatei mit dem Standardblock (siehe oben) und Ihrer Vorlage auf.

Rendern des Preisblocks

Der Code zum Rendern des Preisblocks sieht folgendermaßen aus:

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

Die Variablen $displayMinimalPriceund $idSuffixsind optionale Argumente für die getPriceHtmlMethode.

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

Das $idSuffixwird in der Preisvorlage verwendet, um die CSS-ID des <span>Tags zu vervollständigen, das den tatsächlichen Preis umgibt. Beispiel:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
Vinai
quelle
@ Vinai könnten Sie bitte etwas auf dieser stackoverflow.com/questions/20949796/… vorschlagen
Mukesh
Wenn ich das Super-Attribut-Pricing erhalten wollte, würde ich einfach <? Php echo $ this-> getPriceHtml ($ _ product) verwenden. ?> oder muss ich angeben, welche Art von Preisgestaltung? Abgestuft?
Elva Sandoval
Corrent. Die Methode bestimmt den Produkttyp und berechnet den Preis entsprechend.
Vinai
hi @Vinai Ich habe versucht, das zu tun, aber der Preis bleibt fest. Es ändert sich nicht, wenn ich eine Farbe wähle, die einen anderen Preis hat. Der Höchstpreis ändert sich, aber nicht der Preis, der sich in der Nähe des Warenkorbs befindet. Siehe hier jennyyootest.com/index.php/adelle.html
Elva Sandoval
Sie müssen das JavaScript anpassen, um beide Preise zu ändern.
Vinai