Cómo obtener una lista de todos los atributos

23

¿Cómo puedo obtener una lista (matriz) de todos los atributos definidos del producto? (Básicamente necesito el código y la etiqueta).

editar :

Los atributos que necesito para generar dinámicamente ACL para todos los atributos de productos que existen en la tienda. (trabajando en un módulo para Ocultar atributos y otros campos en el Producto Editar Backend )

Alex
fuente
¿Ignorando los conjuntos de atributos?
Benmarks
@benmarks: sí.
Alex

Respuestas:

37

Si necesita una consulta MySQL, intente eso:

select attribute_id, attribute_code, frontend_label from eav_attribute where entity_type_id IN (select entity_type_id from eav_entity_type where entity_type_code = 'catalog_product')

Una alternativa al código Fabian, si necesita un script PHP basado en Magento, intente esto:

$attributes = Mage::getResourceModel('catalog/product_attribute_collection')
    ->getItems();

foreach ($attributes as $attribute){
    echo $attribute->getAttributecode();
    echo '<br>';
    echo $attribute->getFrontendLabel();
}
Sylvain Rayé
fuente
Agradable. Mage_Catalog_Model_Resource_Product_Attribute_Collectionhace básicamente lo que Fabian intentaba elaborar. ¡Gracias!
Alex
de nada :-)
Sylvain Rayé
¿Cómo obtengo una lista de atributos usando una identificación de grupo? no conjuntos de atributos
Attila Naghi
5

//Mage_Eav_Model_Mysql4_Entity_Attribute_Collection
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter(Mage_Catalog_Model_Product::ENTITY);

debería hacer.

Acabamos de encontrar un error, debe pasar el entity_type_id:

$col = Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter(4);

HACE

El código es la documentación:

if ($type instanceof Mage_Eav_Model_Entity_Type) {
        $additionalTable = $type->getAdditionalAttributeTable();
        $id = $type->getId();
    } else {
        $additionalTable = $this->getResource()->getAdditionalAttributeTable($type);
        $id = $type;
    }

espero que funcione (actualizado por el comentario de @Alex)

Tienes que pasar un Mage_Eav_Model_Entity_Typepor lo que esto debería funcionar y no está codificado:

$type = Mage::getModel('eav/entity_type')->loadByCode(Mage_Catalog_Model_Product::ENTITY)
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($type);
Fabian Blechschmidt
fuente
La colección devuelve un recuento de 0 ... Recuerdo que hubo algún tipo de API o clase de servicio para esto, pero no puedo encontrarlo en ATM.
Alex
Genial, pero 4 está codificado (incluso no es tan probable que cambie). Arreglarlo para un voto positivo :-)
Alex
Y no, la primera línea no funciona. Mage_Catalog_Model_Product :: ENTITY es una cadena, no un Mage_Eav_Model_Entity_Type
Alex
Creo que lo tengo ahora: D
Fabian Blechschmidt
Pero entonces llego tarde. Lo haré, cuando pase el representante de 2k: p
Fabian Blechschmidt
2

Esto es para obtener todos los atributos

SELECT
    eav_attribute_option_value.option_id,
    eav_attribute_option_value.`value`,
    eav_attribute_option.attribute_id
                FROM
                        eav_attribute_option_value
                INNER JOIN eav_attribute_option ON eav_attribute_option_value.option_id = eav_attribute_option.option_id
                WHERE
                        eav_attribute_option.attribute_id = 135
                OR eav_attribute_option.attribute_id = 142 
                -- 135 = BRANDS
                -- 142 = TYPES
                GROUP BY
                        eav_attribute_option_value.option_id
                ORDER BY
                eav_attribute_option_value.`value` ASC
Umair
fuente
No quiero usar SQL simple ...
Alex