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_price
bloque y la catalog/product/price.phtml
plantilla 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.xml
archivo 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 addPriceBlockType
al 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 $displayMinimalPrice
y $idSuffix
son argumentos opcionales del getPriceHtml
método.
public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')
Se $idSuffix
utiliza 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() ?>">