Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

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

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

Спасибо.

Ссылка на сообщение
Поделиться на другие сайты

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

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

Изменено пользователем koteyka
Ссылка на сообщение
Поделиться на другие сайты

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

А дальше, отнимаете от 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)
Ссылка на сообщение
Поделиться на другие сайты

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

 

Плачу :D

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

по данному коду клиент может перескочить какой-то из пунктов в сумме

к примеру изначально у него 3%, чтобы получить 5% надо скупиться на 500 долларов, а третий 1000 долларов, если он скупится свыше 1000 сразу он попадет в 3ю а не вначале во вторую

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...