0

検出されたように見えるオブザーバーを作成し、正常に実行しています。オブザーバーは、カスタムオプションデータを製品に動的に追加するために使用されます。

私は最初にMYSQL制約違反を取得していましたが、オンラインで調査した後、これは、作成した新製品が実際にデータベースに保存される前に、オブザーバーがカスタムオプションデータをデータベースに追加しようとしたためだと思います。

config.xmlを変更して、「catalog_product_save_before」が「catalog_product_save_after」になるようにしました。製品は正常に保存されますが、オブザーバーで指定されたカスタムオプションデータは製品の詳細に含まれていません。

私のconfig.xml:

<events>
            <catalog_product_save_after>
                <observers>
                    <micoavp>
                        <type>singleton</type>
                        <class>Bsm_Micoavp_Model_Observer</class>
                        <method>Add_CustomOptions_Automatically</method>
                    </micoavp>
                </observers>
            </catalog_product_save_after>
</events>   

私のオブザーバーコード:

public function Add_CustomOptions_Automatically($observer) {


       $event = $observer->getEvent();
       $product = $event->getProduct();


   $optionData = array(
                      'is_delete'         => 0,
                      'is_require'        => false,
                      'previous_group'    => '',
                      'title'             => 'want to preorder ? ',
                      'type'              => 'checkbox',
                      'price_type'        => 'fixed',
                      'price'             => '20.0000',
                      'sort_order'        => 0,
                      'values'            => array(
                                                    array(
                                                    'is_delete'     => 0,
                                                    'title'         => 'preorder',
                                                    'price_type'    => 'percent',
                                                    'price'         => -20,
                                                    'sku'           => 'product sku',
                                                    'option_type_id'=> -1,
                                                    ))

                 );
   $product->setHasOptions(1);

  $opt = Mage::getModel('catalog/product_option');
   $opt->setProduct($product);
   $opt->addOption($optionData);
   $opt->saveOptions();      

          Mage::log("option should be added now");

 }

このURLからコードを取得しました。これは、1.5 CE用であることを示しています: http ://www.webmasterbulletin.net/2011/04/magento-programmatically-add-custom-options/1417

これを正しく機能させるために必要な1.6関連の微調整があるかどうか誰かが知っていますか?指定されたカスタムオプションデータは、この段階での単なるテストです。機能させることができたら、追加するオプションデータを変更します。

どうもありがとう

4

1 に答える 1

0

上記のコードでは、すべて問題ないようです。最後に次の行を追加するだけです。

 $product->addOption($opt);
于 2013-01-23T10:44:58.517 に答える