私はMagentoから属性オプションを次のように取得しています:
_<?php
if ($attribute->usesSource()) {
$options = $attribute->getSource()->getAllOptions(false);
}
?>
_
組み込みの 'color'属性のオプションを取得しようとするまでは問題なく動作していました-次のエラーが発生しました:
_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
_
getSource()
呼び出しが失敗し、このエラーが発生したように見えます。これがなぜ起こるのか、そして私が色のオプションをどのようにして得ることができるのか誰か知っていますか?
ありがとう!
Magento属性初期化プロセスを使用する代わりに、自分で属性を初期化するように見えます。
Mage::getSingleton('eav/config')
->getAttribute($entityType, $attributeCode)
1.4.x以降、Magentoにはカタログと顧客モデルの個別の属性モデルがあり、catalog_product
のデフォルトソースモデルの定義はEAV属性モデル(Mage_Eav_Model_Entity_Attribute
)からカタログモデル(Mage_Catalog_Model_Resource_Eav_Attribute
)。
その結果、一部のカタログ属性はEAV属性モデルでは機能しません。特にMage_Eav_Model_Entity_Attribute_Source_Table
を使用しているが明示的に定義していないもの(色、製造元など)。
次のコードスニペットは、インストールで完全に機能するはずです。
$attribute = Mage::getSingleton('eav/config')
->getAttribute(Mage_Catalog_Model_Product::ENTITY, 'color');
if ($attribute->usesSource()) {
$options = $attribute->getSource()->getAllOptions(false);
}
ちなみに、Mage_Eav_Model_Config
モデルには、開発で使用できる便利なメソッドがたくさんあるので、このモデルを検討することをためらわないでください。
上記のコードは、resource_modelが空の場合は機能しません。次のスニペットは仕事をします:
$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