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

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

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

Готово

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

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

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']?

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

Спасибо

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

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