Mostrar atributos en el listado de productos
Por defecto Magento no carga todos los atributos de un producto cuando estamos mostrando el listado de productos de una categoría. Esto se hace para evitar tener que cargar una cantidad exagerada de atributos cuando tan sólo es necesario lo básico: nombre, imagen, precio… el resto de atributos se mostrarán en la ficha de cada producto.
Sin embargo es muy sencillo mostrar atributos, que no se cargan por defecto, en el listado de productos de nuestras categorías. Gracias a la potencia y escalabilidad de Magento podemos realizar esto sin tener que tocar el código del núcleo.
Lo primero que tendremos que tener es nuestro atributo creado y correctamente clasificado (y con datos) en la ficha de nuestro producto. Para añadir un atributo lo haremos desde el menú de Catálogo y en Gestionar atributos. Después asignaremos el atributo creado a un grupo de datos (los bloques que aparecen a la izquierda en la edición de una ficha de producto) desde Gestionar bloques de atributos.
Una vez realizado los pasos necesarios en la administración, vamos a editar el fichero XML correspondiente dentro de la carpeta ‘layout’ de nuestra plantilla para Magento.
Abriremos el XML correspondiente a la sección en la que necesitamos mostrar el atributo, en nuestro caso como vamos a mostrar el atributo en el listado de categorías abrimos el fichero: catalog.xml y añadimos los atributos que queremos modificar, bajo <catalog_category_default>.
<layout>
<!-- ... -->
<catalog_category_default>
<!-- ... -->
<block type="catalog/product_list" name="product_list">
<!-- MODIFICACIÓN -->
<action method="addAttribute"><attribute>NombreAtributo</attribute></action>
<!-- FIN MODIFICACIÓN -->
</block>
<!-- ... -->
</catalog_category_default>
<!-- ... -->
</layout>
Donde ‘NombreAtributo‘ corresponde con el identificador del atributo a mostrar. Realizaremos lo mismo bajo el padre <catalog_category_layered>.
Y ahora ya solo nos queda añadir el código necesario en nuestra plantilla para que el atributo se muestre.
Abrimos el fichero: app/design/frontend/<tienda>/<plantilla_web>/template/catalog/product/list.phtml
Y no tenemos más que añadir el siguiente código allí donde queramos que aparezca el valor del atributo.
Para mostrar un valor:
<?php echo $_product->getNombreAtributo()?>
O
<?php echo $_product->detData('NombreAtributo'); ?>
Para mostrar un desplegable:
<?php echo $_product->getAttributeText('NombreAtributo')?>
Para un campo booleano:
<?php echo str_replace(1,"Yes",str_replace(0,"No",$_product->getNombreAtributo()))?>
Como hemos dicho, esto no es necesario en la ficha del producto, puesto que todos los atributos se cargan automáticamente.