
Накопительная скидка для постоянных клиентов в Virtuemart 2
Бывает такая необходимость – нужно сделать накопительную скидку. Например, постоянный клиент сделал несколько покупок на общую сумму 1000 долларов и ему необходимо присвоить постоянную скидку в 5%. Если он сделает еще несколько покупок и его общая сумма превысит 5000 долларов, то скидка станет 10%. + после первой покупки всем присваивается 3% скидки. Ну и так далее. К сожалению, в Virtuemart 2 нет возможности реализовать такую систему скидок, а она бывает очень необходима. Поэтому ниже я приведу небольшой хак, решающий эту проблему. Данный способ работает на Joomla 2.5 и Virtuemart 2.0.16c.
Итак, нам будут необходимы два файла:
- components\com_virtuemart\views\cart\tmpl\default_price.php
- administrator\components\com_virtuemart\models\orders.php
Сначала разберемся с файлом default_price.php.
Найдите то место, где выводится итоговая цена и перед этой строкой таблицы вставьте следующий код;
<?php $user = &JFactory::getUser(); $id = $user->id;?>// определяем активного покупателя $db =& JFactory::getDBO();//подключаемся к базе данных $query = "SELECT SUM(order_total) AS ototal FROM #__virtuemart_orders WHERE order_status='S' AND virtuemart_user_id=$id";// суммируем все покупки, но только те, которые уже оплачены $db->setQuery($query); $o_total=$db->loadAssocList(); $summa=$o_total[0]['ototal'];//общая сумма всех оплаченных покупок ?>
А в строке таблицы, где выводится итоговая цена замените весь код на следующий (в моем случае вышло так)
Итого: <?php $user = &JFactory::getUser(); $id = $user->id ?>; $this->currencyDisplay->createPriceDiv ('billTotal', '', $cena=$this->cart->pricesUnformatted['billTotal'], FALSE); if ($summa>1 and $summa<1000){$skidka=0.03*$cena;} if ($summa>10000 and $summa<5000){$skidka=0.05*$cena; } if ($summa>50000 and $summa<10000){$skidka=0.1*$cena;} if ($summa>10000){$skidka=0.2*$cena;} echo $this->currencyDisplay->createPriceDiv ('billTotal', '', $final=$cena-$skidka, FALSE);//конечная цена
В конце файла добавьте
<?php session_start(); $_SESSION['final_sum'] = $final; ?>
Это позволит передать переменную в файл orders.php, чтобы при отправке письма покупателю в нем отображалась правильная цена.
В файле orders.php примерно на 550 строке найдите такую запись строку
$_orderData->order_total = $_prices['BillTotal'];
и поменяйте ее на следующую
$_orderData->order_total = $_SESSION['final_sum'];
Вот и все, возможно код не очень оптимизирован, но я только начинаю освоение php поэтому не судите строго. Если возникнут какие-нибудь вопросы – оставляйте комментарии.
Поделиться "Накопительная скидка для постоянных клиентов в Virtuemart 2"