【问题标题】:Magento - reloadPrice() modificationsMagento - reloadPrice() 修改
【发布时间】:2015-05-03 17:13:33
【问题描述】:

我的客户需要对产品自定义选项进行操作。

使用 Magento CE,我创建了一个产品,并在“管理产品”>“添加新产品”的内置左侧菜单中为其提供了一些自定义选项,例如“mm”(毫米)和“公吨”(米)

该产品将同时具有无线电选项和​​文本机器人输入。

假设我们有

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()函数被调用。

我想检查两个输入是否都是收音机和文本,然后获取文本的值并将其乘以收音机的值。

对吗?你能给我指点一下吗?

【问题讨论】:

  • 我想是因为你的信息太少了。您确实需要解释您正在使用的特定购物车,或插入,提供代码示例。 Magento 不是一种语言,它是一个平台。给出的信息无法回答您的问题
  • 我没有为购物车使用任何插件,它只是 Magento 的默认设置。我无法给出任何代码示例,因为我不知道应该在哪里放置任何自定义代码以使自定义选项的行为像我想要的那样。我会尝试提供更多信息,但实际上并不多。
  • 您是否考虑过使用数量字段而不是附加文本字段的可配置产品?
  • 不,实际上我没有,但这可能吗?我的意思是,属性是什么?
  • 文本框是干什么用的?数量?

标签: javascript php magento


【解决方案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 形式下的某个隐藏变量。更好的方法是保存到会话以减少客户端漏洞,或者您可以找到自己的更好方法。或仅在观察者方法中实现您的登录。任何您认为安全的东西。
    • 重写类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));
       ...
      }
      
    • 在你的模块/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>
      
    • 然后在 yourmodule/Model/Observer.php 创建一个 Observer 类

      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);
          }
      

      }

    更多信息请查看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多