Gloobus Опубликовано 29 сентября, 2015 Жалоба Поделиться Опубликовано 29 сентября, 2015 (изменено) Была необходимость реализации информирования в админке о поступлении нового заказа без перезагрузки страницы. Работает естественно с любой страницы в админке. Интервал запросов - 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); }); Изменено 13 октября, 2015 пользователем Gloobus Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 29 сентября, 2015 Жалоба Поделиться Опубликовано 29 сентября, 2015 Нечто подобное делал мой друг, правда это расширение для браузере но по сути работает так же. Более подробно можете прочитать тут http://forum.simplacms.ru/topic/8606-расширение-chromeopera-информер-о-заказах-simpla2xx/ Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 29 сентября, 2015 Автор Жалоба Поделиться Опубликовано 29 сентября, 2015 (изменено) У меня была задача как то разрулить такую ситуацию: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} Изменено 29 сентября, 2015 пользователем Gloobus Цитата Ссылка на сообщение Поделиться на другие сайты
keks Опубликовано 30 сентября, 2015 Жалоба Поделиться Опубликовано 30 сентября, 2015 Поправьте ссылку на скачивание архива, не качает. Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 30 сентября, 2015 Автор Жалоба Поделиться Опубликовано 30 сентября, 2015 Поправьте ссылку на скачивание архива, не качает. Ссылку поправил, видать что-то задел когда редактировал пост Цитата Ссылка на сообщение Поделиться на другие сайты
keks Опубликовано 2 октября, 2015 Жалоба Поделиться Опубликовано 2 октября, 2015 Так, ну все вроде сделал по описанию, но вот что то не вижу оповещений я... Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 2 октября, 2015 Автор Жалоба Поделиться Опубликовано 2 октября, 2015 Так, ну все вроде сделал по описанию, но вот что то не вижу оповещений я...Для начала раскоментируйте строку с отладкой: console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time); и смотрите в консоле браузера что происходит... так же на время отладки можн поставить интервал запросов почаще, например 5 секунд (5000). Цитата Ссылка на сообщение Поделиться на другие сайты
keks Опубликовано 2 октября, 2015 Жалоба Поделиться Опубликовано 2 октября, 2015 (изменено) Для начала раскоментируйте строку с отладкой: 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». Потерянное объявление. Изменено 2 октября, 2015 пользователем keks Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 2 октября, 2015 Автор Жалоба Поделиться Опубликовано 2 октября, 2015 Это все ошибки ваших стилей, никакого отношения к консоли не имеют!500 это очень мало, это запрос каждые полсекунды. Я говорил про 5000.Могу посмотреть что у вас не так, если дадите доступ в админку к заказам. Цитата Ссылка на сообщение Поделиться на другие сайты
keks Опубликовано 2 октября, 2015 Жалоба Поделиться Опубликовано 2 октября, 2015 Разобрались с ТС в чем было дело, я просто не туда вставил скрипт из пункта 3.2. В общем данную разработку лично я, считаю очень нужной и полезной. Я думаю, что многие ее поставят себе :-) Еще раз спасибо!!! Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 12 октября, 2015 Жалоба Поделиться Опубликовано 12 октября, 2015 Всегда показывает в отладке + 0 Цитата Ссылка на сообщение Поделиться на другие сайты
tsybart Опубликовано 12 октября, 2015 Жалоба Поделиться Опубликовано 12 октября, 2015 на 2.1.5 не стало, админка молчит Цитата Ссылка на сообщение Поделиться на другие сайты
Karen Опубликовано 12 октября, 2015 Жалоба Поделиться Опубликовано 12 октября, 2015 Помогите, сделал все по описанию. Без каких либо изменений... ни звукового оповещения ни автообновления. Simpla 2.3.6И это тоже сделал... Для начала раскоментируйте строку с отладкой:console.log('Cur time: '+time()+' - Start time: '+start_time+' - Data: '+data.count_new+' + '+data.count_time);и смотрите в консоле браузера что происходит... так же на время отладки можн поставить интервал запросов почаще, например 5 секунд (5000). Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 13 октября, 2015 Автор Жалоба Поделиться Опубликовано 13 октября, 2015 У кого не выходит, проверьте пункт 3!Подключать JS скрипты нужно ПОСЛЕ подключения самого jQuery, т.к. они зависимы от него. Цитата Ссылка на сообщение Поделиться на другие сайты
Karen Опубликовано 13 октября, 2015 Жалоба Поделиться Опубликовано 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> Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 13 октября, 2015 Автор Жалоба Поделиться Опубликовано 13 октября, 2015 В {literal}...{/literal} должен быть обернут JS-кодВнутри {literal}...{/literal} не должно быть кода шаблонизатора SmartyУ вас там с этим каша. Цитата Ссылка на сообщение Поделиться на другие сайты
Karen Опубликовано 13 октября, 2015 Жалоба Поделиться Опубликовано 13 октября, 2015 В {literal}...{/literal} должен быть обернут JS-кодВнутри {literal}...{/literal} не должно быть кода шаблонизатора SmartyУ вас там с этим каша.Можно поправить? Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 13 октября, 2015 Автор Жалоба Поделиться Опубликовано 13 октября, 2015 Конечно можно, правьте, кто же вам не дает? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 13 октября, 2015 Жалоба Поделиться Опубликовано 13 октября, 2015 (изменено) Похоже, дело во фрагменте {/literal} }); </script> {/if} и его надо поменять на }); {/literal} </script> {/if} А во втором применении {literal}...{/literal} еще хуже... Изменено 13 октября, 2015 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 13 октября, 2015 Жалоба Поделиться Опубликовано 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.По-моему, строить функционал на сравнении этих значений совершенно бессмысленно, даже если работает один менеджер. А если два, то и подавно... Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 13 октября, 2015 Автор Жалоба Поделиться Опубликовано 13 октября, 2015 (изменено) 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} Изменено 13 октября, 2015 пользователем Gloobus Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 14 октября, 2015 Жалоба Поделиться Опубликовано 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 раз? Если пикнули, а ни один менеджер не среагировал, то какой смысл в разработке? Надо бы пикать и повторно, если не каждый раз, то хотя бы через несколько интервалов...А в текущем виде это работает, когда не появляются ошибки, несколько неэффективно... Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 14 октября, 2015 Автор Жалоба Поделиться Опубликовано 14 октября, 2015 Ну не знаю, я делал под требования. Сказали так Тут просто поделился, я думаю каждый сможет подправить под себя кто хоть немного js Просто дилинькать надо было только тогда, когда между интервалом обновления число новых заказов растет, увеличивается. Цитата Ссылка на сообщение Поделиться на другие сайты
Karen Опубликовано 16 октября, 2015 Жалоба Поделиться Опубликовано 16 октября, 2015 (изменено) 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Сейчас нормально, но без изменений Изменено 16 октября, 2015 пользователем Karen Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 16 октября, 2015 Автор Жалоба Поделиться Опубликовано 16 октября, 2015 Karen,скинь доступ к фтп и доступ в админку в ЛС, я посмотрю Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.