从Magento获取属性选项列表

2022-08-30 20:13:50

我一直在从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()

谢谢!


答案 1

看起来您自己初始化属性,而不是使用Magento属性初始化过程:

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

因为从 1.4.x 开始,Magento 为目录和客户模型提供了单独的属性模型,并且现在默认源模型的定义已从 EAV 属性模型 () 移动到目录模型 ()。catalog_productMage_Eav_Model_Entity_AttributeMage_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


答案 2

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

推荐