Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Помогите пофиксить баги

Опубликовано:

Здравствуйте. Часов 6 вчера ночью копал, не смог разобраться с одним вопросом, суть следующая: пациент http://dev.wc3.games/Stats/RunningGames/ есть чекбокс Только лобби - он работает не корректно, попробую показать на видео:

 

http://skrinshoter.ru/v/040918/EDThAFwq

 

Вот, я нажал на "только лобби", записалось в куки и функция сработала - всё супер, обновил страницу, в куках всё осталось - а геимлист не работает. Если обновить страницу не сразу а через 4-5 сек, то всё сработает как надо. Я так понимаю, это из-за автообновления каждые 5 сек? Помогите пофиксить.

 

По коду:

 

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

$games = $this->getGameList(isset(\IPS\Request::i()->cookie['RunningGames_only_lobby']) == 'true', 6);

 

Здесь записываем данные, когда галочка стоит или не стоит.

		if(\IPS\Request::i()->only_lobby === 'true')
		\IPS\Request::i()->setCookie( 'RunningGames_only_lobby', 'true', \IPS\DateTime::create()->add( new \DateInterval( 'P365D' ) ) );
	else
		\IPS\Request::i()->setCookie( 'RunningGames_only_lobby', '', \IPS\DateTime::create()->add( new \DateInterval( 'P365D' ) ) );

 

Наверно ничего не понятно?

RunningGames.php

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

Опубликовано:
(isset(\IPS\Request::i()->cookie['RunningGames_botid']) AND \IPS\Request::i()->cookie['RunningGames_botid']) ? \IPS\Request::i()->cookie['RunningGames_botid'] : ''

Опубликовано:
  • Автор

Супер, огромной спасибо. Осталось пофиксить галочки и всё )))) Они почему-то заболели.

 

На счет JS понял, нужно убрать за setInterval(function() {

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

Всё же правильно, почему тупит?

 

        <input type="checkbox" role="checkbox" name="botid[]" value="{$id}" {{if in_array($id, explode(',', isset(\IPS\Request::i()->cookie['RunningGames_botid']))) || !isset(\IPS\Request::i()->cookie['RunningGames_botid'])}}checked{{endif}}>

Опубликовано:

{{if in_array($id, explode(',', isset(\IPS\Request::i()->cookie['RunningGames_botid'])))

Опять Вы не правильно интерпретируете isset.

Если кука установлена, то код выглядит как

{{if in_array($id, explode(',', true))

Опубликовано:
  • Автор

Как дебажить в шаблоне?

Опубликовано:
  • Автор
        <input type="checkbox" role="checkbox" name="botid[]" value="{$id}" {{if isset(\IPS\Request::i()->cookie['RunningGames_botid']) AND \IPS\Request::i()->cookie['RunningGames_botid'] == in_array($id, explode(',', \IPS\Request::i()->cookie['RunningGames_botid']))}}checked{{endif}}>

Опубликовано:
        <input type="checkbox" role="checkbox" name="botid[]" value="{$id}" {{if isset(\IPS\Request::i()->cookie['RunningGames_botid']) AND in_array($id, explode(',', \IPS\Request::i()->cookie['RunningGames_botid']))}}checked{{endif}}>

Опубликовано:
  • Автор

Да, я тоже об этом подумал, а вы уже написали. Как вывести дебаг информацию в шаблоне? {{print_r $per}}

Опубликовано:

Как вывести дебаг информацию в шаблоне?

Пишите валидный php-код в двойных фигурных скобках

Опубликовано:
  • Автор

2222

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

Блин, тут то что не так? Правильно же всё вроде.

 

http://prntscr.com/krlcnk

 

$(document).ready(function() {
   var gamenames = document.querySelectorAll('.copy');
   var table = document.querySelector('#gamelistTable');
   var names = new Clipboard(gamenames);
   var botid_list = '';
   var date = new Date();
   date.setTime(date.getTime() + (365 * 86400000));

   setInterval(function() {
       var updateUrl = table.getAttribute('data-update-url');
       var val = document.querySelector('input[name="only_lobby"]').checked;
       updateUrl += '&only_lobby=' + val;
       $('input:checkbox[name="botid[]"]:checked').each(function(){
           botid_list += $(this).val() + ',';
       });
       /*console.log(botid_list);*/
       updateUrl += '&botid_list=' + botid_list;
       if(document.querySelector('input[name="only_eu"]')) {
           var euval = document.querySelector('input[name="only_eu"]').checked;
           var usval = document.querySelector('input[name="only_us"]').checked;
           updateUrl += '&only_eu=' + euval + '&only_us=' + usval;
       }
       console.log(updateUrl);
       ips.getAjax()(updateUrl).done(function (data) {
           table.querySelector('tbody').innerHTML = data;
           gamenames = document.querySelectorAll('.copy');
           names.destroy();
           names = new Clipboard(gamenames);
       });
   }, 5000);
   $('#only_lobby').change(function() {
       if(this.checked) {
           var date = new Date();
           date.setTime(date.getTime() + (365 * 86400000));
           ips.utils.cookie.set('RunningGames_only_lobby', true, date.toUTCString());
       } else {
           ips.utils.cookie.unset('RunningGames_only_lobby');
       }
   });
   $('input:checkbox[name="botid[]"]').change(function() {
       if(this.checked) {
           ips.utils.cookie.set('RunningGames_botid', botid_list += $(this).val() + ',', date.toUTCString());
       }
   });
});

Опубликовано:
  • Автор

Изменил дизайн фильтра, прикольно получилось )))

 

Скажите пожалуйста по вопросу выше, я так и не разобрался почему он так записывает в куки. Еще пару вопросов, сильно сложно реализовать статистику по играм и игрокам с условием по фильтру ( которая в самом низу фильтра )? Она работает, но только при ручно обновлении, выбирает по чекбоксам, на аяксе нет. И еще вопрос, реально вывести какой нить тамймер в том же месте для следующего обновления? Чтобы люди просто видели.

Опубликовано:

Опять огород нагородили.

В setInterval нужно только делать запрос, получать данные и обновлять таблицу. Вы туда все пытаетесь всунуть.

 

я так и не разобрался почему он так записывает в куки.

Потому что переменную объявили за пределами setInterval

Простой пример

var counter = 0;
setInterval(function() {
   counter += 1;
}, 5000);

Каждые 5 секунд значение будет увеличиваться на единицу. Так и у Вас значения прибавляются к старым.

1,2

1,2,1,2

1,2,1,2,1,2

Юзер выбрал 7, в результате в куку записалось значение 1,2,1,2,1,2,7

 

сильно сложно реализовать статистику по играм и игрокам с условием по фильтру ( которая в самом низу фильтра )

Возвращайте json и обновляйте данные

\IPS\Output::i()->json(array('table' => $table, 'games' => $games, 'players' => $players));

 

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

Какой таймер? Обновление каждые 5 секунд?
Опубликовано:
  • Автор

Какой таймер? Обновление каждые 5 секунд?

угу

Опубликовано:

угу

var timer = $('#elTimer');
var timerTime = timer.html();
var counter = timerTime;

setInterval(function() {
if (counter < 0) {
	counter = timerTime;
}
timer.html(counter);
counter -= 1;
}, 1000);

<span id="elTimer">10</span>

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.