1

製品の保存時にテーブルに製品属性を挿入するオブザーバーを作成しました

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

スクリプトを実行すると、製品が 1 つずつ保存されますが、'catalog_product_save_after'オブザーバーはトリガーされません。このオブザーバーを使用して別のテーブルに 7000 個の製品属性をそれぞれ挿入する必要があるためです。

私はこれで間違ったことをしましたか? 親切にアドバイス。

4

2 に答える 2

0

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>
于 2013-06-18T10:31:23.337 に答える