您好,我有下一个设置代码:

$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和“事件进行调试:

$product = $observer->getEvent()->getProduct();
Zend_Debug::dump($product->debug());die;

问题是,如果我尝试保存已经存在的产品,它将获得事件,并且我的调试不会带来我的属性shipping_city。在新产品中,它出现在我的调试中,但仅在de save_fter事件中,在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归因
scroll top