0

オブザーバー メソッドで見積もりアイテムに直接保存する属性を作成しましたcheckout_cart_product_add_afterが、オブザーバーの終了後に元に戻されるように見えるため、値が保持されません。

以下のコード サンプルを参照してください。

config.xml (スニペット):

<checkout_cart_product_add_after>
    <observers>
      <module>
        <type>model</type>
        <class>NativeRemedies_OrderGroove_Model_Observer</class>
        <method>productAddAfter</method>
      </module>
    </observers>
  </checkout_cart_product_add_after>

Observer.php (スニペット):

public function handleOrderGroove()
{       
    foreach($this->og->products as $_product){
        if($_product->every>0){
            foreach($this->_quote->getAllVisibleItems() as $_item){
                //if sku is in the active list of recurring products selected add quote item id to array
                if($_item->getSku()==$_product->id){
                    Mage::helper('nrordergroove')->setRecurringItem($_item->getItemId());
                    $_item->setOrdergrooveActive(true)->save();
                    $_item->getProduct()->setPrice(2);
                    $_item->setCustomPrice(2);
                    $_item->setOriginalCustomPrice(2);
                    $_item->getProduct()->setIsSuperMode(true);
                }
            }
        } // else, do nothing
    }

この例の $_item オブジェクトは、 を呼び出した場合でも、属性を設定されたまま保持する機能を提供していません->save()

よろしくお願いいたします。カスタムの価格と属性の設定に関するすべてのチュートリアルを見てきましたが、状況を改善するものは何もないようです!

編集 1

これは 1.6 以降のバグのように感じ始めています。>=1.4 でのこの動作について、さまざまなボードで多くの議論を見てきました。

編集 2

はっきりさせておくと、ここでの問題は、Custom Pricing 属性が Product モデルまたは collectTotals メソッドによって効果的に上書きされていることです。回避策が必要です。

4

2 に答える 2

1

たまたま、ここで作業しているコードは実際に機能しました。アマスティのスペシャル プロモーションとの拡張機能の競合により、カスタム価格が設定されていませんでした。これは、次の Magento バージョンで動作することがテストされています。

  • 1.5 コミュニティ
  • 1.6.1 コミュニティ
  • 1.11.1.1 エンタープライズ
于 2013-01-09T15:35:00.693 に答える
0

これがあなたの質問への答えです。はい、これはMagento 1.5+の新しいバージョンにあります:

チェックアウトすると、アイテムが見積もりから注文に変換され、その時点で属性が失われます。

チェックアウト時に属性を保持するには、このオブザーバーに似たものを追加する必要があります。

<sales_convert_quote_item_to_order_item>
    <observers>
        <extra_options>
            <type>model</type>
            <class>extra_options/observer</class>
            <method>salesConvertQuoteItemToOrderItem</method>
        </extra_options>
    </observers>
</sales_convert_quote_item_to_order_item>

ここでは、オプションを見積もり項目から注文項目に移動します。

public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{
    $quoteItem = $observer->getItem();
    if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
        $orderItem = $observer->getOrderItem();
        $options = $orderItem->getProductOptions();
        $options['additional_options'] = unserialize($additionalOptions->getValue());
        $orderItem->setProductOptions($options);
    }
}

詳細については、こちらをご覧ください: Magento - ユーザー入力に基づく見積もり/注文の製品アイテム属性

于 2012-04-10T13:29:37.123 に答える