¿Cómo se realiza la representación de price.phtml en la página de listado de productos del catálogo?

12

El archivo de plantilla de la página de listado de productos de catálogo es list.phtml. Donde la representación de todos los productos en la categoría ocurre usando el foreachbucle.

Estoy confundido acerca de la representación de la price.phtml. Porque no hay bloque en el mango<catalog_category_default>

Ahora, <?php echo $this->getPriceHtml($_product, true) ?>devuelve el precio del producto.

¿Cómo se vincula este método price.phtml?

Ricky Sharma
fuente
busque "price.phtml" en catalog.xml en base / default / your_theme, será el bloque secundario del bloque que contiene list.phtml.
Shathish

Respuestas:

12

Exhibición del precio del producto

El método getPriceHtml()se define en la clase de bloque Mage_Catalog_Block_Product_Abstract.

El método utiliza un procesador de precios que depende del tipo de producto:

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

El procesador de precios es un bloque con una plantilla asociada. Ambos dependen del tipo de producto.

Si no hay un bloque o plantilla definida para el tipo de producto especificado, el catalog/product_pricebloque y la catalog/product/price.phtmlplantilla están predeterminados .

¿Dónde se definen los procesadores de precios y las plantillas para los tipos de productos?

Los bloques de precios y los renderizadores generalmente se especifican utilizando XML de diseño, por lo que los módulos que agregan nuevos tipos de productos también pueden agregar fácilmente sus propios renderizadores. Por ejemplo. el producto incluido agrega su procesador de precios de la siguiente manera en el bundle.xmlarchivo de diseño:

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

Plantillas de precios o renderizadores personalizados

Usando el mismo mecanismo también es posible anular los renderizadores predeterminados. Si solo desea cambiar la plantilla y mantener el tipo de bloque de precio predeterminado, simplemente llame addPriceBlockTypeal archivo de diseño con el bloque predeterminado (ver arriba) y su plantilla.

Renderizar el bloque de precios

El código para representar realmente el bloque de precios se ve así:

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

Las variables $displayMinimalPricey $idSuffixson argumentos opcionales del getPriceHtmlmétodo.

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

Se $idSuffixutiliza en la plantilla de precio para completar la identificación CSS de la <span>etiqueta que rodea el precio real, por ejemplo:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
Vinaí
fuente
@Vinai, ¿podría sugerirme algo en este stackoverflow.com/questions/20949796/…
Mukesh
Si quisiera obtener el precio de súper atributo, simplemente usaría <? Php echo $ this-> getPriceHtml ($ _ product); ?> o necesito especificar qué tipo de precios? Escalonado?
Elva Sandoval
Corrent El método determinará el tipo de producto y representará el precio en consecuencia.
Vinai
hola @Vinai Traté de hacer eso, pero el precio se mantiene fijo. No cambia cuando selecciono un color que tiene un precio diferente. El precio más alto cambia, pero no el que está abajo cerca de agregar al carrito. Ver aquí jennyyootest.com/index.php/adelle.html
Elva Sandoval
Tienes que ajustar el JavaScript para cambiar ambos precios.
Vinai