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!
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.
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);
$attribute = Mage::getModel('eav/config')->getAttribute('customer','cateinterest');
$options = $attribute->getSource()->getAllOptions();
<?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