Comment obtenir une liste de tous les attributs

23

Comment puis-je récupérer une liste (tableau) de tous les attributs de produit définis? (fondamentalement, j'ai besoin du code et de l'étiquette).

modifier :

Les attributs dont j'ai besoin pour générer dynamiquement des ACL pour tous les attributs de produit qui existent dans la boutique. (travail sur un module pour masquer les attributs et autres champs dans le backend d'édition de produit )

Alex
la source
Ignorer les jeux d'attributs?
benmarks
@benmarks: Oui.
Alex

Réponses:

37

Si vous avez besoin d'une requête MySQL, essayez ceci:

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

Une alternative au code Fabian, si vous avez besoin d'un script PHP basé sur Magento, essayez ceci:

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

foreach ($attributes as $attribute){
    echo $attribute->getAttributecode();
    echo '<br>';
    echo $attribute->getFrontendLabel();
}
Sylvain Rayé
la source
Agréable. Mage_Catalog_Model_Resource_Product_Attribute_Collectionfait essentiellement ce que Fabian essayait de fabriquer. Merci!
Alex
vous êtes les bienvenus :-)
Sylvain Rayé
comment obtenir une liste d'attributs en utilisant un identifiant de groupe? pas d'attributs définis
Attila Naghi
5

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

devrait faire.

Nous venons de trouver un bug, vous devez passer le entity_type_id:

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

EST-CE QUE

Le code est la documentation:

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

espérons que la solution fonctionne (mise à jour par le commentaire @Alex)

Vous devez passer un Mage_Eav_Model_Entity_Typedonc cela devrait fonctionner et n'est pas codé en dur:

$type = Mage::getModel('eav/entity_type')->loadByCode(Mage_Catalog_Model_Product::ENTITY)
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($type);
Fabian Blechschmidt
la source
La collection renvoie un compte de 0 ... Je me souviens qu'il y avait une sorte d'API ou de classe de service pour cela, mais je ne le trouve pas ATM.
Alex
Génial - mais 4 est codé en dur (même pas trop susceptible de changer). Corrigez-le pour un vote positif :-)
Alex
Et non, la première ligne ne fonctionne pas. Mage_Catalog_Model_Product :: ENTITY est une chaîne, pas un Mage_Eav_Model_Entity_Type
Alex
Je pense que je l'ai maintenant: D
Fabian Blechschmidt
Mais alors je suis en retard. Je ferai, quand je passerai le 2k rep: p
Fabian Blechschmidt
2

C'est pour obtenir tous les attributs

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
la source
Je ne veux pas utiliser du SQL simple ...
Alex