2011-02-10 7 views
13

¡No puedo entender esto!obtener una matriz de todos los atributos de un producto en magento

Estoy tratando de obtener una lista de atributos de productos en una matriz en la página list.phtml. He intentado todo. He visto una gran cantidad de soluciones que utilizan

$attributes = $product->getAttributes(); 

pero no puedo conseguir que esto funcione, sólo aparece una página en blanco. Cualquier ayuda sería muy apreciada, he pasado horas y horas en esto hasta ahora ...

estoy usando la versión de Magento 1.4.2.0

ACTUALIZACIÓN: Aquí es exactamente lo que estoy tratando de hacer:

$neededAttributes = Mage::helper('mymodule')->getNeededAttributes(); 
$attributes = $product->getAttributes(); 
foreach ($attributes as $attribute) { 
    if(in_array($attribute->getAttributeCode(), $neededAttributes)) { 
     $attributename = $attribute->getAttributeCode(); 
    echo $attributename; 
    } 
} 

esto es en el gallery.phtml archivo en el diseño/adminhtml/default/default// catálogo de productos/ayudante/

Por alguna razón, no puedo conseguir la función getAttributeCode devolver nada.

+0

¿Ha intentado antes obtener la colección de productos? – kjy112

+1

¿Ha utilizado la depuración paso a paso con un depurador como XDebug? – greg0ire

+1

¿Está pidiendo los valores de los atributos para ese producto específico, o una lista de todos los posibles códigos de atributo? –

Respuesta

23

Supongo que necesita una lista de solo valores visibles. Digo "valores" porque los atributos no son los valores reales, son descriptores. A continuación se presenta las partes salientes de Mage_Mage_Catalog_Block_Product_View_Attributes:

$attributes = $product->getAttributes(); 
foreach ($attributes as $attribute) { 
    if ($attribute->getIsVisibleOnFront()) { 
     $value = $attribute->getFrontend()->getValue($product); 
     // do something with $value here 
    } 
} 

Usted realmente no necesita duplicar esto, sin embargo, ya que puede alterar/usar la plantilla catalog/product/view/attributes.phtml que ya está declarado en la página de vista del producto como attributes bloque.

+0

esto es genial y funciona en la interfaz, pero estoy tratando de usar esto en la galería de archivos.p html en diseño/adminhtml/default/default/catalog/product/helper/- alguna idea? Parece que no se puede obtener la variable del producto de la misma manera – Chad

+0

Publiqué exactamente lo que intento hacer en mi publicación original. Espero que puedas ayudar! – Chad

+0

Dado que en realidad no necesita los valores de un producto, ¿funciona si crea un producto en blanco con 'Mage :: getModel ('catalog/product')'? Esto puede no respetar diferentes conjuntos de atributos, no estoy seguro de cómo encontrarlo. – clockworkgeek

6

Es bastante fácil y le da una gran variedad de productos disponibles nombres de atributo

$product = Mage::getModel('catalog/product')->load('product_id'); 
$attributeNames = array_keys($product->getData()); 
print_r($attributeNames); 

Si necesita una colección de objetos de atributo que puede llamar

$product->getAttributes(); 

Si necesita una colección de productos y después de eso puede realizar las formas mencionadas anteriormente en cada miembro de la colección

Mage::getModel('catalog/product')->getCollection(); 
+0

También podría tener en cuenta que debe configurar "Utilizado en el listado de productos"> Sí en la configuración de atributo –

+0

Obtengo esta matriz [0] => Matriz ( [ID_entidad] => 12 [tipo_de_elemento_id] => 4 [attribute_set_id] => 4 [TYPE_ID] => sencilla [sku] => 20707 [has_options] => 1 [required_options] => 1 [created_at] => 01/06/2016 21:15 : 31 [updated_at] => 2016-10-03 00:49:21 ) ¿Cómo puedo obtener atributos adicionales como nombre, imagen del producto, descripción, etc. –

14

De acuerdo a su pregunta, usted debe utilizar en su lugar Mage::getResourceModel('catalog/product_attribute_collection'):

$productAttrs = Mage::getResourceModel('catalog/product_attribute_collection'); 

foreach ($productAttrs as $productAttr) { /** @var Mage_Catalog_Model_Resource_Eav_Attribute $productAttr */ 
    var_dump($productAttr->getAttributeCode()); 
} 

no siempre tienen atributos en el (getData()) de almacenamiento _data y no siempre se necesita para cargar un producto para obtener sus atributos

+1

Gist con una matriz amigable para seleccionar. https://gist.github.com/jruzafa/8776453a13717ff7b5a1 – jruzafa

+0

¡Gracias por la respuesta! –

Cuestiones relacionadas