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

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

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

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

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

$form и \IPS\Patterns\ActiveRecord

Здравствуйте. Делаю новую форму для контроллеров, которые есть в админке и фронте. Класс реализован с помощью \IPS\Patterns\ActiveRecord, node здесь не нужен. Так как в node есть стандартно parent::form, а в ActiveRecord нету, в связи с этим у меня вопрос: если я просто реализую форму функцией public function formWizard() я смогу обращаться к ней из админки и фронта?

 

2. Спрошу тоже тут, так как вопрос касается этой формы. Сделал 3 шага, первый - указание данных, второй - их подтверждение, 3 - результат будет. При переходе на страницу app=wc3&module=players&controller=players&do=form шаги начинаются со 2, почему?

 

public function formWizard()
{
	return new \IPS\Helpers\Wizard(
		array(
			'wc3_gameplayers_connect_first_step' => function( $data )
			{
				$form = new \IPS\Helpers\Form( 'wc3_gameplayers_connect_first_step', 'wc3_gameplayers_connect_first_step_continue' );
				$form->add(new \IPS\Helpers\Form\Text('wc3_gameplayers_connected_name', NULL, true, array('maxLength' => 15)));
				$form->add(new \IPS\Helpers\Form\Select('wc3_gameplayers_connected_realm', NULL, true, array(
					'options' => array(
						NULL => '',
						'server.wc3.info' => 'WC3.Info',
						'iccup.wc3.info' => 'Iccup',
						'rubattle.net' => 'RuBattle',
						'eurobattle.net' => 'EuroBattle'
					),
				)));
				$form->add( new \IPS\Helpers\Form\Select( 'wc3_gameplayers_connected_role', NULL, TRUE, array( 'options' => \IPS\wc3\Player\Role::roles(), 'parse' => 'normal' ) ) );

				if ( $values = $form->values() )
				{
					$count = \IPS\Db::i()->select( 'COUNT(*)', static::$databaseTable, array( 'name=? AND server=?', mb_strtolower($values['wc3_gameplayers_connected_name']), $values['wc3_gameplayers_connected_realm'] ) )->first();

					if ( $count > 0 )
					{
						$form->error = \IPS\Member::loggedIn()->language()->addToStack( 'wc3_gameplayers_connected_error_count' );
						return $form;
					}

					return $values;
				}

				return $form;
			},
			'wc3_gameplayers_connect_second_step' => function ( $data )
			{
				$players = array();

				foreach ( \IPS\Db::i()->select( 'name, spoofedrealm', 'wc3_gameplayers', array( 'name=?', mb_strtolower($data['wc3_gameplayers_connected_name']) ) ) as $player )
				{
					$players[ $player['name'] ] = $player['spoofedrealm'];
				}

				$form = new \IPS\Helpers\Form( 'wc3_gameplayers_connect_second_step', 'wc3_gameplayers_connected_add' );
				$form->addHeader('wc3_gameplayers_connect_second_step_desc');
				$form->addMessage( 'Мы нашли ' . \count($players) . ' игроков.', 'ipsMessage ipsMessage_warning', TRUE );

				if ( $values = $form->values() )
				{
					$count = \IPS\Db::i()->select( 'COUNT(*)', static::$databaseTable, array( 'name=? AND server=?', mb_strtolower($values['wc3_gameplayers_connected_name']), $values['wc3_gameplayers_connected_realm'] ) )->first();

					if ( $count > 0 )
					{
						$form->error = \IPS\Member::loggedIn()->language()->addToStack( 'wc3_gameplayers_connected_error_count' );
						return $form;
					}

					return $values;
				}

				return $form;
			},
			'wc3_gameplayers_connect_finish_step' => function ( $data )
			{
				$form = new \IPS\Helpers\Form( 'wc3_gameplayers_connect_finish_step', 'continue' );
				$form->addMessage( 'import_date_explain' );

				return $form;
			}
		),
		\IPS\Http\Url::internal( 'app=wc3&module=players&controller=players&do=form' ), TRUE, NULL, TRUE, NULL
	);
}

 

3. Мне в форме в шагах 2 и 3 нужно будет использовать кастомный шаблон, для вывода тех или иных сообщений. Реализовывать его с помощью функций формы или же других?

 

4. На втором шаге мне нужно реализовать две кнопки, вернутся на предыдущий шаг и продолжить, как добавить вторую?

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

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

Есть у меня тут небольшой конфликт, можно как-то условие отобразить, если это админ панель, отображать один код, иначе другой?

Вариантов уйма

От добавления параметра до простой проверки

if (\IPS\Dispatcher::hasInstance() and \IPS\Dispatcher::i()->controllerLocation === 'admin')

  • Автор

Спасибо, сделал так:

 

$url = ( \IPS\Dispatcher::hasInstance() and \IPS\Dispatcher::i()->controllerLocation === 'front' ) ? static::url() : static::acpUrl();

 

public function url()
{
	return \IPS\Http\Url::internal( "app=wc3&module=gameplayers&controller=connected", 'front', 'gameplayersConnected' );
}

public function acpUrl()
{
	return \IPS\Http\Url::internal( "app=wc3&module=gameplayers&controller=connected", 'admin' );
}

 

У меня просто вот если взять этот пример, второй параметр должен быть furl если это фронт, а тут у меня язык просто, ну соответственно в админке нормально работает, а во фронте это читает как furl.

 

\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=wc3&module=gameplayers&controller=connected' ), 'wc3_gameplayers_connect_finish_success' );

Какой язык в furl?

  • Автор
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=wc3&module=gameplayers&controller=connected' ), 'wc3_gameplayers_connect_finish_success' );

- в этом коде wc3_gameplayers_connect_finish_success - ключ furl, а на самом деле это языковая фраза.

- в этом коде wc3_gameplayers_connect_finish_success - ключ furl, а на самом деле это языковая фраза.

С чего бы?

wc3_gameplayers_connect_finish_success - 2-ой параметр

	/**
 * Redirect
 *
 * @param	\IPS\Http\Url	$url			URL to redirect to
 * @param	string			$message		Optional message to display
 * @param	int				$httpStatusCode	HTTP Status Code
 * @param	bool			$forceScreen	If TRUE, an intermediate screen will be shown
 * @return	void
 */
public function redirect( $url, $message='', $httpStatusCode=301, $forceScreen=FALSE )

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

Аккаунт

Навигация

Поиск

Поиск

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

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