사용자 정의 옵션 텍스트 필드가 변경 될 때 가격을 계산하는 마 젠토 이벤트


10

길이와 너비라는 두 가지 사용자 정의 텍스트 필드로 제품을 만들려고합니다. 사용자가 길이와 너비를 모두 입력하면 가격은 사용자 지정 수식을 통해 계산해야합니다.

관찰자를 연결하는 올바른 이벤트를 찾으려고 노력 중입니다.

내가 알고 시도한 것은 다음과 같습니다.

1) 제품보기의 사용자 정의 필드 텍스트 상자에 관찰자 이벤트를 통해 아직 탭핑하는 방법을 찾지 못한 onchange 이벤트가 있습니다- "opConfig.reloadPrice ()

2) sales_quote_add_item 이벤트에서 관찰자를 작성하면 장바구니에 추가 될 때 수식을 통해 가격을 변경할 수 있습니다. 이 방법을 사용하면 장바구니에 추가하기 전에 제품보기에서 변경하는 방법이 필요합니다.

3) 또한 catalog_product_get_final_price 이벤트를 시도했지만 제품 페이지가로드 될 때만 발생하는 것처럼 보이므로 제품 길이 또는 너비가 추가 된 후에는 다시 실행되지 않습니다.

어떤 아이디어라도 대단히 감사하겠습니다!


Fabian의 도움이 되었습니까? 그렇다면 도움을 청할 수 있도록 수락하거나 명확히하십시오.
philwinkle

답변:


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.