【问题标题】:Replace Price Difference with Actual Price in Magento Configurable Product Options在 Magento 可配置产品选项中用实际价格替换价格差异
【发布时间】:2011-09-07 16:19:42
【问题描述】:

我有一个可配置的产品,有 3 个选项,见下文:

我想将 +£24.00 和 +£75.00 替换为产品的实际价格。

所以它会说:69.00 英镑和 120.00 英镑

我在 js/varien/product.js

中找到了代码

我花了一些时间来修改和更改代码,但无法完全理解需要更改的内容。此文件中向下的第 240 行处理可配置产品的 JavaScript 事件。

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: magento options product configurable


    【解决方案1】:

    此扩展程序可能会有所帮助,我过去曾使用过它(并且它似乎得到了维护):

    http://www.magentocommerce.com/magento-connect/Matt+Dean/extension/596/simple-configurable-products

    【讨论】:

    【解决方案2】:

    编辑文件js/varien/product.js,查看行号691

    如果我们要从产品详细信息页面更改属性价格,触发器将在此处触发。只需检查alert(price);,您就可以获得可变价格。

    【讨论】:

      【解决方案3】:

      这是由 javascript 执行的。您需要修改 js/varien/configurable.js 中的 getOptionLabel 方法(这是 Magento 1.5.1.0,您的里程可能会因您使用的版本而异)。

      此方法接收要应用的选项和价格差异。如果只想显示不同期权的绝对价格,则需要自己计算,使用可配置产品的绝对基值和期权的绝对差值。

      该方法的前几行如下所示:

      getOptionLabel: function(option, price){
          var price = parseFloat(price);
      

      更改它,以便您获得绝对基价和期权的绝对差价。然后将它们加在一起以获得期权的最终绝对价格。像这样:

      getOptionLabel: function(option, price){
          var basePrice = parseFloat(this.config.basePrice);
          // 'price' as passed is the RELATIVE DIFFERENCE. We won't use it.
          //  The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice)
          var absoluteDifference = parseFloat(option.price);
          var absoluteFinalPrice = basePrice + absoluteDifference;
          // var price = parseFloat(price);
          var price = absoluteFinalPrice;
      

      然后你需要去掉选项中的 + 和 - 符号。稍后在同一方法中,当您调用 this.formatPrice 时,只需在每次调用中将第二个参数更改为 false。

          if(price){
              if (this.taxConfig.showBothPrices) {
                  str+= ' ' + this.formatPrice(excl, false) + ' (' + this.formatPrice(price, false) + ' ' + this.taxConfig.inclTaxTitle + ')';
              } else {
                  str+= ' ' + this.formatPrice(price, false);
              }  
      

      关于此的更多说明:

      您会发现在 js/varien/product.js 中创建了另一个名为 Product.Config 的相同对象。据我所知,这完全没有任何作用,因为它被 js/varien/configurable.js 取代。

      另外,如果只是更改 js/varien/configurable.js,下次升级 Magento 时,您可能会丢失所做的更改。最好创建另一个文件,如 js/varien/my_configurable.js 或其他文件,并在配置文件 (product.xml) 中为您使用的任何主题调用它。

      【讨论】:

      • +1。多谢。 1个属性选择很好,但是当有两个时,第二个属性的价格显示错误。
      • 在 Magento 1.7.2 上试过这个关于如何使它工作的任何提示。难以理解的configurable.js
      【解决方案4】:

      在 1.7 中(不确定何时更改),事情发生了变化。最终价格字符串是用 PHP 构建的,在 Mage/Catalog/Block/Product/View/Options/Abstract.php 中的 _formatPrice 函数中,当从 Mage/Catalog/Block/Product/View/Options/Type/Select 调用时.php

      请注意,更改这 2 个类中的任何一个都会引发整个网站的更改,而不仅仅是特定组合中的更改

      【讨论】:

        【解决方案5】:

        我对 Magento 如何默认使用这种奇怪的逻辑感到惊讶。

        应该可以查看每个变体的不同价格,甚至可能是默认价格。

        Prestashop 会这样做,甚至在选择每个变体时会自动切换图像!

        【讨论】:

          【解决方案6】:

          在 magento 1.9 中,.js 方法似乎不再起作用了。

          我更新了 Abstract.php (/app/code/core/Mage/Catalog/Block/Product/View/Options/Abstract.php),将此文件复制到 /app/code/local/Mage/Catalog/Block /产品/视图/选项/Abstract.php。在第 128 行,将 $_priceInclTax 和 $_priceExclTax 变量更改为以下内容:

          $_priceInclTax = $this->getPrice($sign.$value['pricing_value'], true)+$this->getProduct()->getFinalPrice();
          
          $_priceExclTax = $this->getPrice($sign.$value['pricing_value'])+$this->getProduct()->getFinalPrice();
          

          我见过类似的解决方案,但这是确保它也适用于负面产品选项和特价折扣等问题的唯一方法。

          【讨论】:

          • 这在 Magento 1.9.1.0 中有效,但如果你有多个选项,事情就会变得一团糟。无论如何它在我的情况下有效,所以我要添加 +1。
          【解决方案7】:

          找到了适用于 Magento 1.9 的解决方案 here,但它覆盖了核心代码,应该这样做,这样它就不会覆盖核心。

          我在一个新的 js 文件中尝试过这样的事情,但不知何故,核心的可配置.js 搞砸了,也许有人可以想出一个方法让 id 不会。

          Product.Config.prototype.getOptionLabel  = Product.Config.prototype.getOptionLabel.wrap(function(parentMethod){
          // BEGIN:: custom price display update
          var basePrice = parseFloat(this.config.basePrice);
          // 'price' as passed is the RELATIVE DIFFERENCE. We won't use it.
          //  The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice)
          var absoluteDifference = parseFloat(option.price);
          // var price = parseFloat(price);
          if(absoluteDifference){
              // console.log(option);
              price = basePrice + absoluteDifference;
          } else {
              price = absoluteDifference;
          }
          // END:: custom price display update
          
          if (this.taxConfig.includeTax) {
              var tax = price / (100 + this.taxConfig.defaultTax) * this.taxConfig.defaultTax;
              var excl = price - tax;
              var incl = excl*(1+(this.taxConfig.currentTax/100));
          } else {
              var tax = price * (this.taxConfig.currentTax / 100);
              var excl = price;
              var incl = excl + tax;
          }
          
          if (this.taxConfig.showIncludeTax || this.taxConfig.showBothPrices) {
              price = incl;
          } else {
              price = excl;
          }
          
          var str = option.label;
          if(price){
              if (this.taxConfig.showBothPrices) {
                  // BEGIN:: custom price display update
                  // NOTE:: 'true' was changed to 'false' in 3 places.
                  str+= ' ' + this.formatPrice(excl, false) + ' (' + this.formatPrice(price, false) + ' ' + this.taxConfig.inclTaxTitle + ')';
              } else {
                  str+= ' ' + this.formatPrice(price, false);
                  // END:: custom price display update
              }
          }
          return str;
          

          });

          【讨论】:

            【解决方案8】:

            在 Magento 1.9 中 打开 js/varien/configurable.js 转到函数getOptionLabel

            根据需要修改此功能码。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-11-03
              • 1970-01-01
              • 2013-05-18
              • 2014-06-13
              • 1970-01-01
              • 2013-04-20
              • 2013-01-15
              相关资源
              最近更新 更多