Получить список параметров атрибутов от Magento - PullRequest
20 голосов
/ 22 октября 2010

Я получаю параметры атрибутов из 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() не выполнен и вызывает эту ошибку.Кто-нибудь знает, почему это происходит и как я могу получить варианты цвета?

Спасибо!

Ответы [ 5 ]

61 голосов
/ 10 ноября 2010

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

7 голосов
/ 17 апреля 2013

Приведенный выше код не работает, если 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);
5 голосов
/ 19 июня 2012
$attribute = Mage::getModel('eav/config')->getAttribute('customer','cateinterest');
$options = $attribute->getSource()->getAllOptions();
0 голосов
/ 14 марта 2019
<?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
0 голосов
/ 22 октября 2010

Извините за неполный ответ, но взгляните на базу данных, особенно в столбце backend_model. Кажется, я помню эту проблему, пока я не установил это поле в соответствии с некоторыми системными полями в этом отношении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...