Получить список параметров атрибутов Magento
Я как-то хватаю параметры атрибутов 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 имеет отдельные модели атрибутов для модели каталога и клиентов, а определение исходной модели по умолчанию для 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
имеет множество полезных методов, которые могут быть использованы в вашей разработке, поэтому не стесняйтесь смотреть на эту модель.
Ответ 2
Приведенный выше код не работает, если ресурс_модель пуст. Следующий сниппет выполняет задание:
$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);
Ответ 3
$attribute = Mage::getModel('eav/config')->getAttribute('customer','cateinterest');
$options = $attribute->getSource()->getAllOptions();
Ответ 4
Извините за неполный ответ, но посмотрите на базу данных, особенно в столбце backend_model
. Кажется, я помню эту проблему, пока не установил это поле в соответствие с некоторыми системными полями в этом отношении.