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

Информирование о новых заказах без перезагрузки страницы


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

Была необходимость реализации информирования в админке о поступлении нового заказа без перезагрузки страницы. Работает естественно с любой страницы в админке. Интервал запросов - 20 сек, можете ставить себе любой!

 

 

Помимо тултипа справа от счетчика новых заказов и всплывающего уведомления в правом верхнем углу, так же присутствует звуковое оповещение и динамическое изменение favicon (аля Gmail счетчик новых писем)

 

1. Качаем архив и все его содержимое кидаем в корень сайта

2. Открываем simpla/design/css/style.css и в самый конец добавляем стили:

.go_new_order {
  display:block;
  padding-top:5px
}
.tooltips {
  position: relative;
}
.tooltips label {
  margin: -23px 0 0 12px;
  position: absolute;
  width:170px;
  color: #FFFFFF;
  background: #000000;
  height: 30px;
  line-height: 30px;
  text-align: center;
  visibility: hidden;
  border-radius: 6px;
}
.tooltips label:after {
  content: '';
  position: absolute;
  top: 50%;
  right: 100%;
  margin-top: -8px;
  width: 0; height: 0;
  border-right: 8px solid #000000;
  border-top: 8px solid transparent;
  border-bottom: 8px solid transparent;
}
#main_menu .tooltips label a{
  text-decoration: underline;
}

 

3. Открываем simpla/design/html/index.tpl и перед закрытием тэга </head> подключаем стили и скрипты:

{* Toastr *}
<link href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" rel="stylesheet" type="text/css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"  type="text/javascript"></script>

{* Buzz *}
<script src="../js/buzz.min.js"></script>
<script src="../js/jsplayer.js?v=1"></script>	

{* Favicon Notify *}
<script type="text/javascript" src="../js/jquery.faviconNotify.js"></script>

3.1. Чуть ниже, находим счетчик новых заказов, он должен выглядеть примерно так:

{if $new_orders_counter}<div class='counter'><span>{$new_orders_counter}</span></div>{/if}

и заменяем это на следующее:

<div class="counter tooltips" id="count_new_orders" style="{if !$new_orders_counter}display:none{/if}">
   <span>{$new_orders_counter}</span> 
   <label>+1 новый заказ</label>
</div>

3.2. Внизу внутри <script> (можно сразу перед $(function() {...}) добавляем:

// Настройки тостера
toastr.options.newestOnTop = true;
toastr.options.closeButton = true;
toastr.options.progressBar = false;
toastr.options.extendedTimeOut = 10000;

// Возвращает время в unixtime
function time() {
	return parseInt(new Date().getTime()/1000)
}

// Примитивно склоняем текст
function sayNewOrder(i) {
	if (i == 1) return 'новый заказ';
	else if (i > 1 && i < 5 ) return 'новых заказа'
	else return 'новых заказов';
}

// Глобальные переменные
var start_time = time(), 				// стартовое время, его будем отправлять
	count_div = $("#count_new_orders"), // объект, где располагается счетчик заказов
	count_time = 0;						// будем запоминать сколько заказов пришло	

// Функция получает кол-во новых заказов от отметки времени	
function getNewOrdersCount()  
{  		
	$.ajax({
		type: 'POST',
		url: 'ajax/get_new_orders_count.php',
		data: {'utime': start_time},
		success: function(data){
			// Отладка
			// console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time);			

			// Если ничего не вернулось, прекращаем
			if (!data)
				return false;

			// Если вернулись новые заказы, показываем счетчик и пишем туда значение
			if (data.count_new > 0) {
				count_div.show().find("span").html(data.count_new);
				$.faviconNotify('design/images/favicon.ico', data.count_new, 'br');
			} else {
				count_div.hide(); // ...иначе скрываем счетчик
				$.faviconNotify('design/images/favicon.ico');
			}			

			// Если есть новые заказы от момента времени
			if (data.count_time > 0) {
				// ...и их кол-во отличается от предыдущего значения, показываем тостер
				if (data.count_time != count_time) {
					toastr.info('<a href="index.php?module=OrdersAdmin&status=0" class="go_new_order">Перейти в Новые заказы? </a>', 'Еще '+data.count_time+' '+sayNewOrder(data.count_time)+'!');
					$.jsPlayer.play("notice");
				}	
				// Формируем тултип и делаем его видимым
				count_div.find("label").html('+'+data.count_time+' '+sayNewOrder(data.count_time)+', <a href="index.php?module=OrdersAdmin&status=0">показать</a>!'); // ищем в счетчике метку тултипа и указываем ей текст
				count_div.find("label").css("visibility","visible");	 // показываем метку тултипа				
			} else {
				// Если нет новых заказов с момента времени, прячем толтип
				count_div.find("label").css("visibility","hidden");
			}			

			// Запоминаем текущее кол-во новых заказов с момента времени
			count_time = data.count_time;
		},
		dataType: 'json'
	});
}  

$(document).ready(function(){  	
	//Устанавливаем счетчик новых заказов в фавикон
	var fav_count = parseInt(count_div.find("span").html());
	if (fav_count)
		$.faviconNotify('design/images/favicon.ico', fav_count, 'br');

	// Как только документ загружен, начинаем по таймеру запрашивать информацию о новых заказах
	setInterval('getNewOrdersCount()',20000);  
});  
Изменено пользователем Gloobus
Ссылка на сообщение
Поделиться на другие сайты

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

Более подробно можете прочитать тут http://forum.simplacms.ru/topic/8606-расширение-chromeopera-информер-о-заказах-simpla2xx/

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

У меня была задача как то разрулить такую ситуацию:

1. Два менеджера, у обоих открыты браузеры с админкой.

3. Далее такие сценарии:

3.1. Пришел новый заказа оба получили уведомление. Менеджер-1 принял новый заказ, Менеджер-2 не шевелился, следовательно спустя интервал запроса у него пропадет счетчик и тултип, т.к. запрос вернет 0 новых 

3.2. Менеджер-1 и -2 видят один новый заказ. Через какое то время приходит еще один новый, они оба видят тултип и уведомление, оба видят счетчик 2 новых, в тултипе видят +1 только что пришедший.

Менеджер-1 принял:

а) принял старый-новый 0_о заказ, Менеджер-2 видит счетчик 1 и в тултипе +1

б) принял новый-новый заказ, Менеджер-2 видит счетчик 1, тултип исчезнет

в) принял все заказы, новых нет, Менеджер-2 перестанет видеть и тултип и счетчик у него пропадет

 

Суть в том была, что бы не показывать уведомления о новых заказах, если их уже нет, если их приняли/удалили!

В планах переделать php-скрипт возвращающий ajax-у результат, там сейчас два запроса: сколько всего новых и сколько новых начиная от момента времени (момент времени передает скрипту js - это когда браузером загружена страница). Хочу сделать 1 запрос и получать просто перечень новых заказов, а уже средствами php считать их. Кроме того буду данные этих заказов, которые возможно будет пустить в дело!

Но пока так, на быструю руку под текущую необходимость :)

 

КСТАТИ! По хорошему, надо бы еще тот JS код из пункта 3.2 обернуть в:

{if in_array('orders', $manager->permissions)}
 /* JS код */
{/if} 

Что бы он отображался тем пользователям, у кого нет доступа к заказам (у меня такого случая быть не может). 

И не забываем про {literal}

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

Поправьте ссылку на скачивание архива, не качает.

 

Ссылку поправил, видать что-то задел когда редактировал пост

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

Так, ну все вроде сделал по описанию, но вот что то не вижу оповещений я...

Для начала раскоментируйте строку с отладкой:

 

console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time);

 

и смотрите в консоле браузера что происходит... так же на время отладки можн поставить интервал запросов почаще, например 5 секунд (5000).

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

Для начала раскоментируйте строку с отладкой:

 

console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time);

 

и смотрите в консоле браузера что происходит... так же на время отладки можн поставить интервал запросов почаще, например 5 секунд (5000).

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

 

консоль выдает:

 

Ожидалось «none», «URL» или функция фильтра, но найдено «Alpha(».  Ошибка при парсинге значения «filter».  Потерянное объявление.

 

Ожидалось объявление, но найдено «/».  Пропущено до следующего объявления. style.css:1174:1

Ожидалось «:», но найдено «#\30 00000».  Потерянное объявление. style.css:1175:7

Неизвестное свойство «zoom».  Потерянное объявление.

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

Это все ошибки ваших стилей, никакого отношения к консоли не имеют!

500 это очень мало, это запрос каждые полсекунды. Я говорил про 5000.

Могу посмотреть что у вас не так, если дадите доступ в админку к заказам.

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

Разобрались с ТС в чем было дело, я просто не туда вставил скрипт из пункта 3.2.

 

В общем данную разработку лично я, считаю очень нужной и полезной. Я думаю, что многие ее поставят себе :-)

 

Еще раз спасибо!!!

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

Помогите, сделал все по описанию. Без каких либо изменений... ни звукового оповещения ни автообновления. Simpla 2.3.6

И это тоже сделал...

 

 

Для начала раскоментируйте строку с отладкой:

console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time);

и смотрите в консоле браузера что происходит... так же на время отладки можн поставить интервал запросов почаще, например 5 секунд (5000).

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

У кого не выходит, проверьте пункт 3!

Подключать JS скрипты нужно ПОСЛЕ подключения самого jQuery, т.к. они зависимы от него.

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

У кого не выходит, проверьте пункт 3!

Подключать JS скрипты нужно ПОСЛЕ подключения самого jQuery, т.к. они зависимы от него.

 
Посмотрите пожалуйста, вроде все перепроверил, но не работает.
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<title>{$meta_title}</title>
<link rel="icon" href="design/images/favicon.ico" type="image/x-icon">
<link href="design/css/style.css" rel="stylesheet" type="text/css" />


<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery.form.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="design/js/jquery/jquery-ui.css" media="screen" />


<meta name="viewport" content="width=1024">


{* Toastr *}
<link href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" rel="stylesheet" type="text/css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"  type="text/javascript"></script>


{* Buzz *}
<script src="../js/buzz.min.js"></script>
<script src="../js/jsplayer.js?v=1"></script>    


{* Favicon Notify *}
<script type="text/javascript" src="../js/jquery.faviconNotify.js"></script>


</head>
<body>


<a href='{$config->root_url}' class='admin_bookmark'></a>


<!-- Вся страница --> 
<div id="main">
    <!-- Главное меню -->
    <ul id="main_menu">
        
    {if in_array('products', $manager->permissions)}
        <li><a href="index.php?module=ProductsAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
    {elseif in_array('categories', $manager->permissions)}
        <li><a href="index.php?module=CategoriesAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
    {elseif in_array('brands', $manager->permissions)}
        <li><a href="index.php?module=BrandsAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
    {elseif in_array('features', $manager->permissions)}
        <li><a href="index.php?module=FeaturesAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
    {/if}
        
    {if in_array('orders', $manager->permissions)}
        <li>
            <a href="index.php?module=OrdersAdmin"><img src="design/images/menu/orders.png"><b>Заказы</b></a>
            <div class="counter tooltips" id="count_new_orders" style="{if !$new_orders_counter}display:none{/if}">
   <span>{$new_orders_counter}</span> 
   <label>+1 новый заказ</label>
</div>
        </li>
    {elseif in_array('labels', $manager->permissions)}
        <li><a href="index.php?module=OrdersLabelsAdmin"><img src="design/images/menu/orders.png"><b>Заказы</b></a></li>
    {/if}
        
    {if in_array('users', $manager->permissions)}
        <li><a href="index.php?module=UsersAdmin"><img src="design/images/menu/users.png"><b>Покупатели</b></a></li>
    {elseif in_array('groups', $manager->permissions)}
        <li><a href="index.php?module=GroupsAdmin"><img src="design/images/menu/users.png"><b>Покупатели</b></a></li>
    {elseif in_array('coupons', $manager->permissions)}
        <li><a href="index.php?module=CouponsAdmin"><img src="design/images/menu/users.png"><b>Покупатели</b></a></li>
    {/if}
        
    {if in_array('pages', $manager->permissions)}
        <li><a href="index.php?module=PagesAdmin"><img src="design/images/menu/pages.png"><b>Страницы</b></a></li>
    {/if}
        
    {if in_array('blog', $manager->permissions)}
        <li><a href="index.php?module=BlogAdmin"><img src="design/images/menu/blog.png"><b>Блог</b></a></li>
    {/if}
        
    {if in_array('comments', $manager->permissions)}
        <li><a href="index.php?module=CommentsAdmin"><img src="design/images/menu/comments.png"><b>Комментарии</b></a>
        {if $new_comments_counter}<div class='counter'><span>{$new_comments_counter}</span></div>{/if}</li>
    {elseif in_array('feedbacks', $manager->permissions)}
        <li><a href="index.php?module=FeedbacksAdmin"><img src="design/images/menu/comments.png"><b>Комментарии</b></a>
    {/if}
        
    {if in_array('import', $manager->permissions)}
        <li><a href="index.php?module=ImportAdmin"><img src="design/images/menu/wizards.png"><b>Автоматизация</b></a></li>
    {elseif in_array('export', $manager->permissions)}
        <li><a href="index.php?module=ExportAdmin"><img src="design/images/menu/wizards.png"><b>Автоматизация</b></a></li>
    {elseif in_array('backup', $manager->permissions)}
        <li><a href="index.php?module=BackupAdmin"><img src="design/images/menu/wizards.png"><b>Автоматизация</b></a></li>
    {/if}    
        
    {if in_array('stats', $manager->permissions)}
        <li><a href="index.php?module=StatsAdmin"><img src="design/images/menu/statistics.png"><b>Статистика</b></a></li>
    {/if}
    
    {if in_array('design', $manager->permissions)}
        <li><a href="index.php?module=ThemeAdmin"><img src="design/images/menu/design.png"><b>Дизайн</b></a></li>
    {/if}
    
    {if in_array('settings', $manager->permissions)}
        <li><a href="index.php?module=SettingsAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
    {elseif in_array('delivery', $manager->permissions)}
        <li><a href="index.php?module=DeliveriesAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
    {elseif in_array('payment', $manager->permissions)}
        <li><a href="index.php?module=PaymentMethodsAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
    {elseif in_array('managers', $manager->permissions)}
        <li><a href="index.php?module=ManagersAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
    {/if}
        
    </ul>
    <!-- Главное меню (The End)-->
    
    
    <!-- Таб меню -->
    <ul id="tab_menu">
        {$smarty.capture.tabs}
    </ul>
    <!-- Таб меню (The End)-->
    


    
    <!-- Основная часть страницы -->
    <div id="middle">
        {$content}
    </div>
    <!-- Основная часть страницы (The End) --> 
    
    <!-- Подвал сайта -->
    <div id="footer">
    © 2014 <a href='http://simplacms.ru'>Simpla {$config->version}</a>
    {if in_array('license', $manager->permissions)}
        {if $license->valid}
        Лицензия действительна {if $license->expiration != '*'}до {$license->expiration}{/if} для домен{$license->domains|count|plural:'а':'ов'} {foreach $license->domains as $d}{$d}{if !$d@last}, {/if}{/foreach}.
        <a href='index.php?module=LicenseAdmin'>Управление лицензией</a>.
        {else}
        Лицензия недействительна. <a href='index.php?module=LicenseAdmin'>Управление лицензией</a>.
        {/if}
    {/if}
    Вы вошли как {$manager->login}.
    <a href='{$config->root_url}?logout' id="logout">Выход</a>
    </div>
    <!-- Подвал сайта (The End)--> 
    
</div>
<!-- Вся страница (The End)--> 


</body>
</html>


{* Интеграция с ПростымиЗвонками *}
{if $settings->pz_server && $settings->pz_phones[$manager->login]}
<script src="design/js/prostiezvonki/prostiezvonki.min.js"></script>
<script>
var pz_type = 'simpla';
var pz_password = '{$settings->pz_password}';
var pz_server = '{$settings->pz_server}';
var pz_phone = '{$settings->pz_phones[$manager->login]}';
{literal}
function NotificationBar(message)
{
    ttop = $('body').height()-110;
    var HTMLmessage = "<div class='notification-message' style='  text-align:center; line-height: 40px;'> " + message + " </div>";
    if ($('#notification-bar').size() == 0)
    {
        $('body').prepend("<div id='notification-bar' style='-moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; display:none;  height: 40px; padding: 20px; background-color: #fff; position: fixed; top:"+ttop+"px; right:30px; z-index: 100; color: #000;border: 1px solid #cccccc;'>" + HTMLmessage + "</div>");
    }
    else
    {
        $('#notification-bar').html(HTMLmessage);
    }
    $('#notification-bar').slideDown();
}


$(window).on("blur focus", function (e) {
    if ($(this).data('prevType') !== e.type) {
        $(this).data('prevType', e.type);


        switch (e.type) {
        case 'focus':
            if (!pz.isConnected()) {
                pz.connect({
                            client_id: pz_password,
                            client_type: pz_type,
                            host: pz_server
                });
            }
            break;
        }
    }
});


$(function() {
    // Простые звонки
    pz.setUserPhone(pz_phone);
    pz.connect({
                client_id: pz_password,
                client_type: pz_type,
                host: pz_server
    });
    pz.onConnect(function () {
        $(".ip_call").addClass('phone');
    });
    pz.onDisconnect(function () {
        $(".ip_call").removeClass('phone');
    });
    
    $(".ip_call").click( function() {
        var phone = $(this).attr('data-phone').trim();
        pz.call(phone);
        return false;
    });


    pz.onEvent(function (event) {
        if (event.isIncoming()) {
            $.ajax({
                type: "GET",
                url: "ajax/search_orders.php",
                data: { keyword: event.from, limit:"1"},
                dataType: 'json'
            }).success(function(data){
                if(event.to == pz_phone)
                if(data.length>0)
                {
                    NotificationBar('<img src="design/images/phone_sound.png" align=absmiddle> Звонит <a href="index.php?module=OrderAdmin&id='+data[0].id+'">'+data[0].name+'</a>');
                }
                else
                {
                    NotificationBar('<img src="design/images/phone_sound.png" align=absmiddle> Звонок с '+event.from+'. <a href="index.php?module=OrderAdmin&phone='+event.from+'">Создать заказ</a>');
                }
            });                 
        }
    });
{/literal}
});
</script>
{/if}


{literal}
<script>
{if in_array('orders', $manager->permissions)}
// Настройки тостера
toastr.options.newestOnTop = true;
toastr.options.closeButton = true;
toastr.options.progressBar = false;
toastr.options.extendedTimeOut = 10000;


// Возвращает время в unixtime
function time() {
    return parseInt(new Date().getTime()/1000)
}


// Примитивно склоняем текст
function sayNewOrder(i) {
    if (i == 1) return 'новый заказ';
    else if (i > 1 && i < 5 ) return 'новых заказа'
    else return 'новых заказов';
}


// Глобальные переменные
var start_time = time(),                 // стартовое время, его будем отправлять
    count_div = $("#count_new_orders"), // объект, где располагается счетчик заказов
    count_time = 0;                        // будем запоминать сколько заказов пришло    


// Функция получает кол-во новых заказов от отметки времени    
function getNewOrdersCount()  
{          
    $.ajax({
        type: 'POST',
        url: 'ajax/get_new_orders_count.php',
        data: {'utime': start_time},
        success: function(data){
            // Отладка
            console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time);            


            // Если ничего не вернулось, прекращаем
            if (!data)
                return false;


            // Если вернулись новые заказы, показываем счетчик и пишем туда значение
            if (data.count_new > 0) {
                count_div.show().find("span").html(data.count_new);
                $.faviconNotify('design/images/favicon.ico', data.count_new, 'br');
            } else {
                count_div.hide(); // ...иначе скрываем счетчик
                $.faviconNotify('design/images/favicon.ico');
            }            


            // Если есть новые заказы от момента времени
            if (data.count_time > 0) {
                // ...и их кол-во отличается от предыдущего значения, показываем тостер
                if (data.count_time != count_time) {
                    toastr.info('<a href="index.php?module=OrdersAdmin&status=0" class="go_new_order">Перейти в Новые заказы? </a>', 'Еще '+data.count_time+' '+sayNewOrder(data.count_time)+'!');
                    $.jsPlayer.play("notice");
                }    
                // Формируем тултип и делаем его видимым
                count_div.find("label").html('+'+data.count_time+' '+sayNewOrder(data.count_time)+', <a href="index.php?module=OrdersAdmin&status=0">показать</a>!'); // ищем в счетчике метку тултипа и указываем ей текст
                count_div.find("label").css("visibility","visible");     // показываем метку тултипа                
            } else {
                // Если нет новых заказов с момента времени, прячем толтип
                count_div.find("label").css("visibility","hidden");
            }            


            // Запоминаем текущее кол-во новых заказов с момента времени
            count_time = data.count_time;
        },
        dataType: 'json'
    });
}  


$(document).ready(function(){      
    //Устанавливаем счетчик новых заказов в фавикон
    var fav_count = parseInt(count_div.find("span").html());
    if (fav_count)
        $.faviconNotify('design/images/favicon.ico', fav_count, 'br');


    // Как только документ загружен, начинаем по таймеру запрашивать информацию о новых заказах
    setInterval('getNewOrdersCount()',20000);  
});  
{/if} 
$(function() {


    if($.browser.opera)
        $("#logout").hide();
    
    $("#logout").click( function(event) {
        event.preventDefault();


        if($.browser.msie)
        {
            try{document.execCommand("ClearAuthenticationCache");}
            catch (exception){} 
            window.location.href='/';
        }
        else
        {
            $.ajax({
                url: $(this).attr('href'),
                username: '',
                password: '',
                complete: function () {
                    window.location.href='/';
                },
                beforeSend : function(req) {
                    req.setRequestHeader('Authorization', 'Basic');
                }
            });
        }
    });
{/literal}


});
</script>
 

 

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

В {literal}...{/literal} должен быть обернут JS-код

Внутри {literal}...{/literal} не должно быть кода шаблонизатора Smarty

У вас там с этим каша.

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

В {literal}...{/literal} должен быть обернут JS-код

Внутри {literal}...{/literal} не должно быть кода шаблонизатора Smarty

У вас там с этим каша.

Можно поправить?

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

Похоже, дело во фрагменте

{/literal}
});
</script>
{/if}

и его надо поменять на

});
{/literal}
</script>
{/if}

А во втором применении {literal}...{/literal} еще хуже...

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

Непонятно использование условия

if (data.count_time != count_time) {
.......
}   

Допустим, запросы делаются через 1 минуту. Очередной запрос сделан в 12 ч 23 мин. Тогда
1. data.count_time - число новых заказов, пришедших с момента последней проверки, то есть между 12.22 и 12.23, и остававшихся новыми в 12.23.
2. count_time - аналогично, число заказов, пришедших  между 12.21 и 12.22, и числившихся новыми в 12.22.
По-моему, строить функционал на сравнении этих значений совершенно бессмысленно, даже если работает один менеджер. А если два, то и подавно...

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

Kors, это нужно для того, что бы показывать уведомление и тиликать звуком только тогда, когда кол-во их изменилось. Не более того.

И это как раз работает на при двух и более менеджерах!

 

Смотри, смысл простой:

1. В 0:01 пришел заказ, +1 на счетчике, все возможные уведомления, в count_time = 1

2. В 0:02 еще заказ, теперь их 2, 2 != count_time следовательно все возможные уведомления и теперь count_time = 2

3. Между 0:02 и 0:03 пришел еще 1 заказ и 1 заказ принял менеджер2, следовательно мы теперь получили что у нас 2 новых заказа, 2 = count_time, а мы уже менеджеру1 говорили что два новых заказа, зачем это делать опять? Следовательно count_time = 2 и нет уведомлений.

4. Менеджер2 принял еще один заказ, их кол-во изменилось, теперь новых заказов 1, а это не рано count_time и следовательно уведомления будут... ммм, пока сам пытался объяснить, понял что ты прав, наверно надо сделать if (data.count_time > count_time), то есть уведомления когда с очередным запросом вернулось больше, чем в прошлый раз. :)

 

Karen,

все просто, {if ....} {/if} это вставка шаблонизатора

в JS коде тоже присутствуют подобные скобки {}

что бы шаблонизатор не воспринимал некий JS код как свой, его нужно оборачивать в {literal}...{/literal} 

если у тебя есть кусок:

<script>

{if in_array('orders', $manager->permissions)}

   ... тут какой то JS-код

{/if} 

<script>

то его правильно оформлять так:

<script>

{if in_array('orders', $manager->permissions)}

   {literal}
   ... тут какой то JS-код
   {/literal}

{/if} 

<script>

или так:

<script>

{literal}   
... тут какой то JS-код
{/literal}   

{if in_array('orders', $manager->permissions)}

   {literal}
   ... тут какой то JS-код
   {/literal}

{/if} 

{literal}   
... тут какой то JS-код
{/literal}   

<script>

Суть проста:

1. Перед началом JS-кода надо открыть {literal}

2. Перед началом синтаксиса шаблонизатора надо закрыть {/literal}

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

... ммм, пока сам пытался объяснить, понял что ты прав, наверно надо сделать if (data.count_time > count_time), то есть уведомления когда с очередным запросом вернулось больше, чем в прошлый раз. :)

 

Так тоже не пойдет, потому что условия

1. Пришли новые заказы

2. (data.count_time > count_time)

совершенно не одно и то же. Более того, между ними абсолютно никакой связи нет...

Также как и и в текущей ситуации условие

3. (data.count_time != count_time)

не имеет НИКАКОЙ СВЯЗИ с (1).

 

Принципиально неправильно вы почему-то зациклились на КОЛИЧЕСТВЕ заказов. А надо бы честно отрабатывать все данные, тем более, что это совсем несложно. Только количество не отражает все богатство возможных ситуаций...

 

Да и сама постановка задачи несколько странная и очень заумная.

Зачем вообще Вы придумали работу с count_time? Чтобы пикнуть звуком? А почему тогда только 1 раз? Если пикнули, а ни один менеджер не среагировал, то какой смысл в разработке? Надо бы пикать и повторно, если не каждый раз, то хотя бы через несколько интервалов...

А в текущем виде это работает, когда не появляются ошибки, несколько неэффективно...

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

Ну не знаю, я делал под требования. Сказали так :)

Тут просто поделился, я думаю каждый сможет подправить под себя кто хоть немного js

 

Просто дилинькать надо было только тогда, когда между интервалом обновления число новых заказов растет, увеличивается. 

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

Kors, это нужно для того, что бы показывать уведомление и тиликать звуком только тогда, когда кол-во их изменилось. Не более того.

И это как раз работает на при двух и более менеджерах!

 

Смотри, смысл простой:

1. В 0:01 пришел заказ, +1 на счетчике, все возможные уведомления, в count_time = 1

2. В 0:02 еще заказ, теперь их 2, 2 != count_time следовательно все возможные уведомления и теперь count_time = 2

3. Между 0:02 и 0:03 пришел еще 1 заказ и 1 заказ принял менеджер2, следовательно мы теперь получили что у нас 2 новых заказа, 2 = count_time, а мы уже менеджеру1 говорили что два новых заказа, зачем это делать опять? Следовательно count_time = 2 и нет уведомлений.

4. Менеджер2 принял еще один заказ, их кол-во изменилось, теперь новых заказов 1, а это не рано count_time и следовательно уведомления будут... ммм, пока сам пытался объяснить, понял что ты прав, наверно надо сделать if (data.count_time > count_time), то есть уведомления когда с очередным запросом вернулось больше, чем в прошлый раз. :)

 

Karen,

все просто, {if ....} {/if} это вставка шаблонизатора

в JS коде тоже присутствуют подобные скобки {}

что бы шаблонизатор не воспринимал некий JS код как свой, его нужно оборачивать в {literal}...{/literal} 

если у тебя есть кусок:

<script>

{if in_array('orders', $manager->permissions)}

   ... тут какой то JS-код

{/if} 

<script>

то его правильно оформлять так:

<script>

{if in_array('orders', $manager->permissions)}

   {literal}
   ... тут какой то JS-код
   {/literal}

{/if} 

<script>

или так:

<script>

{literal}   
... тут какой то JS-код
{/literal}   

{if in_array('orders', $manager->permissions)}

   {literal}
   ... тут какой то JS-код
   {/literal}

{/if} 

{literal}   
... тут какой то JS-код
{/literal}   

<script>

Суть проста:

1. Перед началом JS-кода надо открыть {literal}

2. Перед началом синтаксиса шаблонизатора надо закрыть {/literal}

Оборачиваю и админка выдает 

Ошибка сервера 500

Сейчас нормально, но без изменений 

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

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

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

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

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

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

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

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

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

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