如何从Magento获取属性选项列表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我一直在从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)移到目录1(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模型有很多有用的方法,可以用在你的开发中,所以不要犹豫,看看这个模型。

用户回答回答于

如果资源_模型是空的。下面的代码片段执行此任务:

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

扫码关注云+社区