Создал пользовательский атрибут с помощью настройки, но он появляется только для новых продуктов

magento.stackexchange https://magento.stackexchange.com/questions/11424

  •  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();
}

Будьте осторожны с этим. Этот сценарий делает один запрос для каждого продукта в коллекции, который может быть много.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top