Получить список параметров атрибутов 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. Кажется, я помню эту проблему, пока не установил это поле в соответствие с некоторыми системными полями в этом отношении.