Перейти к публикации
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

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

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

Добавил флеш сообщение, как думаете, стоит использовать его каждые 5 сек?

 

timer.html(ips.ui.flashMsg.show('Обновление...'));

 

Сделал отображение фильтра, если ботов больше 1.

 

            {{if count($games['botid_data']) > 1}}
               {{foreach $games['botid_data'] as $name => $id}}
                   <li>
                       <span class="ipsSideMenu_item cForumMiniList_unread">
                            <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}} id="botid_{$id}" class="botid">
                           <label for='botid_{$id}' class="cForumMiniList_blob">
                               <label for='botid_{$id}'></label>
                               <i class="fa fa-check"></i>
                           </label>
                           <label for='botid_{$id}' class="cForumMiniList_title ipsTruncate ipsTruncate_line">{$name}</label>
                           <span class="ipsType_small ipsType_light cForumMiniList_count">1</span>
                       </span>
                   </li>
               {{endforeach}}
           {{endif}}

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

Опубликовано:
Добавил флеш сообщение, как думаете, стоит использовать его каждые 5 сек?

ИМХО ерунда.

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

ИМХО ерунда.

 

Согласен, лишнее это.

 

Включил логи nginx, тут вот такое:

 

http://prntscr.com/ktrpwy

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

Хотя, на DEV версии такого вроде нет, там где такое происходит чуть старее версия, с багами.

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

Помогите плиз еще вывести тут кол-во игр на конкретно этом боте, у меня вообще не получается, пробовал разные переменные, не пойму как сделать.

 

<span class="ipsType_small ipsType_light cForumMiniList_count">1</span>

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

Добавляете в выборку botid

        foreach ($db::i('stats')->select('id, gamename, slotstaken, slotstotal, age, usernames, totalgames, lobby, botid', 'stats_gamelist', $conditions, 'lobby DESC') as $game) {

и считаете

if (!isset($botGames[$game['botid']]))
{
   $botGames[$game['botid']] = 0;   
}
else
{
   $botGames[$game['botid']]++;
}

Возвращаете

        return [
         'games' => $games,
         'total' => $totalGames,
         'botGames' => $botGames
       ];

и html

<span class="ipsType_small ipsType_light cForumMiniList_count">{{if isset($games['botGames'][$id])}}{$games['botGames'][$id]}{{else}}0{{endif}}</span>

  • 1 месяц спустя...
Опубликовано:
  • Автор

Здравствуйте. А как сделать, чтобы обновление не было привязано к счетчику HTML, чтобы я мог выбрать отображать этот счетчик или нет.

 

    var table = $('#gamelistTable');
   var tableBody = table.find('ol');
   var names = new Clipboard('.copy');
   var updateUrl = table.attr('data-bind');
   var elTotalGames = $('#elTotalGames');
   var elTotalPlayers = $('#elTotalPlayers');
   var date = new Date();
   var timer = $('#elTimer');
   var timerTime = timer.html();
   var counter = timerTime;

   date.setTime(date.getTime() + (365 * 86400000));

   var ajaxObj = null;

   setInterval(function() {
       if (counter === 0) {
           if (ajaxObj != null) {
               return;
           }

           timer.html(ips.getString('sharedstats_running_games_update'));

           ajaxObj = ips.getAjax()(updateUrl)
               .done(function (response) {
                   tableBody.html(response['html']);
                   elTotalGames.html(response['games']);
                   elTotalPlayers.html(response['players']);

                   counter = timerTime;
                   ajaxObj = null;
               })
               .fail(function() {
                   window.location.reload();
               });
       } else {
           timer.html(counter);
           counter -= 1;
       }
   }, 1000);

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

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

чтобы я мог выбрать отображать этот счетчик или нет.

Так скройте его через css

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

Да, уже сделал так.

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

Сейчас на странице 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.