Заменить цену с фактической ценой в Magento Настраиваемые параметры продукта

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

enter image description here

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

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

Я нашел код в js/varien/product.js

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

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

Ответы

Ответ 1

Это выполняется 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) для любой темы, которую вы используете.

Ответ 3

В 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

Найденное решение здесь, которое работает на 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;

});

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Возможность видеть разные цены на один вариант должна быть доступна и, возможно, даже по умолчанию.

Prestashop делает это и даже автоматически переключает изображения при выборе каждого варианта!

Ответ 8

в Magento 1.9 открыть js/varien/configurable.js goto function getOptionLabel

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