次のように、モジュールのインストール スクリプトでカテゴリのカスタム属性を作成しました。
$attrib = array(
'type' => 'varchar',
'group' => 'My Data',
'backend' => '',
'frontend' => '',
'label' => 'My Custom Field',
'input' => 'text',
'class' => '',
'source' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
'visible' => true,
'required' => false,
'user_defined' => false,
'default' => '',
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => false,
'unique' => true,
);
$installer->addAttribute(3, 'custom_field', $attrib);
フィールドは管理者に問題なく表示され、スクリプトでカテゴリを次のように作成すると、次のようになります。
$p_category = Mage::getModel('catalog/category')
->setStoreId(0)
->load(2);
$category = Mage::getModel('catalog/category');
$category->setStoreId(0)
->setName('Test Category')
->setCustomField('abcd')
->setDisplayMode('PRODUCTS')
->setAttributeSetId($category->getDefaultAttributeSetId())
->setIsActive(1)
->setIsAnchor(1)
->setPath(implode('/',$p_category->getPathIds()))
->setInitialSetupFlag(true)
->save();
Magneto の管理インターフェイスで値「abcd」を確認できます。しかし、以下のコードを呼び出すと:
<?php
$category = Mage::getModel('catalog/category')->loadByAttribute('custom_field', 'abcd');
print_r($category);
?>
結果が出ません。しかし、'Test Category' に設定された 'name' フィールドを使用して loadByAttribute を実行すると、結果が得られます。
そのため、データベースでテーブルを調べcatalog_category_entity_varchar
たところ、'name' 属性には store_id = 0 と store_id = 1 の両方のエントリがあるのに対し、'custom_field' 属性には store_id = 1 のエントリしかないことがわかりました。
テーブルで値が「abcd」に設定された「custom_field」の store_id = 0 エントリを追加するとcatalog_category_entity_varchar
、loadByAttribute は期待どおりの結果を取得しました。
私の質問は、'name' フィールドが store_id = 0 エントリを取得しcatalog_category_entity_varchar
、カスタム フィールドが取得されないのはなぜですか?
カスタム属性でカテゴリを読み込むにはどうすればよいですか?