Comment le rendu de price.phtml dans la page de liste des produits du catalogue se produit-il?

12

Le fichier modèle de la page de liste des produits de catalogue est list.phtml. Où le rendu de tous les produits de la catégorie se produit en utilisant la foreachboucle.

Je suis confus quant au rendu du price.phtml. Parce qu'il n'y a pas de bloc pour cela dans la poignée<catalog_category_default>

Maintenant, <?php echo $this->getPriceHtml($_product, true) ?>retourne le prix du produit.

Comment cette méthode est-elle liée price.phtml?

Ricky Sharma
la source
recherchez "price.phtml" dans catalog.xml dans base / default / your_theme, ce sera le bloc enfant du bloc contenant list.phtml.
Shathish

Réponses:

12

Affichage du prix du produit

La méthode getPriceHtml()est définie dans la classe de bloc Mage_Catalog_Block_Product_Abstract.

La méthode utilise un rendu de prix qui dépend du type de produit:

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

Le rendu des prix est un bloc avec un modèle associé. Les deux dépendent du type de produit.

Si aucun bloc ou modèle n'est défini pour le type de produit spécifié, il s'agit par défaut du catalog/product_pricebloc et du catalog/product/price.phtmlmodèle.

Où sont définis les rendus de prix et les modèles pour les types de produits?

Les blocs de prix et les moteurs de rendu sont généralement spécifiés à l'aide de la disposition XML, de sorte que les modules qui ajoutent de nouveaux types de produits peuvent également facilement ajouter leurs propres moteurs de rendu. Par exemple. le produit fourni ajoute son rendu de prix comme suit dans le bundle.xmlfichier de mise en page:

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

Modèles de prix ou rendus personnalisés

En utilisant le même mécanisme, il est également possible de remplacer les rendus par défaut. Si vous souhaitez simplement modifier le modèle et conserver le type de bloc de prix par défaut, appelez simplement addPriceBlockTypele fichier de mise en page avec le bloc par défaut (voir ci-dessus) et votre modèle.

Rendre le bloc de prix

Le code pour rendre réellement le bloc de prix ressemble à ceci:

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

Les variables $displayMinimalPriceet $idSuffixsont des arguments facultatifs de la getPriceHtmlméthode.

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

Le $idSuffixest utilisé dans le modèle de prix pour compléter l'ID CSS de la <span>balise entourant le prix réel, par exemple:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
Vinai
la source
@Vinai pourriez-vous s'il vous plaît suggérer quelque chose sur ce stackoverflow.com/questions/20949796/…
Mukesh
Si je voulais obtenir le prix du super attribut, utiliserais-je simplement <? Php echo $ this-> getPriceHtml ($ _ product); ?> ou dois-je préciser quel type de tarification? À plusieurs niveaux?
Elva Sandoval
Corrent. La méthode déterminera le type de produit et rendra le prix en conséquence.
Vinai
salut @ Vinai J'ai essayé de faire ça, mais le prix reste fixe. Cela ne change pas lorsque je sélectionne une couleur dont le prix est différent. Le prix supérieur change, mais pas celui ci-dessous près de ajouter au panier. Voir ici jennyyootest.com/index.php/adelle.html
Elva Sandoval
Vous devez ajuster le JavaScript pour modifier les deux prix.
Vinai