Gloobus Posted September 29, 2015 Report Share Posted September 29, 2015 (edited) Была необходимость реализации информирования в админке о поступлении нового заказа без перезагрузки страницы. Работает естественно с любой страницы в админке. Интервал запросов - 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); }); Edited October 13, 2015 by Gloobus Quote Link to post Share on other sites
Noxter Posted September 29, 2015 Report Share Posted September 29, 2015 Нечто подобное делал мой друг, правда это расширение для браузере но по сути работает так же. Более подробно можете прочитать тут http://forum.simplacms.ru/topic/8606-расширение-chromeopera-информер-о-заказах-simpla2xx/ Quote Link to post Share on other sites
Gloobus Posted September 29, 2015 Author Report Share Posted September 29, 2015 (edited) У меня была задача как то разрулить такую ситуацию: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} Edited September 29, 2015 by Gloobus Quote Link to post Share on other sites
keks Posted September 30, 2015 Report Share Posted September 30, 2015 Поправьте ссылку на скачивание архива, не качает. Quote Link to post Share on other sites
Gloobus Posted September 30, 2015 Author Report Share Posted September 30, 2015 Поправьте ссылку на скачивание архива, не качает. Ссылку поправил, видать что-то задел когда редактировал пост Quote Link to post Share on other sites
keks Posted October 2, 2015 Report Share Posted October 2, 2015 Так, ну все вроде сделал по описанию, но вот что то не вижу оповещений я... Quote Link to post Share on other sites
Gloobus Posted October 2, 2015 Author Report Share Posted October 2, 2015 Так, ну все вроде сделал по описанию, но вот что то не вижу оповещений я...Для начала раскоментируйте строку с отладкой: console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time); и смотрите в консоле браузера что происходит... так же на время отладки можн поставить интервал запросов почаще, например 5 секунд (5000). Quote Link to post Share on other sites
keks Posted October 2, 2015 Report Share Posted October 2, 2015 (edited) Для начала раскоментируйте строку с отладкой: 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». Потерянное объявление. Edited October 2, 2015 by keks Quote Link to post Share on other sites
Gloobus Posted October 2, 2015 Author Report Share Posted October 2, 2015 Это все ошибки ваших стилей, никакого отношения к консоли не имеют!500 это очень мало, это запрос каждые полсекунды. Я говорил про 5000.Могу посмотреть что у вас не так, если дадите доступ в админку к заказам. Quote Link to post Share on other sites
keks Posted October 2, 2015 Report Share Posted October 2, 2015 Разобрались с ТС в чем было дело, я просто не туда вставил скрипт из пункта 3.2. В общем данную разработку лично я, считаю очень нужной и полезной. Я думаю, что многие ее поставят себе :-) Еще раз спасибо!!! Quote Link to post Share on other sites
jonny008 Posted October 12, 2015 Report Share Posted October 12, 2015 Всегда показывает в отладке + 0 Quote Link to post Share on other sites
tsybart Posted October 12, 2015 Report Share Posted October 12, 2015 на 2.1.5 не стало, админка молчит Quote Link to post Share on other sites
Karen Posted October 12, 2015 Report Share Posted October 12, 2015 Помогите, сделал все по описанию. Без каких либо изменений... ни звукового оповещения ни автообновления. Simpla 2.3.6И это тоже сделал... Для начала раскоментируйте строку с отладкой:console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time);и смотрите в консоле браузера что происходит... так же на время отладки можн поставить интервал запросов почаще, например 5 секунд (5000). Quote Link to post Share on other sites
Gloobus Posted October 13, 2015 Author Report Share Posted October 13, 2015 У кого не выходит, проверьте пункт 3!Подключать JS скрипты нужно ПОСЛЕ подключения самого jQuery, т.к. они зависимы от него. Quote Link to post Share on other sites
Karen Posted October 13, 2015 Report Share Posted October 13, 2015 У кого не выходит, проверьте пункт 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> Quote Link to post Share on other sites
Gloobus Posted October 13, 2015 Author Report Share Posted October 13, 2015 В {literal}...{/literal} должен быть обернут JS-кодВнутри {literal}...{/literal} не должно быть кода шаблонизатора SmartyУ вас там с этим каша. Quote Link to post Share on other sites
Karen Posted October 13, 2015 Report Share Posted October 13, 2015 В {literal}...{/literal} должен быть обернут JS-кодВнутри {literal}...{/literal} не должно быть кода шаблонизатора SmartyУ вас там с этим каша.Можно поправить? Quote Link to post Share on other sites
Gloobus Posted October 13, 2015 Author Report Share Posted October 13, 2015 Конечно можно, правьте, кто же вам не дает? Quote Link to post Share on other sites
Kors Posted October 13, 2015 Report Share Posted October 13, 2015 (edited) Похоже, дело во фрагменте {/literal} }); </script> {/if} и его надо поменять на }); {/literal} </script> {/if} А во втором применении {literal}...{/literal} еще хуже... Edited October 13, 2015 by Kors Quote Link to post Share on other sites
Kors Posted October 13, 2015 Report Share Posted October 13, 2015 Непонятно использование условия 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.По-моему, строить функционал на сравнении этих значений совершенно бессмысленно, даже если работает один менеджер. А если два, то и подавно... Quote Link to post Share on other sites
Gloobus Posted October 13, 2015 Author Report Share Posted October 13, 2015 (edited) Kors, это нужно для того, что бы показывать уведомление и тиликать звуком только тогда, когда кол-во их изменилось. Не более того.И это как раз работает на при двух и более менеджерах! Смотри, смысл простой:1. В 0:01 пришел заказ, +1 на счетчике, все возможные уведомления, в count_time = 12. В 0:02 еще заказ, теперь их 2, 2 != count_time следовательно все возможные уведомления и теперь count_time = 23. Между 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} Edited October 13, 2015 by Gloobus Quote Link to post Share on other sites
Kors Posted October 14, 2015 Report Share Posted October 14, 2015 ... ммм, пока сам пытался объяснить, понял что ты прав, наверно надо сделать if (data.count_time > count_time), то есть уведомления когда с очередным запросом вернулось больше, чем в прошлый раз. Так тоже не пойдет, потому что условия1. Пришли новые заказы2. (data.count_time > count_time)совершенно не одно и то же. Более того, между ними абсолютно никакой связи нет...Также как и и в текущей ситуации условие3. (data.count_time != count_time)не имеет НИКАКОЙ СВЯЗИ с (1). Принципиально неправильно вы почему-то зациклились на КОЛИЧЕСТВЕ заказов. А надо бы честно отрабатывать все данные, тем более, что это совсем несложно. Только количество не отражает все богатство возможных ситуаций... Да и сама постановка задачи несколько странная и очень заумная.Зачем вообще Вы придумали работу с count_time? Чтобы пикнуть звуком? А почему тогда только 1 раз? Если пикнули, а ни один менеджер не среагировал, то какой смысл в разработке? Надо бы пикать и повторно, если не каждый раз, то хотя бы через несколько интервалов...А в текущем виде это работает, когда не появляются ошибки, несколько неэффективно... Quote Link to post Share on other sites
Gloobus Posted October 14, 2015 Author Report Share Posted October 14, 2015 Ну не знаю, я делал под требования. Сказали так Тут просто поделился, я думаю каждый сможет подправить под себя кто хоть немного js Просто дилинькать надо было только тогда, когда между интервалом обновления число новых заказов растет, увеличивается. Quote Link to post Share on other sites
Karen Posted October 16, 2015 Report Share Posted October 16, 2015 (edited) Kors, это нужно для того, что бы показывать уведомление и тиликать звуком только тогда, когда кол-во их изменилось. Не более того.И это как раз работает на при двух и более менеджерах! Смотри, смысл простой:1. В 0:01 пришел заказ, +1 на счетчике, все возможные уведомления, в count_time = 12. В 0:02 еще заказ, теперь их 2, 2 != count_time следовательно все возможные уведомления и теперь count_time = 23. Между 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Сейчас нормально, но без изменений Edited October 16, 2015 by Karen Quote Link to post Share on other sites
Gloobus Posted October 16, 2015 Author Report Share Posted October 16, 2015 Karen,скинь доступ к фтп и доступ в админку в ЛС, я посмотрю Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.