Я создал пользовательские атрибуты для категории в скрипте установки моего модуля следующим образом:
$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();
Я вижу значение abcd в интерфейсе администратора Magneto. Но когда я вызываю код ниже:
<?php
$category = Mage::getModel('catalog/category')->loadByAttribute('custom_field', 'abcd');
print_r($category);
?>
Я не получил результата. Но если я загружаюByAttribute, используя поле 'name', установленное в 'Test Category', я действительно получаю результат.
Итак, в базе данных я просмотрел таблицу catalog_category_entity_varchar
и заметил, что в атрибуте «name» есть запись для обоих store_id = 0 И store_id = 1, тогда как в атрибуте «custom_field» есть только запись для store_id = 1.
Когда я добавил запись store_id = 0 для 'custom_field' со значением, установленным в 'abcd' в таблице catalog_category_entity_varchar
, loadByAttribute получил ожидаемый результат.
Мой вопрос: почему поле 'name' получает запись store_id = 0 в catalog_category_entity_varchar
, а мое настраиваемое поле - нет?
Как загрузить категории по пользовательским атрибутам?