Заменить цену с фактической ценой в 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) для любой темы, которую вы используете.
Ответ 2
Это расширение может быть полезно, я использовал его в прошлом (и он, как представляется, поддерживается):
http://www.magentocommerce.com/magento-connect/Matt+Dean/extension/596/simple-configurable-products
Ответ 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
измените этот код функции по мере необходимости.