Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

\IPS\Helpers\Form\Radio string 0

Здравствуйте. У меня есть вот такое поле в форме:

 

	$form->add( new \IPS\Helpers\Form\Radio( 'map_loadingame', isset($settings['map_loadingame']) ? $settings['map_loadingame'] : 0, FALSE, array(
		'options' => array
		(
			0 => 'map_loadingame_screen',
			1 => 'map_loadingame_ingame'
		)
	), NULL, NULL, NULL, 'map_loadingame' ) );

 

Значения 0 и 1 возвращаются в виде строки, т.е условие срабатывает когда в нем 0 в "": "0". Пробовал отформатировать (int) $values['map_loadingame'] - не помогает. Как быть?

 

P.S.: Или это foreach в строку переводит? И соответственно там никогда не будет 0, можно сотавить "0" и проблем не будет, даже если сохранять

\IPS\Helpers\Form\Number ?

Изменено пользователем TemKa_SD

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

\IPS\Helpers\Form\Number ?

Это тут каким боком, если у Вас Radio?

Вопрос в чем? Сохранить или отобразить?

  • Автор

Не до конца код похоже написал.

 

public function updateAsSettings( $cfg_name, $settingValues )
{
	if ( $this->id )
	{
		$result = iterator_to_array( \IPS\Db::i()->select( 'cfg_key', static::$cfgTable, array( 'cfg_name=?', $cfg_name ) ) );
		if( $result )
		{
		    foreach( $settingValues as $k => $v )
		    {
				if ($v != '0' AND $v != NULL)
				{
					if( \in_array( $k, $result ) )
					{
					    \IPS\Db::i()->update( static::$cfgTable, array( 'cfg_value' => $v ), array( 'cfg_name=? AND cfg_key=?', $cfg_name, $k ) );
					}
					else
					{
					    \IPS\Db::i()->insert( static::$cfgTable, array( 'cfg_name' => $cfg_name, 'cfg_key' => $k, 'cfg_value' => $v ) );
					}
				}
				else
				{
					\IPS\Db::i()->delete( static::$cfgTable, array( 'cfg_name=? AND cfg_key=?', $cfg_name, $k ) );
				}
		    }
		}
	} else {
		foreach ($settingValues as $k => $v) {
			if ($v != '0' AND $v != NULL)
			{
				\IPS\Db::i()->insert( static::$cfgTable, array( 'cfg_name' => $cfg_name, 'cfg_key' => $k, 'cfg_value' => $v ) );
			}
		}
	}
}

 

Я сохраняю значения полей в своей функции таким образом, меня сильно смущет $v != '0' в кавычках, без них не работает.

 

Я тут подумал, скорей всего, если указать $v != 0 - оно будет считать 0 не значением, а как NULL, чтобы правильно обрабатывать это, нужно писать !== верно?

  • Автор

Из-за этого?

 

HTML-формы не передают целые, дробные числа или булевые переменные: они всегда передают строки. Для проверки является ли строка числом, используйте функцию is_numeric().

В чем проблема написать - $values['map_loadingame'] != ''

 

Ноль (string или число) не равно пустой строке.

Но сам ноль в boolean типе является false.

На будущее, использовать ноль в качестве значение какого-то параметра не самая лучшая идея.

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.