Подтвердить что ты не робот

Изменения Magento - reloadPrice()

Мой клиент должен выполнить операцию над настраиваемыми параметрами продуктов.

Используя Magento CE, я создаю продукт и даю ему некоторые настраиваемые параметры из встроенного меню левой руки в разделе "Управление продуктами" > "Добавить новый продукт", например "мм" (миллиметры) mt "(метры)

Этот продукт будет иметь как настройки радио, так и ввод текстового ввода.

Скажем, что

Base price: 0 

MM:
Radio option A which costs 0,9
Radio option B which costs 1,2
Radio option C which costs 2,3 

MT:
Textbox value = unknown yet

Скажем, пользователь выбирает Radio option B и вводит 10 в текстовое поле

Цена должна быть обновлена ​​как таковая:

1,2 * 10 + 0

Что такое

radio value cost * textbox value + base price 

Можно ли сказать, что код принимает значение переключателя, умножьте его на значение текстового поля и суммируйте все его с базовой ценой?

Где я могу посмотреть текущее поведение пользовательских параметров продукта?

ИЗМЕНИТЬ

Я видел, что всякий раз, когда выбирается значение, вызывается функция reloadPrice().

Я думал проверить, являются ли оба входа радио и текстом, затем получите значение текста и умножьте его на значение радио.

Это правильно? Можете ли вы указать мне лучше?

4b9b3361

Ответ 1

Это помогает мне, я надеюсь, что это также поможет вам

 initialize : function(config){
                this.config = config;
                this.reloadPrice();
                document.observe("dom:loaded", this.reloadPrice.bind(this));

            },
            reloadPrice : function(){
               price = new Number();
                config = this.config;
                skipIds = [];
                skipIds = [];
                relatedword = [];
                relatedvalue = [];
                relatedid = [];
                counter_each=0;
                counter=1;
                first=0;
                areaValue=1;
                submitbutton=true;

                $$('body .product-custom-option').each(function(element){
                    var optionId = 0;
                    element.name.sub(/[0-9]+/, function(match){
                        optionId = match[0];
                    });
                    if (this.config[optionId]) {
                        if (element.type == 'checkbox' || element.type == 'radio') 
                        {
                            if (element.checked) 
                            {
                                if (config[optionId][element.getValue()]) 
                                {
                                    <?php if(Mage::getVersion() >= 1.7): ?>
                                        price += parseFloat(config[optionId][element.getValue()].price);
                                    <?php else: ?>
                                        price += parseFloat(this.config[optionId][selectOption.value]);
                                    <?php endif; ?>  
                                }
                            }
                        }
}

Ответ 2

reloadPrice() не обновляет цену продукта на уровне сервера. Один из способов сделать это обновление цены продукта - это реализовать событие checkout_cart_product_add_after.

  • Вы настраиваете логику на уровне клиента с подробной страницей javascript. Назначьте это значение некоторой скрытой переменной в форме product_addtocart_form. Лучше всего сохранить сеанс, чтобы уменьшить уязвимости на стороне клиента, или вы можете найти свой собственный лучший способ. Или Внесите свой логин только в метод Observer. Независимо от того, что вы найдете в безопасности.
  • Перепишите класс Mage_Checkout_Model_Cart, чтобы изменить как,

    public function addProduct($productInfo, $requestInfo=null)
    {
     ...
    Mage::dispatchEvent('checkout_cart_product_add_after', array('quote_item' => $result, 'product' => $product,'request_data'=>$request));
     ...
    }
    
  • В вашем файле yourmodule/etc/config.xml:

    <config>
        ...
        <frontend>
            ...
            <events>
                <checkout_cart_product_add_after>
                    <observers>
                        <unique_name>
                            <class>modulename/observer</class>
                            <method>customPrice</method>
                        </unique_name>
                    </observers>
                </checkout_cart_product_add_after>
            </events>
            ...
        </frontend>
        ...
    </config>
    
  • И затем создайте класс Observer в вашем модуле /Model/Observer.php

    class <namespace>_<modulename>_Model_Observer
    {
        public function customPrice(Varien_Event_Observer $observer)
        {
            // Get the quote item
            $item = $observer->getQuoteItem();
            $request=$observer->getRequestData();
            // Ensure we have the parent item, if it has one
            $item = ( $item->getParentItem() ? $item->getParentItem() : $item );
            // Load the custom price
            $price = "custom price logic";//whatever from your hidden value or by some other mean. 
            // Set the custom price
            $item->setCustomPrice($price);
            $item->setOriginalCustomPrice($price);
            // Enable super mode on the product.
            $item->getProduct()->setIsSuperMode(true);
        }
    

    }

Подробнее... здесь