Перейти к содержимому


Фото
- - - - -

Программа лояльности


  • Чтобы отвечать, сперва войдите на форум
5 ответов в теме

#1 Gruzin

Gruzin
  • Пользователь
  • 237 сообщений
  • Верстка, Пользователь
  • Версия CMS:2.x
  • Откуда:Минск

Опубликовано 03.09.2017 - 22:21

Всем привет, в магазине работает программа лояльности, при регистрации покупатель сразу попадает в группу у которой скидка 3%, по достижении суммы в 500 у.е пользователь автоматом переходит в другую группу где размер скидки больше, как сообщить покупателю в личном кабинете на какую сумму ещё надо купить товаров что бы перейти в следующую группу?

Надеюсь объяснил доходчиво.

Спасибо.



#2 koteyka

koteyka

    Фрилансер

  • Пользователь
  • 1 341 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Днепропетровск

Опубликовано 03.09.2017 - 22:37

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

А дальше, отнимаете от 500 у.е. накопленную сумму и выводите разницу.


Изменено: koteyka, 03.09.2017 - 22:38


#3 Gruzin

Gruzin
  • Пользователь
  • 237 сообщений
  • Верстка, Пользователь
  • Версия CMS:2.x
  • Откуда:Минск

Опубликовано 03.09.2017 - 22:42

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

А дальше, отнимаете от 500 у.е. накопленную сумму и выводите разницу.

 
По этой инструкции делал автоматическое изменение группы, может это поможет
 
simpla/SettingsAdmin.php
 
  после
 
 
            
// Простые звонки
 
            
$this->settings->pz_server = $this->request->post('pz_server');
            
$this->settings->pz_password = $this->request->post('pz_password');
            
$this->settings->pz_phones = $this->request->post('pz_phones');
 
            
  
вставить
            
            
            
$this->settings->group0_id = $this->request->post('group0_id');
            
$this->settings->amount_group_list = $this->request->post('amount_group_list');
            
$this->settings->amount_order_statuses = $this->request->post('amount_order_statuses');
 
 
 
 
2.  simpla/design/html/settings.tpl
 
 
  
после
 
        
<!-- Параметры -->
 
        
<div class="block layer">
            
<h2>Интеграция с <a href="http://prostiezvonki.ru">простыми звонками</a></h2>
            
<ul>
                
<li><label class=property>Сервер</label><input name="pz_server" class="simpla_inp" type="text" value="{$settings->pz_server|escape}" /></li>
                
<li><label class=property>Пароль</label><input name="pz_password" class="simpla_inp" type="text" value="{$settings->pz_password|escape}" /></li>
                
<li><label class=property>Телефоны менеджеров:</label></li>
                
{foreach $managers as $manager}
                
<li><label class=property>{$manager->login}</label><input name="pz_phones[{$manager->login}]" class="simpla_inp" type="text" value="{$settings->pz_phones[$manager->login]|escape}" /></li>
                
{/foreach}
            
</ul>
        
</div>
 
        
<!-- Параметры (The End)-->
 
            
  
вставить
            
        
        
<!-- Параметры -->
        
<div class="block layer">
            
<h2>Настройки покупателей и групп</a></h2>
            
<ul>
                
<li><label class=property>ID группы для помещения при регистрации</label><input name="group0_id" class="simpla_inp" type="text" value="{$settings->group0_id|escape}" /></li>
                
<li><label class=property>Набор пороговых значений и ID соответствующих групп (строка вида "2000;3;5000;5;10000;4")</label><input name="amount_group_list" class="simpla_inp" type="text" value="{$settings->amount_group_list|escape}" /></li>
                
<li><label class=property>Cтатусы заказов для учета достигнутой суммы (в виде "1,2") </label><input name="amount_order_statuses" class="simpla_inp" type="text" value="{$settings->amount_order_statuses|escape}" /></li>
            
</ul>
        
</div>
 
        
<!-- Параметры (The End)-->
 
 
 
 
 
 
3.  api/Users.php
 
  вставить в конце (перед финальной скобкой "}")
 
 
    
function check_user_group($user_id)
{
        
$sts=$this->settings->amount_order_statuses;
        
$sts=preg_split('@[^0-9]+@', trim($sts));
        
$sts=join(',', $sts);
        if($sts)
            
$sts=" AND  o.status IN ($sts)";
 
 
        
$query = $this->db->placehold("SELECT sum(p.price*p.amount) tot FROM __purchases p, __orders o where p.order_id=o.id AND o.user_id=? $sts ", $user_id);
        
$this->db->query($query);
        
$tot = $this->db->result('tot');
 
        
if(empty($tot))
            
return;
 
        
$p=$this->settings->amount_group_list;
        
$p=preg_split('@[^0-9]+@', trim($p));
        
        
$gr=-1;
        
$sm=0;
        
for($i=0; $i<count($p); $i+=2){
            
if($sm<$p[$i] && $p[$i]<=$tot){
                
$sm=$p[$i];
                
$gr=$p[$i+1];
            
}
        
};
 
        
if($gr!=-1)
            
$this->update_user($user_id, array('group_id' => $gr));
        
    
}
    
 
 
 
4. Если хотите, чтобы при вычислении достигнутых использовались только ОПЛАЧЕННЫЕ заказы, то в п.3 надо строку
 
 
        
$query = $this->db->placehold("SELECT sum(p.price*p.amount) tot FROM __purchases p, __orders o where p.order_id=o.id AND o.user_id=? $sts ", $user_id);
 
 
 
заменить на
 
        
$query = $this->db->placehold("SELECT sum(p.price*p.amount) tot FROM __purchases p, __orders o where p.order_id=o.id  AND o.paid AND o.user_id=? $sts ", $user_id);
            
 
 
 
 
5.  view/CartView.php
  после
 
            
// Очищаем корзину (сессию)
 
            
$this->cart->empty_cart();
 
 
  
вставить
            
            
if($order->user_id)
                
$this->users->check_user_group($order->user_id);
 
            
 
 
 
 
 
 
6.  simpla/OrderAdmin.php
 
 
6.1
  вставить
            
            
if($order->user_id)
                
$this->users->check_user_group($order->user_id);
 
            
  
перед
 
                
// Отправляем письмо пользователю
 
                
if($this->request->post('notify_user'))
                    
$this->notify->email_order_user($order->id);
 
 
 
6.2
  вставить
            
            
if($order->user_id)
                
$this->users->check_user_group($order->user_id);
 
            
  
перед
 
                    
header('Location: '.$this->request->get('return'));
 
 
 
 
 
7.  view/RegistrView.php
 
  
вместо
 
            
elseif($user_id = $this->users->add_user(array('name'=>$name, 'email'=>$email, 'password'=>$password, 'enabled'=>$default_status, 'last_ip'=>$_SERVER['REMOTE_ADDR'])))
 
 
  
вставить
            
            
elseif($user_id = $this->users->add_user(array('name'=>$name, 'email'=>$email, 'password'=>$password, 'enabled'=>$default_status, 'last_ip'=>$_SERVER['REMOTE_ADDR'], 'group_id'=>$this->settings->group0_id)


#4 Noxter

Noxter
  • Фрилансер
  • 5 764 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 04.09.2017 - 00:25

Плачу :D

#5 Gruzin

Gruzin
  • Пользователь
  • 237 сообщений
  • Верстка, Пользователь
  • Версия CMS:2.x
  • Откуда:Минск

Опубликовано 04.09.2017 - 07:33

Плачу :D

Что на этот раз не так?



#6 loxter

loxter
  • Забаненый
  • 118 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 04.09.2017 - 09:37

Инструкция выглядит довольно аккуратной. Если еще и работает, то лучшего и желать нечего.

 

Плачу :D

 

Фраза двусмысленная - то ли уважаемый Noxter льет слезы, то ли выписывает денежный перевод автору в знак одобрения представленного решения...
 






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых