web-dev-qa-db-fra.com

Obtenez une liste des options d'attribut de Magento

J'ai récupéré les options d'attribut de Magento comme ceci:

<?php

if ($attribute->usesSource()) {
    $options = $attribute->getSource()->getAllOptions(false);
}

?>

Cela a bien fonctionné jusqu'à ce que j'essaie d'obtenir les options pour l'attribut 'couleur' ​​intégré - j'ai eu l'erreur suivante:

PHP Fatal error:  Call to a member function setAttribute() on a non-object in app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php on line 374

Il semblerait que l'appel getSource() échoue et provoque cette erreur. Quelqu'un sait-il pourquoi cela se produit et comment puis-je obtenir des options de couleur?

Merci!

20
Chris Forrette

Il semble que vous initialisiez l'attribut vous-même, au lieu d'utiliser le processus d'initialisation d'attribut Magento:

Mage::getSingleton('eav/config')
    ->getAttribute($entityType, $attributeCode)

Parce que depuis 1.4.x, Magento a des modèles d'attributs séparés pour le modèle de catalogue et de clients et la définition du modèle source par défaut pour catalog_product est maintenant déplacé du modèle d'attribut EAV (Mage_Eav_Model_Entity_Attribute) à celui du catalogue (Mage_Catalog_Model_Resource_Eav_Attribute).

Par conséquent, certains attributs de catalogue ne fonctionneront pas avec le modèle d'attribut EAV. En particulier ceux qui utilisent Mage_Eav_Model_Entity_Attribute_Source_Table mais ne le définissez pas explicitement (couleur, fabricant, etc.).

L'extrait de code suivant devrait fonctionner parfaitement sur votre installation:

$attribute = Mage::getSingleton('eav/config')
    ->getAttribute(Mage_Catalog_Model_Product::ENTITY, 'color');

if ($attribute->usesSource()) {
    $options = $attribute->getSource()->getAllOptions(false);
}

Au fait Mage_Eav_Model_Config Le modèle possède de nombreuses méthodes utiles qui peuvent être utilisées dans votre développement, alors n'hésitez pas à vous pencher sur ce modèle.

62
Ivan Chepurnyi

Le code ci-dessus ne fonctionne pas si le modèle_ressource est vide. L'extrait suivant fait le travail:

$attribute = Mage::getModel('eav/entity_attribute')->loadByCode(Mage_Catalog_Model_Product::ENTITY, 'YOUR_ATTRIBUTE_CODE');

/** @var $attribute Mage_Eav_Model_Entity_Attribute */
$valuesCollection = Mage::getResourceModel('eav/entity_attribute_option_collection')
->setAttributeFilter($attribute->getId())
->setStoreFilter(0, false);
7
Tuong Le
$attribute = Mage::getModel('eav/config')->getAttribute('customer','cateinterest');
$options = $attribute->getSource()->getAllOptions();
5
amit vyas
<?php
  //Possible color value
  $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'color'); //"color" is the attribute_code
  $allOptions = $attribute->getSource()->getAllOptions(true, true);
  foreach ($allOptions as $instance) {
    $id = $instance['value']; //id of the option
    $value = $instance['label']; //Label of the option
1
Mohammed Muzammil