20

私は次のように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()呼び出しが失敗し、このエラーが発生したように見えます。なぜこれが起こるのか、そしてどうすればカラーオプションを出すことができるのか誰かが知っていますか?

ありがとう!

4

5 に答える 5

66

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モデルには開発に使用できる便利なメソッドがたくさんあるので、このモデルを調べることを躊躇しないでください。

于 2010-11-09T23:44:29.087 に答える
7

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);
于 2013-04-17T00:31:14.767 に答える
5
$attribute = Mage::getModel('eav/config')->getAttribute('customer','cateinterest');
$options = $attribute->getSource()->getAllOptions();
于 2012-06-19T12:19:52.310 に答える
2
<?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
于 2019-03-14T11:21:51.303 に答える
-1

不完全な回答で申し訳ありませんが、データベース、特にbackend_model列を見てください。この点でいくつかのシステムフィールドと一致するようにこのフィールドを設定するまで、これと同じ問題が発生したことを覚えているようです。

于 2010-10-22T12:39:05.557 に答える