Undefined index в widget configuration - Дизайн и модификация Invision Power Board

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

 

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

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

  • 2 Страниц +
  • 1
  • 2

Undefined index в widget configuration

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

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

Отправлено 13 Февраль 2019 - 04:23

Здравствуйте. Восстанавливаю приложение, подзабил на разработку, а тут вышла 4.4.

Ошибка:

Whoops\Exception\ErrorException: Undefined index: ActiveGamesWidgetType (8)


Функции в виджете:

	public function configuration( &$form=null )
	{
 		if ( $form === null )
		{
	 		$form = new \IPS\Helpers\Form;
 		}


		$form->add( new \IPS\Helpers\Form\Radio( 'ActiveGamesWidgetType', isset( $this->configuration['ActiveGamesWidgetType'] ) ? $this->configuration['ActiveGamesWidgetType'] : '', TRUE, array( 'options' => array(
			-1	=> 'Лобби && Игры',
			0	=> 'Игры',
			1	=> 'Лобби',
		) ) ) );

 		return $form;
 	} 


	public function render()
	{
		$games = \IPS\wc3\ActiveGames\ActiveGames::getGamelist(
			$this->configuration['ActiveGamesWidgetType']);

		return $this->output(
			$games
	}


Я так понимаю, нужно ISSET добавить, но он добавлен, что не так?
0

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

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 347
  • Регистрация: 20-Март 09
  • Репутация: 2 513
  • IPB version:3.1.x
 

Отправлено 14 Февраль 2019 - 12:37

Все верно, требуется isset в указанной строке
0

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

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

Отправлено 15 Февраль 2019 - 13:45

Что не так?

Цитата

Cannot use isset() on the result of an expression (you can use "null !== expression" instead)


isset( implode(",", $this->configuration['ActiveGamesWidgetBots']) ) ? implode(",", $this->configuration['ActiveGamesWidgetBots']) : '*',

0

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

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 347
  • Регистрация: 20-Март 09
  • Репутация: 2 513
  • IPB version:3.1.x
 

Отправлено 15 Февраль 2019 - 21:44

Нельзя использовать выражение в isset. Аргумент она принимает только переменную.
0

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

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

Отправлено 16 Февраль 2019 - 04:52

Блин, в 3.6 не было ошибок вообще.

        if ( count( $ids ) )
        {
            foreach( $ids as $id )
            {
                $botIds = array_filter( $ids, 'intval' );
            }

            if ( count( $botIds ) )
            {
                $where[] = array( \IPS\Db::i()->in( 'botid', array_filter( $botIds ) ) );
            }
        }


Whoops\Exception\ErrorException: You have used a function (count) that should be called from the root namespace for performance reasons

0

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

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 347
  • Регистрация: 20-Март 09
  • Репутация: 2 513
  • IPB version:3.1.x
 

Отправлено 16 Февраль 2019 - 09:25

Нужно указать что count из глобальной области, а не из какого нибудь пространство имен (добавить обратный слеш перед функцией)

\count( $var )

0

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

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

Отправлено 16 Февраль 2019 - 09:45

Там еще несколько ф-й IPS проверяют в 4.4 при включенном режиме разработчика. Если не хотите ставить слеш, то можно добавить в constants.php
define( 'IN_DEV_STRICT_MODE', FALSE );

Либо использовать какой-нибудь автоматический инструмент, который добавит слеши по всему коду.
1

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

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

Отправлено 16 Февраль 2019 - 11:16

Спасибо, лучше ручками слеш поставлю, если так нужно делать )
0

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

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

Отправлено 16 Февраль 2019 - 13:10

Что не так?

            foreach( static::getUsers($g->getUsernames()) as $realm )
            {
                isset( $realms ) ? $realms[ $realm['realm'] ]++ : '';
            }

0

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

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

Отправлено 16 Февраль 2019 - 13:42

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

Что не так?

А что не так?

            $realms = array();
            foreach( static::getUsers($g->getUsernames()) as $realm )
            {
                isset( $realms[ $realm['realm'] ] ) ? $realms[ $realm['realm'] ]++ : $realms[ $realm['realm'] ] = 1;
            }

0

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

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

Отправлено 16 Февраль 2019 - 13:47

Переменную в виде массива во всех случаях объявлять нужно? Ну всмысле там, где она используется в виде массива.

isset( $realms[ $realm['realm'] ] ) ? $realms[ $realm['realm'] ]++ : $realms[ $realm['realm'] ] = 1;


Это понятно, если существует $realms[ $realm['realm'] ] то выбрать $realms[ $realm['realm'] ]++ иначе $realms[ $realm['realm'] ] = 1. Зачем тут 1?

И не правильно выбрались данные: http://prntscr.com/mlvepl

Убрал:

$realms = array();

0

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

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

Отправлено 16 Февраль 2019 - 14:11

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

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

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

Зачем тут 1?

А что должно быть? Если еще нет $realms[ $realm['realm'] ], то создаем и присваиваем 1. Иначе количество для каждого индекса будет на единицу меньше
foreach (array(1,2,3,4,5,1,5,5) as $i)
{
	isset($realms[$i]) ? $realms[$i]++ : $realms[$i] = 1;
}

две единицы
одна двойка
одна тройка
одна четверка
три пятерки

На выходе
    [1] => 2
    [2] => 1
    [3] => 1
    [4] => 1
    [5] => 3


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

И не правильно выбрались данные: http://prntscr.com/mlvepl
Вам виднее. У вас там вообще цикл в цикле.
0

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

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

Отправлено 16 Февраль 2019 - 15:23

Не работает оно. Если в игре 0 игроков, т.е срабатывает именно $realms[ $realm['realm'] ] = 1 то ошибка Invalid argument supplied for foreach().

Хотя, это наверно в count надо оборачивать? Если count есть, то выводить данные.
0

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

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

Отправлено 16 Февраль 2019 - 16:06

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

http://prntscr.com/mlwkdv

{{if $stats['players']}}

0

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

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 347
  • Регистрация: 20-Март 09
  • Репутация: 2 513
  • IPB version:3.1.x
 

Отправлено 16 Февраль 2019 - 19:50

В php 7 не знаю какой ревизии есть такая штука как ?? (объединения с null)

                $realms[ $realm['realm'] ] = $realms[ $realm['realm'] ] ?? 0;
                $realms[ $realm['realm'] ]++;

Или по старинке

                $realms[ $realm['realm'] ] = isset( $realms[ $realm['realm'] ] ) ? $realms[ $realm['realm'] ] + 1 : 1;

0

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


  • 2 Страниц +
  • 1
  • 2


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

  

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-2019 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна