Создал пользовательский атрибут с помощью настройки, но он появляется только для новых продуктов
-
16-10-2019 - |
Вопрос
Привет, у меня есть следующий код настройки:
$installer = new Mage_Catalog_Model_Resource_Setup('core_setup');
$installer->addAttribute('catalog_product', 'shipping_city', array(
'group' => 'General',
'type' => Varien_Db_Ddl_Table::TYPE_VARCHAR,
'backend' => '',
'frontend' => '',
'label' => 'Envio p/ Cidade',
'input' => 'text',
'class' => '',
'source' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'visible' => false,
'required' => false,
'user_defined' => true,
'default' => '',
'searchable' => true,
'filterable' => true,
'comparable' => false,
'visible_on_front' => true,
'unique' => false,
'apply_to' => 'simple,configurable,virtual',
'is_configurable' => false ));
$installer->endSetup();
Затем я отлаживаю продукты с de »и" Event:
$product = $observer->getEvent()->getProduct();
Zend_Debug::dump($product->debug());die;
Проблема в том, что если я попытаюсь сохранить уже существующий продукт, он получает событие, и моя отладка не приносит мою атрибут Shipping_City. В новом продукте он появляется в моем отладке, но только в событии de save_after, в save_before не появляется ...
Есть мысли, ребята?
Решение
Если вы добавите новый атрибут, и он был добавлен в набор атрибутов, в котором вы хотите его, все прошло хорошо с $installer->addAttribute
.
Проблема в том, что из -за EAV нет значения для вашего нового атрибута. Это означает запрос и фильтрацию этим, означает фильтрацию NULL и, если вы звоните $product->getNewAttribute()
Вы просто получаете NULL
.
Но это поведение верно и предназначено.
Вы можете исправить это, написав небольшой сценарий и установив значение по умолчанию на всех продуктах, например, это:
$collection = Mage::getResourceModel('catalog/product_collection')->filterByWhateverYouWant();
foreach($collection as $product) {
$product->setNewAttribute('myCoolValue')->save();
}
Будьте осторожны с этим. Этот сценарий делает один запрос для каждого продукта в коллекции, который может быть много.