我创建了观察者,以便在产品保存
时在表格中插入产品属性<adminhtml>
<events>
<catalog_product_save_after>
<observers>
<Test_price_save_product_data>
<type>singleton</type>
<class>Magetest_test_Model_Observer</class>
<method>saveProductAttr</method>
</Test_price_save_product_data>
</observers>
</catalog_product_save_after>
</events>
</adminhtml>
saveProductAttr()当产品保存在管理员端时,此产品属性在单独的表中插入。
现在我有单独的脚本来保存超过7000种产品,如下所示
set_time_limit(0);
ini_set('memory_limit','1024M');
ini_set('display_errors', 1);
error_reporting(1);
require_once 'app/Mage.php';
Mage::setIsDeveloperMode(true);
umask(0);
Mage::app('admin');
Mage::register('isSecureArea', 1);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$products = Mage::getModel('catalog/product')->getCollection()->addFieldToFilter("type_id",Mage_Catalog_Model_Product_Type::TYPE_SIMPLE);
foreach($products->getData() as $val){
$product = Mage::getModel('catalog/product')->loadByAttribute('sku',$val['sku']);
if ($product)
{
$product->setData('status',1);
$product->save();
}
}
当我运行脚本时,它会逐个保存产品,但它不会触发'catalog_product_save_after' observer.since我需要使用此观察者在另一个表中分别插入7000个产品属性。< / p>
我在这方面做错了什么?请建议。
答案 0 :(得分:0)
Observer未触发,因为Magento从未加载应用程序的<frontend />
区域。至于解决方案,我们可以尝试将您的观察者移动到<global />
区域。运行命令行脚本时,只会触发<global />
个事件。
<global>
<events>
<catalog_product_save_after>
<observers>
<Test_price_save_product_data>
<type>singleton</type>
<class>Magetest_test_Model_Observer</class>
<method>saveProductAttr</method>
</Test_price_save_product_data>
</observers>
</catalog_product_save_after>
</events>
</global>
答案 1 :(得分:0)
这可能是因为产品未被修改。在Mage / Core / Model / Abstract.php文件函数&#34; save()&#34;有以下代码 if(!$ this-&gt; _hasModelChanged()){ 返回$ this; }
如果您修改该产品的任何字段:setData("name", "test");
它将起作用。