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 )


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();
}

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

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

Je ne veux pas utiliser du SQL simple ...
Alex
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.