Накопительная скидка для постоянных клиентов в Virtuemart 2

скидки в virtuemart 2

Бывает такая необходимость — нужно сделать накопительную скидку. Например, постоянный клиент сделал несколько покупок на общую сумму 1000 долларов и ему необходимо присвоить постоянную скидку в 5%. Если он сделает еще несколько покупок и его общая сумма превысит 5000 долларов, то скидка станет 10%. + после первой покупки всем присваивается 3% скидки. Ну и так далее. К сожалению, в Virtuemart 2 нет возможности реализовать такую систему скидок, а она бывает очень необходима. Поэтому ниже я приведу небольшой хак, решающий эту проблему. Данный способ работает на Joomla 2.5 и Virtuemart 2.0.16c.

Итак, нам будут необходимы два файла:

  1. components\com_virtuemart\views\cart\tmpl\default_price.php
  2. 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&#91;'final_sum'&#93; = $final; ?>

Это позволит передать переменную в файл orders.php, чтобы при отправке письма покупателю в нем отображалась правильная цена.

В файле orders.php примерно на 550 строке найдите такую запись строку

$_orderData->order_total = $_prices['BillTotal'];

и поменяйте ее на следующую

$_orderData->order_total =  $_SESSION['final_sum'];

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

Добавить комментарий

Ваш e-mail не будет опубликован.