Перейти к содержимому
Русский язык для Invision Community 5

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

Здравствуйте. Часов 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

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

  • Автор

Готово

Все показывает

games.jpg

  • Автор

5 и 10 должно заменятся на текущее кол-во игроков и игр.

Где должно, если Вы установили 5 и 10

\IPS\Output::i()->json(array('html' => \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 'games' => 5, 'players' => 10));

Вместо 5 и 10 нужно указывать актуальные данные.

  • Автор

Да, а если я установлю непонятные переменные сюда, то оно будет отображать актуальные данные. Почему?

Да, а если я установлю непонятные переменные сюда, то оно будет отображать актуальные данные. Почему?
Уверены?
  • Автор

http://skrinshoter.ru/v/090918/Ox0mQCs8?a более того, работает выборка по геимлисту, т.е не только обновляет статистику игр и игроков.

 

На видео код такой:

 

    protected function ajax() {
       $games = $this->getGameList(isset(\IPS\Request::i()->cookie['RunningGames_only_lobby']) and \IPS\Request::i()->cookie['RunningGames_only_lobby'] === 'true', \IPS\Request::i()->botid_list);
       \IPS\Output::i()->json(array('html' => \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 'games' => $neponperemen, 'players' => $neponperemen));

 

Оставил его, посмотрите сами, если помните, с цифрами 5 и 10 и выборка не работала и стата не обновлялась.

До ajax

total.png

После

total2.png

  • Автор

Блин, я сам тут не разберусь, вроде всё правильно, но фильтр не работает. После обновления на AJAX фильтр ничего не выбирает.

 

	/**
 *
 */
   protected function ajax() {
       $games = $this->getGameList(isset(\IPS\Request::i()->cookie['RunningGames_only_lobby']) and \IPS\Request::i()->cookie['RunningGames_only_lobby'] === 'true', \IPS\Request::i()->botid_list);
       \IPS\Output::i()->json(array('html' => \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 'games' => $games['total']['games'], 'players' => $games['total']['players']));
   }

А почему у Вас старый js используется?

Мой косяк. Перешел по ссылке в профиле.

 

Покажите код getGameList

  • Автор
	/**
 * @param bool $onlyLobby
 * @return array
 */
protected function getGameList($onlyLobby = false, $botid = '') {
	$db = \IPS\sharedstats\DB::get();
	$games = [];

	$conditions = array();

	if($onlyLobby)
	{
	    $conditions[] = array('lobby=?', 1);
	}

	if($botid)
	{
	    $conditions[] = array(\IPS\Db::i()->in('botid', explode(',', $botid)));
	}

	$totalGames = $db::i('stats')->select('COUNT(*) as games, SUM(slotstaken) as players', 'stats_gamelist', $conditions)->first();
	foreach ($db::i('stats')->select('id, gamename, slotstaken, slotstotal, age, usernames, totalgames, lobby', 'stats_gamelist', $conditions, 'lobby DESC') as $game) {
		$players = explode("\t", $game['usernames']);
		$gameplayers = [];
		if (sizeof($players) > 4) {
			for ($i = 0; $i < (sizeof($players)-1); $i = $i + 4) {
				$gameplayers[] = [
					'color' => ($i / 4) + 1,
					'name' => $players[$i],
					'realm' => $players[$i + 1],
					'ping' => $players[$i + 2],
					'ip' => $players[$i + 3],
				];
			}
		}
		$game['players'] = $gameplayers;
		$games[$game['id']] = $game;
	}
	return [
	  'games' => $games,
	  'total' => $totalGames
	];
}

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

 

Зачем Вы используете

\IPS\Request::i()->botid_list

если значения хранятся в куки \IPS\Request::i()->cookie['botid_list']?

  • Автор

Спасибо

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.