Skip to content
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.

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 добавить, но он добавлен, что не так?

Featured Replies

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

  • Author

Что не так?

 

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. Аргумент она принимает только переменную.

  • Author

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

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

  • Author

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

  • Author

Что не так?

 

           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;
           }

  • Author

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

 

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

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

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

 

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

  • Author

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

 

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;

  • Author

Здравствуйте, чем оно отличается от этого?

 

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

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Search

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.