Come avviene il rendering di price.phtml nella pagina di elenco dei prodotti del catalogo?


12

Il file modello della pagina di elenco dei prodotti del catalogo è list.phtml. Dove il rendering di tutti i prodotti della categoria avviene usando foreachloop.

Sono confuso riguardo al rendering di price.phtml. Perché non c'è nessun blocco per esso nell'handle<catalog_category_default>

Ora <?php echo $this->getPriceHtml($_product, true) ?>restituisce il prezzo del prodotto.

Come è collegato questo metodo price.phtml?


cerca "price.phtml" in catalog.xml in base / default / your_theme, sarà il blocco figlio del blocco contenente list.phtml.
Shathish,

Risposte:


12

Visualizzazione del prezzo del prodotto

Il metodo getPriceHtml()è definito nella classe di blocco Mage_Catalog_Block_Product_Abstract.

Il metodo utilizza un renderizzatore di prezzi che dipende dal tipo di prodotto:

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

Il renderer dei prezzi è un blocco con un modello associato. Entrambi dipendono dal tipo di prodotto.

Se non è stato definito alcun blocco o modello per il tipo di prodotto specificato, per impostazione predefinita è il catalog/product_priceblocco e il catalog/product/price.phtmlmodello.

Dove sono definiti i renderer dei prezzi e i modelli per i tipi di prodotto?

I blocchi di prezzo e i renderer di solito sono specificati usando XML di layout, quindi i moduli che aggiungono nuovi tipi di prodotti possono facilmente aggiungere anche i propri renderer. Per esempio. il prodotto in bundle aggiunge il suo renderer di prezzi come segue nel bundle.xmlfile di layout:

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

Modelli di prezzo personalizzati o renderer

Utilizzando lo stesso meccanismo è anche possibile sovrascrivere i renderer predefiniti. Se vuoi semplicemente cambiare il modello e mantenere il tipo di blocco di prezzi predefinito, chiama semplicemente addPriceBlockTypeil file di layout con il blocco predefinito (vedi sopra) e il tuo modello.

Rendering del blocco dei prezzi

Il codice per il rendering effettivo del blocco di prezzo è simile al seguente:

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

Le variabili $displayMinimalPricee $idSuffixsono argomenti opzionali per il getPriceHtmlmetodo.

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

La $idSuffixè utilizzata nel modello di prezzo per completare l'id CSS del <span>tag che circonda il prezzo effettivo, per esempio:

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

@Vinai potresti suggerire qualcosa su questo stackoverflow.com/questions/20949796/…
Mukesh

Se volessi ottenere il prezzo del super attributo userei solo <? Php echo $ this-> getPriceHtml ($ _ product); ?> o devo specificare quale tipo di prezzo? Stanco?
Elva Sandoval,

Corrent. Il metodo determinerà il tipo di prodotto e renderà il prezzo di conseguenza.
Vinai,

ciao @Vinai ho provato a farlo, ma il prezzo rimane fisso. Non cambia quando seleziono un colore che ha un prezzo diverso. Il prezzo più alto cambia, ma non quello in basso vicino aggiungi al carrello. Vedi qui jennyyootest.com/index.php/adelle.html
Elva Sandoval

Devi modificare JavaScript per modificare entrambi i prezzi.
Vinai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.