カスタムオプションのテキストフィールドが変更されたときに価格を計算するMagentoイベント


10

長さと幅の2つのカスタムテキストフィールドを持つ製品を作成しようとしています。ユーザーが長さと幅の両方を入力する場合、価格はカスタム式で計算する必要があります。

私はオブザーバーを接続するための正しいイベントを見つけようとしています-誰かがそれが何であるか知っていますか?

これが私が知っていることと試したことです

1)製品ビューのカスタムフィールドテキストボックスに、オブザーバーイベント-"opConfig.reloadPrice()

2)イベントsales_quote_add_itemにオブザーバーを作成すると、カートに追加されたときに式を介して価格を変更できます。この方法でも、カートに追加する前に製品ビューで変更する方法が必要です。

3)イベントcatalog_product_get_final_priceも試してみましたが、これは商品ページが読み込まれたときにのみ発生するようです。そのため、商品の長さまたは幅を追加した後、再度発生しません。

どんなアイデアでも大歓迎です!


ファビアンのこれはあなたを助けましたか?もしそうなら、私たちが助けることができるようにあなたは受け入れるか明確にすることができますか?
philwinkle 2014年

回答:


2

私はこのユースケースに使用しましたsales_quote_collect_totals_before

/**
 * Set prices
 *
 * @param Varien_Event_Observer $observer
 */
public function salesQuoteCollectTotalsBefore(Varien_Event_Observer $observer)
{
    /* @var $quote Mage_Sales_Model_Quote */
    $quote = $observer->getQuote();
    foreach ($quote->getAllItems() as $quoteItem) {
        if (is your product of choice) {
            /* @var $quoteItem Mage_Sales_Model_Quote_Item */
            $product = $quoteItem->getProduct();
            $price = whatever formula you want to use;
            $product->setPrice($price);
        }
    }
}

クライアント側では、数行のJSを使用して価格を更新できますか?


2

catalog_product_get_final_price正しいサーバー側イベントです。商品ページが読み込まれたときだけでなく、商品がカートに追加されたときにも発生します。この場合、選択したすべてのカスタムオプションを使用できます。

$observer->getProduct()->getCustomOption($customOptionName);

(参照:ユーザーが0より大きいカスタム希望価格を設定し、任意の製品のカートに進む方法はありますか?


商品ページでの価格の再計算は別のトピックであり、JavaScriptが必要です。reloadPriceフックする正しい関数です、私はこのように拡張します:

Product.prototype.reloadPrice = Product.prototype.reloadPrice.wrap(function(callOriginal) {
    if (should_be_calculated_based_on_length_and_with) {

        // copy the original reloadPrice function here and change how `price` is calculated

    } else {
        callOriginal();
    }
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.