tengo una serie de códigos de atributos, que necesito para obtener los valores de:¿Hay una forma más simple de obtener el valor de interfaz de un atributo?
$attributes = array(
'Category' => 'type',
'Manufacturer' => 'brand',
'Title' => 'meta_title',
'Description' => 'description',
'Product Link' => 'url_path',
'Price' => 'price',
'Product-image link' => 'image',
'SKU' => 'sku',
'Stock' => 'qty',
'Condition' => 'condition',
'Shipping cost' => 'delivery_cost');
Después de iteración a través de una colección de productos consigo los valores frontend de los atributos de este modo:
$attributeId = Mage::getResourceModel('eav/entity_attribute')
->getIdByCode('catalog_product', $attribute_code);
$attribute = Mage::getModel('catalog/resource_eav_attribute')
->load($attributeId);
$value = $attribute->getFrontend()->getValue($product);
Simplemente usar $product->getDate($attribute)
no funcionará con listas desplegables y selecciones múltiples, simplemente devuelve su identificación y no su valor de interfaz.
Mientras que el código anterior funciona, parece ser un largo camino para obtener el valor, pero lo más importante es que funciona bastante lento. ¿Existe una manera más rápida/más sensata de obtener los valores frontend de los atributos del producto?
Editar
ahora tengo el siguiente (después de tratar con casos especiales como image
y qty
), que es un poco más fácil en los ojos y no parecen correr más rápido (aunque no sé por qué):
$inputType = $product->getResource()
->getAttribute($attribute_code)
->getFrontend()
->getInputType();
switch ($inputType) {
case 'multiselect':
case 'select':
case 'dropdown':
$value = $product->getAttributeText($attribute_code);
if (is_array($value)) {
$value = implode(', ', $value);
}
break;
default:
$value = $product->getData($attribute_code);
break;
}
$attributesRow[] = $value;
Si alguien puede mejorar esto (hacerlo más simple/más eficiente), por favor envíe una respuesta.
Tome un vistazo a este artículo http://blog.chapagain.com.np/magento-how-to-get-attribute-name-and- valor/ –
Gracias, artículo útil. – Jamie