通过设置创建一个自定义属性,但仅在新产品中出现
-
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和“事件进行调试:
$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();
}
要小心。该脚本对收藏集中的每个产品都有一个查询,可能很多。