OpenCart: Автоматическое изменение цены на странице товара (продукта) при изменении опции

OpenCart: Автоматическое изменение цены на странице товара (продукта) при изменении опции При выборе какой-либо опции из списка select option цена будет изменяться в зависимости от добавки к цене для выбранной опции. Изменение срабатывает без перезагрузки страницы по ajax, ну и при заказе в корзину поступает товар с обновлённой ценой, так как применяется опция(и), что вносит поправку на основную цену.

Толковое объяснение как внедрить в магазин на OpenCart автоматическое изменение цены при выборе опции из выпадающего списка (selection option) составил Jack Davis. Публикуем этот метод с некоторыми правками для рублёвой валюты.

Внимание! Есть очень удачное дополнение, о котором подсказал Евгений. Оно как раз решает все проблемы, обсуждаемые в комментариях к нашей статье. И мы думаем будет правильно если те, кому интересно стабильное дополнение (решение приводимое ниже - тоже стабильно и даже бесплатно, но работает только если опции в формате списка и не работает для checkbox и radiobutton!!!), купят его на офф. сайте - Option Price Update (Redux).

После изучения скриптов движка магазина Jack решил реализовать эту feature на Javascript, а не PHP/MySQL, так как намного легче использовать элементы после того, как они загрузятся на страницу, вместо того, чтобы пытаться умничать, чтобы генерировать эти элементы. Также здорово помогает делу интергрированность JQuery в Opencart, что экономит время на подключение скриптов.

Подготовка страницы товара вашего OpenCart-магазина для автоматического обновления цены.

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

  • catalog/view/theme/[YOUR THEME]/template/product/product.tpl

Вверху вставляем div:

<?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
	<div id="content"><?php echo $content_top; ?>
	<div id="thisIsOriginal" style="visibility: hidden; height:0px;"><?php echo $price; ?></div>
	  <div class="breadcrumb">

Это даст функции JQuery информацию об исходной цене до всяких изменений оной!

Дальше обрамим показываемую цену в тег Span. Примерно 68 строка в коде:

<select name="option[<?php echo $option['product_option_id']; ?>]">
   <option value=""><?php echo $text_select; ?></option>
   <?php foreach ($option['option_value'] as $option_value) { ?>
   <option value="<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
   <?php if ($option_value['price']) { ?>

   //Note that the following line has Span tags around the price

   (<?php echo $option_value['price_prefix']; ?><span id="newPrice"><?php echo $option_value['price']; ?></span>)

   //

   <?php } ?>
   </option>
   <?php } ?>
   </select>

Также добавляем тег span у цены отображаемой (а также у специальной цены (красной)), в котором и будет подменяться цена при выборе опции из списка (цвет, размер и т.д.):

<?php if ($price) { ?>
   <div class="price"><?php echo $text_price; ?>
   <?php if (!$special) { ?>

   //Here is the first priceUpdate span tag
   <span id="priceUpdate"><?php echo $price; ?></span>
   //

   <?php } else { ?>

   //Here is the second
   <span class="price-old"><?php echo $price; ?></span> <span class="price-new"><span id="priceUpdate"><?php echo $special; ?></span></span>
   //

<?php } ?>
<br />

Теперь всё готово к написанию функции для автоматического обновления цены, когда посетитель выбрал какую-либо опцию, для которой другая цена должнеа быть.

Строим функцию автоматического изменения цены в зависимости от выбранной из списка опции.

Теперь мы начнём писать функцию JQuery, которая начнёт изменять цену в зависимости от выбираемой опции! Мы поместим скрипт в файл header OpenCart, поэтому открываем шаблон хедера:

  • catalog/view/theme/[YOUR THEME]/template/common/header.tpl

Ищем область, где написан код Google Analytics (прям перед закрываюшим </head>):

<![endif]-->
<?php echo $google_analytics; ?>
   //This is where the function will go
</head>

Сперва надо определить начальный блок JQuery и собрать цену по умолчанию и показываемую валюту и поместить их в несколько переменных, которые будут передаваться, когда меняется какая-либо опция из выпадающего списка:

<script type="text/javascript">
$(document).ready(function() {
   //This triggers the code when the selection option box is changed
   $('.option').change(function() {

   //This gets the original price from the div box we put in earlier
   var OriginalPrice = $('#thisIsOriginal').text();

   //This collects the currency by tearing the first character from the original price
   //var OriginalCurrency = OriginalPrice.substring(0, 1); // для $, евро, фунта и др. валют, символ которых указывается перед ценой
var OriginalCurrency = OriginalPrice.substring(OriginalPrice.length-3, OriginalPrice.length);
// OriginalPrice.substring(0, 1); // для нашего рубля, когда валюта указывается после цифры цены
//This removes the currency from the original price so it is just a number 
//OriginalPrice = OriginalPrice.substring(1); // для рубля первый символ не нужно удалять 
//we now have two separate variables with our currency and the original price 
});
 });

Теперь, у нас есть текущая валюта и цена и всё что осталось, это взять новое значение цены из опции!

   ///This gets the text displayed by the selection box
   var newPriceValue = $('.option :selected').text();

   //This gets the position of the Opening & Closing brackets in the text
   var position1 = newPriceValue.indexOf("(");
   var position2 = newPriceValue.indexOf(")");

   //This section selects everything between the brackets, skipping out the currency symbol
   //position1 = position1+3; // если есть символ впереди цифры
position1 = position1+1 // для рубля не пропускаем символ валюты впереди его просто нет, пропускает  только скобку в надбавке цены

   //var finalPriceValue = newPriceValue.substring(position1, position2);
var finalPriceValue = newPriceValue.substring(position1, position2-4); // формат цены в опциях (+10,00 р.) - с конца отступаем 4 символа                      //This stops the price changing if the option doesn't trigger an increase 
if(newPriceValue.indexOf('.') == -1) { finalPriceValue = "0"; } 

//This adds together the original price and the extra price shown in the selection box and rounds them to two decimal places 
finalPriceValue = parseFloat(finalPriceValue) + parseFloat(OriginalPrice); 
finalPriceValue = finalPriceValue.toFixed(2); 

//And this final part updates the price on the screen to show the number we have just created 
//$('#priceUpdate').text(OriginalCurrency + finalPriceValue); 
$('#priceUpdate').text(finalPriceValue + OriginalCurrency); // валюта после цифры в случае нашего рубля

И всё! Это просто использование элементов на странице для автоматического обновления цены на странице товара по выбору опции, можно придумать другие способы, но этот работает прекрасно. Ниже целиком вся функция для тех, кто хочет скопировать, скопируйте и вставьте в <head>. Не забудьте добавить теги span и div в шаблон страницы продукта!

для валюты слева (перед ценой):

<script type="text/javascript">
$(document).ready(function() {
   $('.option').change(function() {
   var OriginalPrice = $('#thisIsOriginal').text();
   var OriginalCurrency = OriginalPrice.substring(0, 1);
   OriginalPrice = OriginalPrice.substring(1);

   var newPriceValue = $('.option :selected').text();
   var position1 = newPriceValue.indexOf("(");
   var position2 = newPriceValue.indexOf(")");
   position1 = position1+3;
   var finalPriceValue = newPriceValue.substring(position1, position2);
   if(newPriceValue.indexOf('.') == -1)
   {
	finalPriceValue = "0";
   }
   finalPriceValue = parseFloat(finalPriceValue) + parseFloat(OriginalPrice);
   finalPriceValue = finalPriceValue.toFixed(2);

   $('#priceUpdate').text(OriginalCurrency + finalPriceValue);
   });
});
</script>

Для рубля:

<script type="text/javascript">
	$(document).ready(function() {
   $('.option').change(function() {
   var OriginalPrice = $('#thisIsOriginal').text();
   var OriginalCurrency = OriginalPrice.substring(OriginalPrice.length-3, OriginalPrice.length);// OriginalPrice.substring(0, 1);
   //OriginalPrice = OriginalPrice.substring(1);

   var newPriceValue = $('.option :selected').text();
   var position1 = newPriceValue.indexOf("(");
   var position2 = newPriceValue.indexOf(")");
   position1 = position1+1;
   var finalPriceValue = newPriceValue.substring(position1, position2-4);
   if(newPriceValue.indexOf('.') == -1)
   {
finalPriceValue = "0";
   }
   finalPriceValue = parseFloat(finalPriceValue) + parseFloat(OriginalPrice);
   finalPriceValue = finalPriceValue.toFixed(2);

   $('#priceUpdate').text(finalPriceValue + OriginalCurrency);
   });
});
</script>

Update

Рабочий пример: Access Panel Shop !

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (46)     Подпишитесь на RSS комментариев к этой статье.

46 комментариев

#332
Олег говорит:
March 18, 2012 at 10:13 pm
Не работает на версии 1.5.1.3. Есть ли другое решение?
#333
almix говорит:
March 18, 2012 at 10:32 pm
Олег, я делал на копии Opencart 1.5.1.3, а именно на русской ocStore 1.5.1.3 и работает. Тут много правок в коде, надо всё аккуратненько сделать, проверьте последовательно все ли правки внесли?
#337
Simon говорит:
March 19, 2012 at 07:11 pm

Делал на 1.5.1.3 на русской ocStore 1.5.1.3!

Все действительно работает!

Нужны всего лишь элементарные знания кода, тогда все будет работать четко и правильно! ;)

Большое спасибо за статью, функция очень пригодная!

#340
almix говорит:
March 19, 2012 at 11:56 pm

Пожалуйста, Simon. Рад, что пользуетесь. Можно ещё дописать код для radio и может checkbox, если будете дорабатывать, черканите.

edit 09.04.2012: ЕСТЬ ДОРАБОТАННОЕ ДОПОЛНЕНИЕ - см. начало этой статьи, там ссылка на модуль.

#344
Александр говорит:
March 20, 2012 at 11:45 pm
Спасибо большое работает все кроме того что если ставить опять опцию без добавленой стоимасти(тоесть по-умолчанию) пишет "Цена: NaN грн. "
#360
Dan говорит:
March 22, 2012 at 11:24 am

чуть изменил:

1) объединил варианты для рубля и не рубля;

2) учитывается знак опции.

Код сырой, но вроде робит правильней) единственное но: для иностранных валют (как то доллар, евро и т.д.), у которых есть официальное обозначение, в настройках надо выставить отображение символа валюты слева от стоимости, для рубля - справа.

Код:

<script type="text/javascript">
$(document).ready(function() {
$('.option').change(function() {
var OriginalPrice = $('#thisIsOriginal').text();

if (isNaN(parseInt(OriginalPrice.substring(0, 1))))
{
var OriginalCurrency = OriginalPrice.substring(0,1);
//alert(OriginalCurrency);
OriginalPrice = OriginalPrice.substring(1);
var newPriceValue = $('.option :selected').text();
var position1 = newPriceValue.indexOf("(");
var position2 = newPriceValue.indexOf(")");
var signFinalPriceValue=newPriceValue.substring(position1+1, position1+2);
position1 = position1+3;
var finalPriceValue = newPriceValue.substring(position1, position2);
if(finalPriceValue.indexOf(',') == -1)
{
finalPriceValue = "0";
}
if (signFinalPriceValue=="-")
finalPriceValue = parseFloat(-finalPriceValue.replace(",",".")) + parseFloat(OriginalPrice.replace(",","."));
else
finalPriceValue = parseFloat(finalPriceValue.replace(",",".")) + parseFloat(OriginalPrice.replace(",","."));
finalPriceValue = finalPriceValue.toFixed(2);
$('#priceUpdate').text(OriginalCurrency + finalPriceValue.replace(".",","));
}
else
{
var OriginalCurrency = OriginalPrice.substring(OriginalPrice.length-3, OriginalPrice.length);
OriginalPrice = OriginalPrice.substring();
var newPriceValue = $('.option :selected').text();
var position1 = newPriceValue.indexOf("(");
var position2 = newPriceValue.indexOf(")");
position1 = position1+1;
var finalPriceValue = newPriceValue.substring(position1, position2-4);
if(finalPriceValue.indexOf(',') == -1)
{
finalPriceValue = "0";
}
finalPriceValue = parseFloat(finalPriceValue.replace(",",".")) + parseFloat(OriginalPrice.replace(",","."));
finalPriceValue = finalPriceValue.toFixed(2);


$('#priceUpdate').text(finalPriceValue.replace(".",",") + OriginalCurrency);
}
});
});
</script>

#362
almix говорит:
March 22, 2012 at 05:24 pm

пишет "Цена: NaN грн. "

Александр, у вас гривны, 3 символа ("грн"), из-за этого к переменным position нужно другие добавки прибавлять. Я-то для рубля делал, у него один символ "р".

#363
Олег говорит:
March 22, 2012 at 10:34 pm
Доброго времени суток!Все замечательно работает ,но при выборе опций не меняется старая цена!! Как это исправить???
#364
almix говорит:
March 23, 2012 at 01:51 pm

Олег, значит, что-то забыли...

http://loco.ru/materials/205-opencart-auto-update-price-option-selection#c333

#387
Евгений говорит:
March 25, 2012 at 02:09 am

у меня тоже не получилось(

Вот изображение до

http://imagepost.ru/?v=dof_1.JPG

и после

http://imagepost.ru/images/p/os/posle_8.JPG

#389
almix говорит:
March 25, 2012 at 11:03 pm

Евгений и все кто использует для опций не выпадающий список: вариант в статье пока работает только для выпадающего списка. Можно расширить скрипт, но я не силён в Javascript ((

Если кто-то подскажет, как получить выделенный текст через javascript, то доработаю для остальных случаев (загвоздка в том, что в этих случаях присутствует <label>):

<span class="required">*</span>
                    <b>Варианты рисунка:</b><br />
                    <input type="radio" name="option[237]" value="42" id="option-value-42" />
          <label for="option-value-42">Рисунок 1                        (+<span id="newPrice">1222,00 р.</span>)
                      </label>
          <br />
                    <input type="radio" name="option[237]" value="41" id="option-value-41" />
          <label for="option-value-41">Рисунок 2                        (-<span id="newPrice">323,00 р.</span>)
                      </label>

я уже запутался, думаю истина где-то между ног кодами

   var radios = jQuery("input[type='radio']");
   var newPriceValue = radios.filter(":checked").nextSibling.text();

и

$('input:radio:checked').label.innerHTML;

Помогите!

#392
Иван говорит:
March 26, 2012 at 01:11 pm
Добрый день. На движке 1.5.1.2 будет нормально функционировать?
#393
Олег говорит:
March 26, 2012 at 02:29 pm
Люди добрые доработайте код для остальных функций!! очень нужно для сайта!!!
#394
Олег говорит:
March 26, 2012 at 02:36 pm
Вот заметил такой баг- цена со скидкой а опции добавляют или отнимают стоимость у цены без скидки! может я не так поменял код? вроде все по инструкции
#396
Иван говорит:
March 26, 2012 at 02:58 pm

Кто сделает на движке 1.5.2.1 и шаблоне Shoppica 1.0.12 ?

За $ 

vanya.od@gmail.com

#397
almix говорит:
March 26, 2012 at 02:58 pm
@Иван, не проверял
#406
Евгений говорит:
March 30, 2012 at 05:05 pm

кому не жалко хотя бы рублей 30 пишите отдам. (отдал бы бесплатно, но сам покупал на много дороже)

Демо Видео:
http://screencast.com/t/KjehMtVX

для версий v1.4.7, v1.4.8, v1.4.8b, v1.4.9, v1.4.9.1, v1.4.9.2, v1.4.9.3, v1.4.9.4, v1.4.9.5, v1.5.0, v1.5.0.1, v1.5.0.2, v1.5.0.3, v1.5.0.4, v1.5.0.5, v1.5.1, v1.5.1.1, v1.4.9.6, v1.5.1.2, v1.5.1.3, v1.5.2, v1.5.2.1

Сайт: http://www.mvdoors.ru/mezh_komnatn_dveri/dveri_laminirovannye/1g1.html

#427
Юра говорит:
April 11, 2012 at 01:50 pm
almix  - я сделал все так, как указано у источника данной информации. Валюта доллар или евро и располагается она слева от стоимости товара. Все прекрасно работает и все обновляется.
Попробовал Ваш вариант с рублями, а он не работает. Считает неправильно и появляется "NaN".
У меня на сайте используется " руб. " (ну или без точки на окончании, не столь принципиально). Не могли бы Вы проработать данный вариант или указать где и что нужно поменять что бы все таки автоматическое обновление цены работало правильно. 
P.s мне не жалко денег за "option price update" но система оплаты которую они используют для меня не приемлема.  Спасибо за внимание и понимание. 
#428
almix говорит:
April 11, 2012 at 05:55 pm
Юра вы в магазине используете только опции в виде выпад. списка? тогда идея в том, что я делал для валюты 
"р." (2 симв.) - вам для "руб." (4 симв)


(+10,00 р.) против вашего (+10,00 руб.)
поэтому у вас изменится position2


вот как-то так
<script type="text/javascript">
$(document).ready(function() {
   $('.option').change(function() {
   var OriginalPrice = $('#thisIsOriginal').text();
   var OriginalCurrency = OriginalPrice.substring(OriginalPrice.length-5, OriginalPrice.length);// OriginalPrice.substring(0, 1);
   //OriginalPrice = OriginalPrice.substring(1);

   var newPriceValue = $('.option :selected').text();
   var position1 = newPriceValue.indexOf("(");
   var position2 = newPriceValue.indexOf(")");
   position1 = position1+1;
   var finalPriceValue = newPriceValue.substring(position1, position2-6);
   if(newPriceValue.indexOf('.') == -1)
   {
finalPriceValue = "0";
   }
   finalPriceValue = parseFloat(finalPriceValue) + parseFloat(OriginalPrice);
   finalPriceValue = finalPriceValue.toFixed(2);

   $('#priceUpdate').text(finalPriceValue + OriginalCurrency);
   });
});
</script>

но если планируете использовать для всех видов опций или даже когда несколько опций у одного товара и все вдияют на цену, то лучше всё же купить тот модуль. посмотрите - http://test.studio-textile.ru/postelnoe-belye/energetic-standard

#429
Юра говорит:
April 11, 2012 at 06:04 pm

спасибо большое! попробую чуть позже. что из этого получится сразу же отпишусь. 

я подобный вопрос написал источнику =) посмотрим что он скажет. 

а сколько стоит модуль ссылку на который мне дали ?

еще раз спасибо

#430
Юра говорит:
April 12, 2012 at 09:56 am

Я готов его купить ) Сколько стоит и к кому обратиться.

Подсчет работает правильно но возврат на начальную цену не происходит. Метод тыка не подошел (

У источника в демо считает все правильно и осуществляется возврат на начальную цену)

магия )

#431
almix говорит:
April 12, 2012 at 10:18 am
Что вы называете "возвратом на начальную цену"? При каких действиях посетителя это должно происходить?
#432
Юра говорит:
April 12, 2012 at 10:30 am

У меня продукция как раз как на сайте на который вы мне дали ссылку. Подушки и одеяла.

Позиция подушка. Изначально у меня стоит цена допустим 500 руб а размер ее 50 х 70 см.

Выпадающей список выглядит у меня так:

(выберите размер...)

1.  50 х 70 см.

2. 70 х 70 см (+ 500)

Нажимаем на номер 2 подсчет происходит все правильно и рубли отображаются как надо (руб.) НО когда выбираем на номер 1.  50 х 70 см. то цена вместо 500 руб превращается в "NaN"

В демо источника это происходит нормально (

#433
almix говорит:
April 12, 2012 at 12:22 pm
а, вы про ваш сайт говорите... не понял сразу. видимо из за точки - у вас стоит 50 x 70 см.  с точкой на конце.
#434
Юра говорит:
April 12, 2012 at 01:49 pm

Спасибо вам большое за помощь. Оказывается, что и в  "выберите вариант..."  надо точки убирать=)  все работает, все считает . Еще раз спасибо.

Не столь важно но спрошу, вы случайно не знаете как убрать копейки у цен в выпадающим списке? а то у меня основная цена без копеек. хочется что бы красиво =)

#481
Александр говорит:
June 3, 2012 at 04:59 pm
Здраствуйте спасибо за то что такую прелесть сделали всё настроил и работает. Вот только акции не работает точнее работает только не правельно! добавляет опции к старой цене а при невыбраной опции показевает старую цену а не новую. Подскажыте как исправить очень нужная вещь! Вот пример http://shoppingzona.com.ua/telefone/mobilnyj_telefony/Nokia_E71_mini.html
#483
almix говорит:
June 4, 2012 at 01:59 am

@Юра - В админке: Система --> Локализация --> Валюты --> Выбранная валюта --> Количество знаков после запятой - поставьте 0.

@Александр - по ссылке вообще не меняется цена от опции.

#490
Александр говорит:
June 7, 2012 at 04:12 pm
Ответьте пожалуйста на мой вопрос выше, с нетерпением жду ответа и решение проблемы. Очень надо! Зарание спасибо!!!!
#491
almix говорит:
June 7, 2012 at 05:22 pm
@Александр, я не понимаю вопрос. Захожу по ссылке, там при выборе опции ничего не меняется. Опишите подробнее. Также выход - купите модуль Option Price Update (Redux)
#492
Александр говорит:
June 7, 2012 at 10:55 pm
Извините я отключил на акции чтобы клиенты не пугались. Ну смотрите обясню. По ссылке стоит акция, новая цена 299 грн а старая 349 грн так вот при выборе флеш карты с опций +35 грн начинает добавлять 35 грн к старой цене (349 грн + 35 грн) а надо чтобы было (299 грн + 35 грн). А также при выборе опции без дополнительной стоимости показевает 349 грн а надо 299 грн (начальная цена). Покупать не охота так как уже почти финал и огромное спасибо создателю этого. С нетерпением жду решение проблемы! Если надо могу скинуть полностю файлы изминенные. Зарание спасибо!
#580
ddmx говорит:
July 19, 2012 at 02:35 pm

Немного переделал скрипт , т.к. столкнулся с проблемой что в опции, в скобках по мимо цены бывают другие параметры , а так как  в скрипте выбор цены как раз по скобкам , пришлось сделать выбор по знаку (+ или -) , который всегда ставиться перед ценой

   <script type="text/javascript">
$(document).ready(function() {
   $('.option').change(function() {
   var OriginalPrice = $('#thisIsOriginal').text();
   var OriginalCurrency = OriginalPrice.substring(OriginalPrice.length-3, OriginalPrice.length);// OriginalPrice.substring(0, 1);
   //OriginalPrice = OriginalPrice.substring(1);


   var newPriceValue = $('.option :selected').text();
   if(newPriceValue.indexOf("+")!=-1)
   { 
    var position1 = newPriceValue.indexOf("+"); 
var position2 = newPriceValue.indexOf(" ", position1);
var finalPriceValue = newPriceValue.substring(position1, position2-1);}
   else { 
    if(newPriceValue.indexOf("-")!=-1 && newPriceValue.indexOf("Выберите")==-1)
{
var position1 = newPriceValue.indexOf("-"); 
var position2 = newPriceValue.indexOf(" ", position1);
var finalPriceValue = newPriceValue.substring(position1, position2-1);
}
    else {finalPriceValue = "0";} 
}
   //var position2 = newPriceValue.indexOf(" ", position1);
   // position1 = position1+1;
   //var finalPriceValue = newPriceValue.substring(position1, position2-1);
   /*if(newPriceValue.indexOf('+') == -1 || newPriceValue.indexOf('-') == -1)
   {
       finalPriceValue = "0";
   }*/
   finalPriceValue = parseFloat(finalPriceValue) + parseFloat(OriginalPrice);
   finalPriceValue = finalPriceValue.toFixed(2);


   $('#priceUpdate').text(finalPriceValue.replace(".",",") + OriginalCurrency);
   });
});
</script>

#586
Димон говорит:
July 27, 2012 at 10:50 pm
Купил модуль Option Price Update (Redux)  и все вопросы исчерпаны.
Модуль подходит ко всем версиям Opencart, как 1.4.х так и 1.5.х,
посмотрел контроллер php, ничего сложного нету, все оригинально и просто
если нужна помощь в установке обращайтесь
gdemonm@gmail.com

#631
Петр говорит:
September 10, 2012 at 10:31 am
Здравствуйте,подскажите как сделать чтобы в опции товара "выпадающий список"выводилась не +10р а просто новая цена на аналогичный товар?
масло синтетическое 1л-40грн
масло синтетическое 4л-160грн
сейчас основная цена товара 40грн если покупаешь 1л то в корзину падает 40+40=80грн
если покупаешь 4л то в корзину падает 40+160=200грн
Очень нужно подскажите кто знает где править???

дополню дальше в админке товаров если ставишь в опциях 1л "0" то в выпадающем списке видно -1л и при этом основная цена на сайте (та что жирным отражаестя) тоже 0,00грн, но при покупке 1л в корзину падает правильно 40грн. т.е. плюсует основную цену из вкладки "Данные"
2,Соответственно и с 4л -120 (ставлю в админке) на сайте тоже в выпадающем списке видно 120 ( а должо быть 160) и в корзину добавляет 160грн.
Помогите не знаю что дальше делать
#634
almix говорит:
September 10, 2012 at 01:07 pm

Пётр, вы указываете цену основную на вкладке Данные -> Цена (сколько стоит 1л), потом создаёте опции, для основной опции (1л), а её создать надо, оставляете надбавку 0 руб., а остальные пишете на сколько цена увеличилась, либо уменьшилась (плюсик или минусик). 

Чтобы цена отображалась, а не надбавка, попробуйте в виде продукта прописать на php расчёт: переменная "цена" + переменная "добавка", в том месте где сейчас написана только добавка. Сам не делал так, но так как и цена, и добавка там присутствуют как переменные, то простое сложение должно сработать.

#636
Петр говорит:
September 10, 2012 at 09:13 pm

здравствуйте, спасибо за ответ, но дело в том что если я прописываю в опциях 1л пробел, 4л 120грн, 20л 760грн то в выпадающем списке клиент видит соответственно : (что уже не правильно)

1л,

4л(120грн),

20л(760грн)

при этом основная цена при выборе из выпадающего списка автоматом меняется на

0,00грн

160,00грн

760грн,00

а при нажатии кнопки купить в корзину падает правильно: 0+40=40грн

120+40=160грн

760+40=800грн

где-то в функции сумирует осн. цену (вкладка "основное") + опция выпадающий список

либо минусует (пробовал тоже) где отменить сумирование омн цены с опциями???


#643
almix говорит:
September 17, 2012 at 05:57 pm
Используете Option Price Update (Redux) ?
#656
Ольга говорит:
October 1, 2012 at 03:29 pm

Здравствуйте!

Не сильна в коде. Сделала как поняла.

Получаю в цене товара на странице сайта:

Цена: //Here is the first priceUpdate span tag 0.00 // 0.00

У меня по умолчанию пока стоит 0.00 руб.

Перечень опций каждое значение опции прибавляется к предыдущему (набор мебели)

В идеале хочется чтобы цена менялась при выборе каждого значения опции. Подскажите как это лучше сделать..плиз..Опен Карт 1.5.3

#660
almix говорит:
October 5, 2012 at 01:03 am
Ольга, зашёл на ваш сайт vemebel.ru – у вас вообще цены с минусом. Что-то не так, проверьте как в стандартном Opencart шло.
#733
Иван говорит:
December 25, 2012 at 02:03 am
Все работает, НО добавляет цену допустим не на 200 руб. а на 20 руб. то есть если надбавка на сотни а добавляется на десятки, почему так?
#735
Иван говорит:
December 25, 2012 at 08:47 pm
Отзовитесь пожалуйста! У меня цена меняется не на сотни а на десятки. Т.е. должно прибавлять 200 а прибавляет 20! Почему так? Где косяк?
#761
Иван говорит:
January 13, 2013 at 12:02 am

Здравствуйте!

У вас нет случаем данной модификации  для opencart версии 1.5.4.1?

#808
Станислав говорит:
March 24, 2013 at 09:33 pm

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

Версия 1.5.4.1

Помогите разобраться в чем суть

Скрипт вставил вот этот 

<script type="text/javascript">

$(document).ready(function() {

   $('.option').change(function() {

   var OriginalPrice = $('#thisIsOriginal').text();

   var OriginalCurrency = OriginalPrice.substring(OriginalPrice.length-3, OriginalPrice.length);// OriginalPrice.substring(0, 1);

   //OriginalPrice = OriginalPrice.substring(1);









   var newPriceValue = $('.option :selected').text();

   if(newPriceValue.indexOf("+")!=-1)

   { 

    var position1 = newPriceValue.indexOf("+"); 

var position2 = newPriceValue.indexOf(" ", position1);

var finalPriceValue = newPriceValue.substring(position1, position2-1);}

   else { 

    if(newPriceValue.indexOf("-")!=-1 && newPriceValue.indexOf("Выберите")==-1)

{

var position1 = newPriceValue.indexOf("-"); 

var position2 = newPriceValue.indexOf(" ", position1);

var finalPriceValue = newPriceValue.substring(position1, position2-1);

}

    else {finalPriceValue = "0";} 

}

   //var position2 = newPriceValue.indexOf(" ", position1);

   // position1 = position1+1;

   //var finalPriceValue = newPriceValue.substring(position1, position2-1);

   /*if(newPriceValue.indexOf('+') == -1 || newPriceValue.indexOf('-') == -1)

   {

       finalPriceValue = "0";

   }*/

   finalPriceValue = parseFloat(finalPriceValue) + parseFloat(OriginalPrice);

   finalPriceValue = finalPriceValue.toFixed(2);









   $('#priceUpdate').text(finalPriceValue.replace(".",",") + OriginalCurrency);

   });

});

</script>
#812
Олег говорит:
March 26, 2013 at 08:07 pm
Помогите пожалуйста. Вроде все работает, но цена выводится два раза: 1 - меняющаяся, 2 - статическая (как указано в данных). Как убрать вторую цифру
#817
almix говорит:
March 30, 2013 at 07:30 pm
Олег, возможно, где-то class не так написали у <span>. Ссылку на сайт дайте.
#889
Виктор говорит:
May 30, 2013 at 06:35 pm

Всё отлично. Заработало. Спасибо автору!!!!

Только цена во всем магазине отображается с разделением разрядов (настроил в админке), а в этом модуле  отображается без разделения разрядов (тысяч).

Нужно вместо 143000, отображать 143 000 (с пробелом). Где это можно настроить?

#1081
сергей говорит:
February 6, 2014 at 01:15 am
Opencart   Version 1.5.6  все работает отлично  . спасибо за статью