Como está ocorrendo a renderização de price.phtml na página de listagem de produtos do catálogo?

12

O arquivo de modelo da página de listagem de produtos do catálogo é list.phtml. Onde a renderização de todos os produtos da categoria acontece usando foreachloop.

Estou confuso sobre a prestação do price.phtml. Porque não há nenhum bloco para ele no identificador<catalog_category_default>

Agora, <?php echo $this->getPriceHtml($_product, true) ?>retorna o preço do produto.

Como esse método está vinculado price.phtml?

Ricky Sharma
fonte
procure "price.phtml" em catalog.xml em base / default / your_theme, será o bloco filho do bloco que contém list.phtml.
Shathish,

Respostas:

12

Exibição do preço do produto

O método getPriceHtml()é definido na classe de bloco Mage_Catalog_Block_Product_Abstract.

O método usa um representante de preço que depende do tipo de produto:

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

O representante de preço é um bloco com um modelo associado. Ambos dependem do tipo de produto.

Se não houver nenhum bloco ou modelo definido para o tipo de produto especificado, o padrão será o catalog/product_pricebloco e o catalog/product/price.phtmlmodelo.

Onde estão definidos os representantes e modelos de preços para os tipos de produtos?

Os blocos de preços e renderizadores geralmente são especificados usando XML de layout, portanto, os módulos que adicionam novos tipos de produtos também podem facilmente adicionar seus próprios renderizadores. Por exemplo. o produto incluído adiciona seu representante de preços da seguinte forma no bundle.xmlarquivo de 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>

Modelos ou representantes de preços personalizados

Usando o mesmo mecanismo, também é possível substituir os renderizadores padrão. Se você quiser apenas alterar o modelo e manter o tipo de bloco de preço padrão, basta chamar addPriceBlockTypeo arquivo de layout com o bloco padrão (veja acima) e seu modelo.

Renderizando o bloco de preços

O código para renderizar o bloco de preços se parece com o seguinte:

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

As variáveis $displayMinimalPricee $idSuffixsão argumentos opcionais para o getPriceHtmlmétodo.

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

O $idSuffixé usado no modelo de preço para concluir o ID CSS da <span>tag em torno do preço real, por exemplo:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
Vinai
fonte
@Vinai você poderia sugerir algo sobre este stackoverflow.com/questions/20949796/...
Mukesh
Se eu quisesse obter o preço do super atributo, usaria <? Php echo $ this-> getPriceHtml ($ _ product); ?> ou preciso especificar que tipo de preço? Em camadas?
Elva Sandoval
Corrente. O método determinará o tipo de produto e renderizará o preço de acordo.
Vinai
oi @Vinai Tentei fazer isso, mas o preço permanece fixo. Não muda quando seleciono uma cor com preço diferente. O preço superior muda, mas não o preço abaixo, adicionado ao carrinho. Veja aqui jennyyootest.com/index.php/adelle.html
Elva Sandoval
Você precisa ajustar o JavaScript para alterar os dois preços.
Vinai