Como obter uma lista de todos os atributos

23

Como posso buscar uma lista (matriz) de todos os atributos de produtos definidos? (basicamente eu preciso do código e etiqueta).

editar :

Os atributos necessários para gerar dinamicamente ACLs para todos os atributos do produto que existem na loja. (trabalhando em um módulo para Ocultar atributos e outros campos no back-end de edição do produto )

Alex
fonte
Ignorando conjuntos de atributos?
benmarks
@benmarks: Sim.
1028 Alex

Respostas:

37

Se você precisar de uma consulta MySQL, tente o seguinte:

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')

Uma alternativa ao código Fabian, se você precisar de um script PHP baseado em Magento, tente o seguinte:

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

foreach ($attributes as $attribute){
    echo $attribute->getAttributecode();
    echo '<br>';
    echo $attribute->getFrontendLabel();
}
Sylvain Rayé
fonte
Agradável. Mage_Catalog_Model_Resource_Product_Attribute_Collectionfaz basicamente o que Fabian estava tentando criar. Obrigado!
Alex
de nada :-)
Sylvain Rayé
como obtenho uma lista de atributos usando uma identificação de grupo? não atribui conjuntos
Attila Naghi
5

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

deveria fazer.

Acabamos de encontrar um bug, você deve passar o entity_type_id:

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

FAZ

O código é a documentação:

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 solução (atualizado por @Alex comentário)

Você precisa passar um Mage_Eav_Model_Entity_Typepara que isso funcione e não seja codificado:

$type = Mage::getModel('eav/entity_type')->loadByCode(Mage_Catalog_Model_Product::ENTITY)
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($type);
Fabian Blechschmidt
fonte
A coleção retorna uma contagem de 0 ... Lembro que havia algum tipo de API ou classe de serviço para isso, mas não consigo encontrá-lo em ATM.
1028 Alex
Ótimo - mas o 4 é codificado (mesmo que não mude muito). Corrigi-lo para um upvote :-)
Alex
E não, a primeira linha não funciona. Mage_Catalog_Model_Product :: entidade é uma string, não um Mage_Eav_Model_Entity_Type
Alex
Eu acho que entendi agora: D
Fabian Blechschmidt
Mas então eu estou atrasado. Farei, quando passar no 2k rep: p
Fabian Blechschmidt
2

Isso é para obter todos os 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
fonte
Não quero usar SQL simples ...
Alex