English (United Kingdom)Russian (CIS)
Динамическое изменение цены в карточке товара VirtueMart при выборе его атрибутов. PDF Печать E-mail
11.05.2011

Профессионально написанный скрипт для Вмртуемарт. Никаких Ajax, ни каких jquery, ни какой дополнительной нагрузки.

Очень часто бывает так, что цена на товар меняется в зависимости от его атрибутов, например, размера или веса. Покупатель выбирает необходимый ему вид товара, выбирает подходящие параметры, добавляет в корзину. При этом в программе vitruemart цена товара на странице одна, а в корзину попадает товар уже с другой ценой. Это вводит покупателей в недоумение.

Рассмотрим ситуацию на конкретном примере. Допустим, у нас интернет-магазин по продаже ювелирных украшений. Товар — золотое кольцо с бриллиантами стоимостью 20452 рубля. Выбираем 16 размер — добавляется еще 4 тысячи рублей, 750 пробу — еще 2 тысячи, добавляем товар в корзину — цена 27952. А на странице осталась прежняя.

Мы предлагаем сделать такое изменение цены virtuemart, чтобы изменения сразу отображались на странице товара. Суммарная итоговая цена будет в таком случае показываться уже при загрузке страницы, если текущая особенность не нулевая. Мы также не будем вносить никаких изменений в код самого магазина, а ограничимся одним js файлом.

Собственно, что должно получиться (базовая цена 21 952,00 руб.):

Кольцо золотое с бриллиантами

Кольцо золотое с бриллиантами

Цена за шт. (шт.): 21 952,00 руб.
Кольцо золотое с бриллиантами из розового золота 585 пробы. Кольцо украшено 3 бриллиантами весом 0,36 карат с характеристиками не менее 4/5. Средний вес кольца 4,70 грамма.
:
:







Простейший код скрипта, выполняющего изменение цены будет выглядеть так:

 
<script type="text/javascript">
//@author: http://bigemot.ru
window.addEvent('domready', function() {
  var vmStr= $('vmMainPage').getElement('.productPrice'); 
  var Box=$$('.vmAttribChildDetail select');
  var vmPrice= vmStr.innerHTML; 
  sumBox();
  Box.addEvent('change', function() {
    sumBox();
    });
 
  function strNum(x) {
     var r = ""; 
    for(var n=0; n<x.length; n++) {
      var base= x.charAt(n);
      if (base!=' '&&isNaN(base)==false||base==',')
      r = r + base;
    }
    return parseFloat(r.replace(/,/g,"."));
  }
  function strPrice(x) {
    x = x.toString();
    var y = x.charAt(0);
    for(var n=1; n<x.length; n++) {
      if (Math.ceil((x.length-n)/3) == (x.length-n)/3) y = y + " ";
      y = y + x.charAt(n);
    }
     return y; 
  }
  function adPrice(x) {
    var add=x.options[x.selectedIndex].innerHTML;
    var n=add.lastIndexOf("(");
    var operand=add.slice(n+1,n+2);
    return operand+strNum(add.slice(n));
  }
  function sumBox() {
    var price=strNum(vmPrice);
    for(var n=0; n<Box.length; n++) {
      price=eval(price+adPrice(Box[n]));
    }
    vmStr.innerHTML=vmPrice.replace(strPrice(strNum(vmPrice)), strPrice(price));
  }
});
</script>
 


Теперь когда мы выбираем 16 размер колечка 750 пробы, мы сразу видим изменение цены virtuemart – 27952 рубля.

Конечно, перед применением скрипта в магазине его прийдется доработать. Нужно как минимум учесть целый ряд деталей, в частности, работу при отсутствии добавочной стоимости или при ее присвоении (=20 000,00 руб.), учитывать скидки на товар, сделать его кроссплатформенным, работающем на любом сайте и еще очень много тонкостей. Большинство таких моментов уже было учтено при разработке плагина VM DynamicPrice (plug_VirtueMart_dynamic_price).

Плагин предлагается на коммерческой основе.

Приобрести можно через раздел "Контакты". Стоимость 28 дол. Или скачать за Webmoney:


Скачать плагин VM DynamicPrice-1.1.6 (28 WMZ):




Если вы делали хак как вывести атрибуты в категорию VirtueMart и выводите атрибуты на странице категорий, то плагин будет считать и там. Но если вы при этом используете скидку, то нужно явно указать ее тип в настройках плагина. Скрипт будет считать цены динамически везде, в каждом блоке с товаром, даже в модулях, если они написаны с учетом особенностей VirtueMart.

Для тех, кто использует компонент Attribute Manager, который выводит атрибуты картинками, мы можем предложить адаптированную модификацию плагина.

Какие возможности вы получаете за эту цену?
  • Плагин устанавливается как обычный плагин Джумла. Никаких изменений (хаков) в код VirtueMart не вносится. В настройках можно указать область видимости плагина, т.е. его можно подгружать только на странице с карточкой товара и не грузить скрипт на других страницах,
  • Можно включать динамическое изменение цены при увеличении (уменьшении) количества выбранных товаров, не только при изменении атрибутов,
  • Есть возможность скрыть добавочную стоимость (+2000,00 руб.), то что указывается в скобках, в принципе, становится больше не важным,
  • Если в магазине используется перечеркнутая цена, то она так же меняется,
  • Если товару назначена скидка, то все расчеты выполняются с учетом скидки,
  • VM DynamicPrice работает так же на странице категории, в модулях, считая для каждого товара,
  • Плагин работает корректно, ели для опции товара в атрибуте не указана добавочная цена, а так же, если цена товару присваивается (=20 000,00 руб.),
  • Плагин не вмешивается в работу функций корзины и других функций VirtueMart, работает со всеми версиями магазина и Джумла 1.5. Сделан по принципу "установил и все работает".


Настройки:



Еще статьи:



 

Комментарии 

 
+1 #1 alex21 15.02.2012 15:29
Thank you very much
Цитировать
 
 
0 #2 Игорь 15.02.2012 16:03
А этот плагин будет работать с VirtueMart 2.0.?
Цитировать
 
 
-4 #3 Administrator 17.02.2012 20:54
Цитирую Игорь:
А этот плагин будет работать с VirtueMart 2.0.?
Нет, VirtueMart 1.1.Х только.
Цитировать
 
 
+2 #4 Сергей 18.02.2012 20:09
Всё работает!
Спасибо!

Кстати в VM 2.0 уже встроенная фишка. Но пока там ошибок, как из рога изобилия.
Цитировать
 
 
-1 #5 Дима 29.03.2012 21:06
Такая проблема: у меня товар стоит 2,500 руб. при выборе комплектующей на +100руб. эти 100р. плюсуються к тысячам а не к сотням. тоисть получается в итоге 102,500р. Может в коде что-то нада поправить?
Цитировать
 
 
+3 #6 Administrator 29.03.2012 21:45
Цитирую Дима:
Такая проблема: у меня товар стоит 2,500 руб. при выборе комплектующей на +100руб. эти 100р. плюсуються к тысячам а не к сотням. тоисть получается в итоге 102,500р. Может в коде что-то нада поправить?

Правильно считает. 2,5+100=102,5. Отделяйте копейки запятой, тысячи пробелом.
Цитировать
 
 
-2 #7 Дима 30.03.2012 10:27
Цитата:
Цитирую Administrator:
Цитирую Дима:
Такая проблема: у меня товар стоит 2,500 руб. при выборе комплектующей на +100руб. эти 100р. плюсуються к тысячам а не к сотням. тоисть получается в итоге 102,500р. Может в коде что-то нада поправить?

Правильно считает. 2,5+100=102,5. Отделяйте копейки запятой, тысячи пробелом.


Я конечно очень извиняюсь, возможно я чего-то недопонимаю. Для того что б отделить тысячи пробелом, необходимо в "VirtueMart-Информация о магазине-Стиль отображения валюты-Разделитель тысяч" поставить пробел. Но, при таких условиях скрипт не работает. Скрипт работает только при условии когда в "Разделитель тысяч:" поставить запятую. Но если там стоит запятая то скрипт считает как показано на примере выше. Как быть?


Приобрести у нас готовый плагин.
Цитировать
 
 
+1 #8 Александр 13.04.2012 07:45
А какие гарантии даются? Манибэк имеет место? Просто имею дело с измененным до меня магазином, перепробовал кучу всего, нифига не работает :( с удовольствием заплачу данную сумму за работающий плагин) Изменение цены реализовано стандартными способами Virtuemart (через свойства товара) библиотека какая для скрипта используется?
Цитировать
 
 
+1 #9 Александр 13.04.2012 07:54
Цитата:
Баг в изменении цены на примере - при изменении пробы добавляет 6000 а в скобках написано 2000 - так и задумано?


Это очень странно, что вы это написали. Вы уверены?
Цитировать
 
 
+1 #10 Administrator 13.04.2012 08:05
Цитирую Александр:
А какие гарантии даются? Манибэк имеет место? Просто имею дело с измененным до меня магазином, перепробовал кучу всего, нифига не работает :( с удовольствием заплачу данную сумму за работающий плагин) Изменение цены реализовано стандартными способами Virtuemart (через свойства товара) библиотека какая для скрипта используется?

Мы пока не получали писем с претензиями от покупателей. Если такое все же произойдет, то скрипт будет доработан, деньги не возвращаются. Скрипт работает на mootools, конечно.
Цитировать