Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

Undefined index в widget configuration

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

Здравствуйте. Восстанавливаю приложение, подзабил на разработку, а тут вышла 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 добавить, но он добавлен, что не так?

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Что не так?

 

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Блин, в 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

Поделиться сообщением


Ссылка на сообщение

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

 

\count( $var )

Поделиться сообщением


Ссылка на сообщение

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

define( 'IN_DEV_STRICT_MODE', FALSE );

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Что не так?

 

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

Поделиться сообщением


Ссылка на сообщение

Что не так?

А что не так?

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

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();

Поделиться сообщением


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

Не только массив.

 

Зачем тут 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

 

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

Вам виднее. У вас там вообще цикл в цикле.

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

http://prntscr.com/mlwkdv

 

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

Поделиться сообщением


Ссылка на сообщение

В 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 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...