Помогите пофиксить баги - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

Теги не найдены

  • 5 Страниц +
  • 1
  • 2
  • 3
  • Последняя »

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

#1 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 04 Сентябрь 2018 - 20:28

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

http://skrinshoter.r...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' ) ) );


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

Вложений


0

#2 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 348
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 341
  • IPB version:I have no IPB
 

Отправлено 05 Сентябрь 2018 - 09:35

Просмотреть сообщениеTemKa_SD сказал(а):

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

	protected function ajax() {
		$games = $this->getGameList(isset(\IPS\Request::i()->cookie['RunningGames_only_lobby']) and \IPS\Request::i()->cookie['RunningGames_only_lobby'] === 'true', 6);
		\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 200 );
	}

+
в js добавить
	$('#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');
		}
    });	

Сообщение изменено: newbie (05 Сентябрь 2018 - 11:06)

0

#3 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 05 Сентябрь 2018 - 10:01

Спасибо, но проблему это не решило. Может весь код нужно обернуть?

	protected function ajax() {
if (\IPS\Request::i()->isAjax())
		$games = $this->getGameList(\IPS\Request::i()->only_lobby === 'true', 6);
		#setcookie('RunningGames_botid', \IPS\Request::i()->botid_list, time() + 3600 * 24 * 31 * 365);
		
		{
		    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' ) ) );
		    }
		
		\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 200 );
}
	}

0

#4 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 348
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 341
  • IPB version:I have no IPB
 

Отправлено 05 Сентябрь 2018 - 11:06

Я поправил пост. Проверьте.
0

#5 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 05 Сентябрь 2018 - 11:59

Стало лучше, но немного не так, чекбокс подтупает после обновления страницы ручками и почему-то не срабатывает тут:

http://prntscr.com/kqst87 т.е при загрузки страницы отображается не правильно, только после 1 обновления на аякс становится как надо, гляньте по ссылке.
0

#6 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 348
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 341
  • IPB version:I have no IPB
 

Отправлено 05 Сентябрь 2018 - 12:26

Смотрю как гость.
Если страница кешируется, то оно понятно.
Либо отключайте для той страницы кеширование, либо используйте только аякс для получения данных.
0

#7 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 05 Сентябрь 2018 - 15:42

Хм, похоже и правда из-за него. Скажите еще вот что, можно как-то сделать обновление моментальным после нажатия на чек бокс?
0

#8 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 05 Сентябрь 2018 - 18:44

И еще у меня есть одна проблемка, в примере выше я просто вывел один бот, чтобы не было лишних чекбоксов и прочего. Текущий код выглядит так:

http://prntscr.com/kqygzw

ошибка:

Цитата

No data supplied for parameters in prepared statement


Она возникает, потому что стандартно данные в куках отсутствуют, как бы мне это решить?
0

#9 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 05 Сентябрь 2018 - 23:45

Я кстати сделал так, правильно?

http://prntscr.com/kr20i9

И мне еще вот что не понятно, зачем тут AND?

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


Т.е условие такое: ВЫБРАТЬ если существуют куки RunningGames_only_lobby и куки RunningGames_only_lobby равно true.

Если куки существуют, они в любом случае будут равны тру, если чекбокс не отмечен, куки пустые.

Сообщение изменено: TemKa_SD (05 Сентябрь 2018 - 23:58)

0

#10 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 06 Сентябрь 2018 - 01:25

Блин, не получается. У меня получилось вывести данные из куков, оно вроде работает ( данные выбирает правильно ) но галочки почему-то не отмечены:

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


Как мне вот это вызвать тут? ( см.скрин ), через $this->ajax() же ?

http://prntscr.com/kr2vz2

Сообщение изменено: TemKa_SD (06 Сентябрь 2018 - 01:29)

0

#11 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 348
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 341
  • IPB version:I have no IPB
 

Отправлено 06 Сентябрь 2018 - 08:47

Просмотреть сообщениеTemKa_SD сказал(а):

Скажите еще вот что, можно как-то сделать обновление моментальным после нажатия на чек бокс?

Загружать все записи и скрывать через css.

Просмотреть сообщениеTemKa_SD сказал(а):

ошибка:

Цитата

No data supplied for parameters in prepared statement

Где данные?
		if($onlyLobby) {
			$conditions = array('lobby=1 AND (botid < ? OR botid > ?)');
		} else {
			$conditions = array('botid < ? OR botid > ?');
		}
		if(!empty($botid))
		{
			$botid = ($botid[mb_strlen($botid) - 1] == ',' ? mb_substr($botid, 0, -1) : $botid);
			$conditions = array('botid in (' . $botid . ')' . ($onlyLobby == true ? 'AND lobby=1' : ''));
		}

Что здесь botid < ? OR botid > ? ? Меньше чего или больше чего? 1, 10 или чего-то еще?

Просмотреть сообщениеTemKa_SD сказал(а):

Я кстати сделал так, правильно?
А в чем смысл менять куки каждые 5 секунд?

Просмотреть сообщениеTemKa_SD сказал(а):

И мне еще вот что не понятно, зачем тут AND?
Не хотите, не используйте. isset проверяет, была ли установлена переменная значением отличным от NULL. Если не важно значение, то не используйте.

Просмотреть сообщениеTemKa_SD сказал(а):

они в любом случае будут равны тру,
Кто такое сказал? Куки юзер может изменить.

Просмотреть сообщениеTemKa_SD сказал(а):

Блин, не получается. У меня получилось вывести данные из куков, оно вроде работает ( данные выбирает правильно ) но галочки почему-то не отмечены:
В чем идея делать сначала explode, а после implode?
0

#12 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 06 Сентябрь 2018 - 15:03

Просмотреть сообщениеnewbie 06 Сентябрь 2018 - 08:47 сказал(а):

Где данные?
if($onlyLobby) {
			$conditions = array('lobby=1 AND (botid < ? OR botid > ?)');
		} else {
			$conditions = array('botid < ? OR botid > ?');
		}
		if(!empty($botid))
		{
			$botid = ($botid[mb_strlen($botid) - 1] == ',' ? mb_substr($botid, 0, -1) : $botid);
			$conditions = array('botid in (' . $botid . ')' . ($onlyLobby == true ? 'AND lobby=1' : ''));
		}

Что здесь botid < ? OR botid > ? ? Меньше чего или больше чего? 1, 10 или чего-то еще?


Ой, это остатки от другой функции, не то удалил: https://github.com/T...gGames.php#L109 здесь код такой будет:

		if($onlyLobby)
		{
			$conditions = array('lobby=1');
		} else {
			$conditions = null;
		}
		if(!empty($botid))
		{
			$botid = ($botid[mb_strlen($botid) - 1] == ',' ? mb_substr($botid, 0, -1) : $botid);
			$conditions = array('botid in (' . $botid . ')' . ($onlyLobby == true ? 'AND lobby=1' : ''));
		}


Просмотреть сообщениеnewbie 06 Сентябрь 2018 - 08:47 сказал(а):

А в чем смысл менять куки каждые 5 секунд?


Хотелось это всё держать в одном месте, а так, нужно подключать сторонний файл или на странице JS выводить. Как лучше?

Просмотреть сообщениеnewbie 06 Сентябрь 2018 - 08:47 сказал(а):

В чем идея делать сначала explode, а после implode?


У меня была ошибка, нельзя использовать массив, нужно преобразовать в строку.
0

#13 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 348
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 341
  • IPB version:I have no IPB
 

Отправлено 06 Сентябрь 2018 - 15:19

Просмотреть сообщениеTemKa_SD сказал(а):

здесь код такой будет:

$conditions = array();

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

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


Просмотреть сообщениеTemKa_SD сказал(а):

Хотелось это всё держать в одном месте, а так, нужно подключать сторонний файл или на странице JS выводить. Как лучше?

Не понял. У Вас все в 1-ом js-файле. Что еще хотите подключать?

У Вас, кстати, сейчас "нотис" на форуме (со всеми путями и проч), если не установлена кука RunningGames_botid
0

#14 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 196
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 06 Сентябрь 2018 - 15:52

Просмотреть сообщениеnewbie 06 Сентябрь 2018 - 15:19 сказал(а):

$conditions = array();

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

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



Супер, ту ошибку исправило, а я думал это потому что куки пустые были )

Просмотреть сообщениеnewbie 06 Сентябрь 2018 - 15:19 сказал(а):


Не понял. У Вас все в 1-ом js-файле. Что еще хотите подключать?


У меня подключен файл JS к этой странице \IPS\Output::i()->js( 'gamelistcopy.js', 'sharedstats', 'interface' ) я в него и добавил.

Просмотреть сообщениеnewbie 06 Сентябрь 2018 - 15:19 сказал(а):

У Вас, кстати, сейчас "нотис" на форуме (со всеми путями и проч), если не установлена кука RunningGames_botid


Да, я это и пытаюсь сделать, мне вот осталось сделать выборку из куков по bot_id и всё )

Почему не работает?

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

0

#15 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 348
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 341
  • IPB version:I have no IPB
 

Отправлено 06 Сентябрь 2018 - 16:04

Просмотреть сообщениеTemKa_SD сказал(а):

У меня подключен файл JS к этой странице \IPS\Output::i()->js( 'gamelistcopy.js', 'sharedstats', 'interface' ) я в него и добавил.

В котором куки устанавливаются/удаляются каждые 5 секунд.
Изменяйте по выбору, как было сделано выше.

Просмотреть сообщениеTemKa_SD сказал(а):

Почему не работает?

isset(\IPS\Request::i()->cookie['RunningGames_botid'])

Выше писал, что isset проверяет, была ли установлена переменная значением отличным от NULL.
То есть Ваш код выглядит, если кука RunningGames_botid есть, как
$games = $this->getGameList(isset(\IPS\Request::i()->cookie['RunningGames_only_lobby']) and \IPS\Request::i()->cookie['RunningGames_only_lobby'] === 'true', true);

0

Сообщить об этой теме:


  • 5 Страниц +
  • 1
  • 2
  • 3
  • Последняя »


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2018 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна