Obtener el valor del atributo desplegable cuando se usa addAttributeToSelect
-
11-12-2019 - |
Pregunta
Al cargar una colección, ¿cómo puedo obtener el texto del valor del atributo (y no solo el número de opción) cuando es un atributo desplegable?
Ejemplo:
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color'); // color is a dropdown attribute
Al utilizar este código, se muestran los ID de opción para color
como:123, 117, etc.y no los valores de texto (como:rojo, verde, etc.)
Por lo general, iteramos a través de cada producto y obtenemos el texto del atributo, pero dado que esto se usa en el Catálogo->Administrar productos página Estoy buscando una solución alternativa.
Solución
Supongo que primero estás usando Mage_Catalog_Model_Resource_Product_Collection
y no simplemente el recurso como se indica en su pregunta.
Ahora también asumo que estás recorriendo los resultados de tu colección.
foreach($collection as $product) {}
Una vez que tenga el objeto del producto, puede llamar a la función. getAttributeText
y especifique el código de atributo.Esto cargará el atributo, obtendrá la fuente y luego el texto de la opción según los datos del atributo asignados al producto.
public function getAttributeText($attributeCode)
{
return $this->getResource()
->getAttribute($attributeCode)
->getSource()
->getOptionText($this->getData($attributeCode));
}
Entonces, si está recorriendo su colección, simplemente debe llamar:
foreach ($collection as $product) {
$color_value = $product->getAttributeText('color');
}
Otros consejos
Intente agregar "_Value" después del nombre del atributo como este:
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color_value'); // color is a dropdown attribute
Si está utilizando tablas planas para productos, puede buscar en la tabla de la base de datos CATALOG_PRODUCT_FLAT_1 para ver los atributos disponibles, creo.
¿Necesitas ordenar por valores?De lo contrario, puede seleccionar todas las opciones de atributos como $colors
hash con una consulta (!) y luego mostrarlas como $colors[$product->getColor()]
Probablemente sea más rápido que seleccionar cada valor en el bucle o realizar uniones adicionales, pero no funciona para ordenar colecciones :(