Замените разницу в цене на фактическую цену в Magento Конфигурируемые опции продукта - PullRequest
17 голосов
/ 03 июня 2011

У меня есть настраиваемый продукт с 3 вариантами, см. Ниже:

enter image description here

Я хочу заменить + £ 24,00 и + £ 75,00 фактическими ценами на товары.

Поэтому вместо этого было бы сказано: £ 69,00 и £ 120,00

Я нашел код, находящийся в js / varien / product.js

Я потратил немного времени, разбивая и меняя код, но не могу понять, что нужно изменить.Строка 240 вниз в этом файле обрабатывает события JavaScript для конфигурируемых продуктов.

Буду признателен за любую помощь здесь.

Ответы [ 8 ]

21 голосов
/ 31 июля 2011

Это выполняется с помощью JavaScript. Вам нужно изменить метод getOptionLabel в js / varien / configurable.js (это 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);
        }  

Еще несколько замечаний по этому поводу:

Вы найдете другой идентичный объект с именем Product.Config, который создается в js / varien / product.js. Насколько я могу судить, это абсолютно ничего не делает, поскольку его заменяют на js / varien / configurable.js.

Кроме того, если вы просто измените js / varien / configurable.js, при следующем обновлении Magento вы, вероятно, потеряете свои изменения. Лучше создать другой файл, например js / varien / my_configurable.js или любой другой, и вызвать его в файле конфигурации (product.xml) для любой используемой темы.

4 голосов
/ 15 июля 2014

В magento 1.9 метод .js больше не работает.

Вместо этого я обновил Abstract.php (/app/code/core/Mage/Catalog/Block/Product/View/Options/Abstract.php), скопируйте этот файл в / app / code / local / Mage / Catalog / Block /Product/View/Options/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();

Я видел подобные решения, но это единственный способ убедиться, что он также работает с такими вещами, как отрицательные варианты продукта и специальные скидки на цены.

4 голосов
/ 05 июня 2011

Это расширение может быть полезным, я использовал его в прошлом (и, похоже, оно поддерживается):

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

1 голос
/ 19 декабря 2014

Нашел решение здесь , которое работает на Magento 1.9, но оно переопределяет основной код, это нужно сделать так, чтобы оно не переопределяло ядро.новый файл js, но каким-то образом ядро ​​configurable.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;

});

0 голосов
/ 11 ноября 2016

в Magento 1.9 открыть js / varien / configurable.js Перейти к функции getOptionLabel

изменить этот код функции при необходимости.

0 голосов
/ 27 июня 2014

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

Должна быть доступна возможность видеть разные цены для каждого варианта, и, возможно, даже по умолчанию.делает это, и даже автоматически переключает изображения при выборе каждого варианта!

0 голосов
/ 15 ноября 2013

В 1.7 (не уверен, когда это было изменено) все вокруг изменилось.в итоге получается, что строка цены построена на PHP внутри Mage / Catalog / Block / Product / View / Options / Abstract.php в функции _formatPrice при вызове из Mage / Catalog / Block / Product / View / Options / Type / Select.php

Обратите внимание, что изменение любого из этих двух классов вызовет изменение на сайте, а не только в этом конкретном комбо

0 голосов
/ 30 июля 2011

Отредактируйте файл js/varien/product.js, взглянув на номер строки 691

Если мы изменим цены атрибутов со страницы сведений о продукте, здесь сработает триггер.Просто сверьтесь с alert(price);, и вы получите изменяемую цену.

...