Warning: Creating default object from empty value in /home/p358670/www/old.didgo.ru/components/com_sh404sef/shInit.php on line 37
Изменение цены товара в зависимости от его свойств | Доработка Virtuemart
 


ВНИМАНИЕ!!! ЭТО СТАРАЯ ВЕРСИЯ САЙТА.

ДЛЯ ПОЛУЧЕНИЯ АКТУАЛЬНОЙ ИНФОРМАЦИИ

ПЕРЕЙДИТЕ НА WWW.DIDGO.RU




Опубликовано в: Доработка Virtuemart
07 мая 2011


Изменение цены товара в зависимости от его свойств

Данная модификация была разработана мной для одного из сайтов. Довольно часто возникает необходимость использовать свойства товара. Например мы продаём автомобиль Opel, который стоит 50000 евро. Такой же автомобиль красного цвета стоит 60000 евро, к примеру. Когда клиент выбирает из списка свойств нужный ему товар или опцию, то на странице он видит не начальную стоимость товара, а стоимость с учётом его опции.

Но, расскажу более подробно...

Когда мы вносим информацию о товаре, мы можем назначить для него определённые свойства. Рассмотрим на примере "чистого" Virtuemart с установленными демоданными.

У нас есть товар, который называется "Hammer", на самом деле - это молоток :)

Перейдём во вкладку "Статус товара" и назначим ему дополнительные свойства. Я, например, задал размеры - простой, большой, очень большой и наигромаднейший. Для простого молотка стоимость равна стоимости товара по умолчанию. Большой молоток будет стоить 10 зелёных рублей, очень большой - 15 и наигромаднейший - 20 зелёных рубликов. Почему в долларах? Лень было менять настройки Virta :)

Изменение цены товара - Virtuemart

Нажимаем кнопку применить и видим, что на странице товара появилась возможность выбрать свойства товара. Например выберем большой молоток. Мы увидим, что в выпадающем списке указана его цена ($10.98), но стоимость товара на странице осталась неизменной.

Изменение цены товара - Virtuemart

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

Скачками кинулся рыть интернет и нифига не нашёл. Готовых решений нет. У буржуев есть вариант, но стоит 25 баксов. В силу своего патриотизма и жадности этот вариант был отброшен сразу. У украинского разработчика мелькнул вариант коряво оформленного неработающего кода. Ну и на Joomla форуме есть кое-какая инфа, но тоже, по большому счёту состоящая из вопросов и невнятных ответов.

Пришлось "убить" лень и делать самому. Делать будем используя библиотеку jQuery, поэтому для начала её нужно подключить.

 

Шаг 1. Подключение jQuery

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

Открываем файл index.php шаблона. Он находится в папке /templates/имя вашего шаблона/index.php

Перед </head> добавляем код:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js "></script>
<script type="text/javascript">
    jQuery.noConflict();
</script>

На данном этапе мы подключили jQuery, а также добавили noConflict, дабы избежать проблем с mootools Joomla. Кстати, перед подключением jQuery проверьте, не подключена ли это библиотека вами ранее. Возможно у вас стоит какое-либо дополнение/плагин, который уже подключил данную библиотеку.

 

Шаг 2. Правка файла price.tpl.php

Открываем файл /components/com_virtuemart/themes/default/templates/common/price.tpl.php

В районе 23-24 строки ищем код:

<?php
if( !empty( $price_info["product_price_id"] )) { ?>

После него нужно добавить следующий код:

<script type="text/javascript">
 jQuery(function() {
 jQuery('option').click(function() {
 if(jQuery(this).attr("title") != '') {
 jQuery('span.productPrice').replaceWith('<span class="productPrice">' + jQuery(this).attr("title") + '</span>');
 }
 else {
 jQuery('span.productPrice').replaceWith('<span class="productPrice"><?php echo $CURRENCY_DISPLAY->getFullValue($base_price) ?></span>');
 }
 return false;
 });
 });
</script>

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


Шаг 3. Правим файл addtocart_advanced_attribute.tpl.php

Открываем файл /components/com_virtuemart/themes/default/templates/product_details/includes/addtocart_advanced_attribute.tpl.php

В районе 12 строки ищем код

<option value=""><?php echo $options_item['base_value'] ?> (<?php echo $options_item['sign'].$options_item['display_price'] ?>)</option>

Заменяем его на:

<option title="" value=""><?php echo $options_item['base_value'] ?> (<?php echo $options_item['sign'].$options_item['display_price'] ?>)</option>

Тестирование:

Тестирование проводилось на Joomla 1.5.23 и Virtuemart 1.4-1.8. Полёт нормальный.

Недостатки:

При использовании данного метода, можно указывать только явную стоимость в свойствах товара. Т.е. цена должна быть указана так: =10 , нельзя прибавлять или удалять стоимость. Т.е. нельзя в стоимости указать +10 или -10.

Также не происходит перерасчёта стоимости в случае увеличения количества товаров. Данные моменты будут дорабатываться по мере необходимости.

Если у кого-то возникнут идеи, появятся предложения по улучшению или доработке кода - буду только рад. С удовольствием внесу изменения с указанием вашего авторства.

 

Вы можете отблагодарить автора:

WMR - R166832041362

WMZ - Z314865156270

QIWI - 9638061071

Яндекс деньги - 41001228750313


Комментарии 
 
#37 23.05.2013 20:51
Ребят, как заставить заработать в хроме и в ИЕ? Я че то не понял из комментов.
Заранее спасибо
 
 
#36 04.01.2013 11:21
Добрый день.
Мне нравиться компонент virtuemart. Но как всегда есть недочеты.У меня получается так.
Услуга рекламное объявление размером А6 с размещение на 1 неделю на одном стенде . Цена услуги 80 руб.
1 Свойство товара : Формат рекламного объявления А5-=120
А4=200 и такк далее до А0
2. Свойство Срок размещения рекламного объявления
1 неделя цена равна стоимость свойства формат умножить на Свойство Срок размещения.
т.е. Формат А4=200 рублей. Срок размещения месяц то цена будет 200*4=800.
Можно использовать также не только умножения можно использовать %
3 Свойство. Выбор рекламных стендов.
Количество стендов до 150.Они прописаны в БД.
Там указывается его адрес и свободен ли он в данный момент.
Заказчик может разместить свое рекламное объявление на 30-150 стендах . Количество выбранных стендов и является количество заказа.
Сможешь ли ты выполнить это задание. Укажи скок исполнения и стоимость на емайл или скайп leo28031939
Жду
 
 
#35 28.11.2012 10:26
Добрый день данный скрипт почему то работает не корректно. На странице несколько товаров, если у первого товара выбрать свойство которое к примеру 10р то вместо того чтобы цена была 10р цена становиться 1600р, а это цена последнего товара на странице, подскажите что я сделал не такhttp://zlat-parket.ru/View-all-products-in-shop.html
 
 
#34 23.11.2012 18:13
а не подскажите, если клиент вводит размеры сам, как посчитать площадь и в зависимости от этого вывести цену. учитывая то. что количество в штуках должно быть. например клиент вводит длину и ширину 10 и 10. в итоге площадь - 100, цена за нее 5. клиент хочет две штуки таких.
 
 
#33 23.10.2012 02:25
Alex, отпишите мне на

Распишите задачу более детально. Из Вашего объяснения не могу понять зависимость. Либо в скайп - stdidgo
 
 
#32 23.10.2012 01:55
А есть возможность по мимо этого сделать, чтобы при добавлении особенности и цены в свойства, можно было добавлять и количество товара. При этом наличие в статусе товара вычислялось автоматически. Например title - размер: 1. Особенность - 42, цена - 1000 руб., количество - 5; 2. Особенность - 43, цена - 1200 руб, количество - 10 ну и т.д. Общее число в наличии ставится автоматом - 15. И соответственно при покупке товара данное количество должно убавляться, а при отсутствии товара размер в карточке товара не отображаться. Готов оплатить работу. Спасибо!
 
 
#31 07.09.2012 12:40
Валентин, мое мыло malenkovd @ gmail.com пиши, чем смогу помогу
 
 
#30 05.09.2012 17:37
Нет не работает в Хроме как ни курутил, ни первая версия, ни замены кода из коментариев. DimonMa что то предлогал, но что он там имел ввиду под "добавил ID к селекту" совершенно не понятно. Поправьте статью на рабочий вариант для основных браузеров.
 
 
#29 20.08.2012 21:22
А у кого-нибудь получилось вывести цену не динамически изменяющуюся, а в виде:
от 100 - до 200?
 
 
#28 25.07.2012 21:28
Здравствуйте.
подскажите пожалуйста по свойствам товара.(инет-магазин по нижнему белью).
Устанавливаю для товара в "Статусе товара" список свойств. Title: Бежевый Особенность: (тут у меня перечисляются размеры).Далее новое свойство Title: Белый Особенность (также размеры).
Вопрос в следующем: когда я выбираю нужный цвет и размер, кладу его в корзину, в корзине отображается не только выбранный нужный цвет и размер, а все свойства....
Кто сталкивался, подскажите, можно ли как то сделать, чтобы в корзине отображался только выбранный цвет и размер.спасибо заранее.