Перейти к публикации
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.

Правильно ли сделан код?

Опубликовано:

Здравствуйте. Я создал функцию регистрации на игровом сервере через сайт. Пожалуйста, посмотрите код, правильно ли всё реализовано, функция рабочая, интересует на сколько кривой код получился.

 

	protected function addpvpgn()
{
	if(! \IPS\Settings::i()->pvpgn_enabled) {
	    return NULL;
    }
	\IPS\Session::i()->csrfCheck();

	$db = \IPS\sharedstats\DB::get();
	$account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [
		['member_id=?', \IPS\Member::loggedIn()->member_id],
		['server=?', 'Server.WC3.Games']
	]);

	if(count($account_pvpgn) == 0)
	{
		$form = new \IPS\Helpers\Form();
		$form->addHeader('sharedstats_pvpgn_account_add');
		$form->add(new \IPS\Helpers\Form\Text('sharedstats_pvpgn_account_add_name', null, true, array()));
		$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password', NULL, TRUE, array() ) );
		$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password2', NULL, TRUE, array( 'confirm' => 'sharedstats_pvpgn_account_add_password' ) ) );

		if ($values = $form->values())
		{
			try
			{
				$pvpgn = new \IPS\sharedstats\Records\PvPGN\BNET;
				$pvpgnHash = new \IPS\sharedstats\DbIntegration\Hash;

				$friend = new \IPS\sharedstats\Records\PvPGN\friend;
				$profile = new \IPS\sharedstats\Records\PvPGN\profile;
				$Record = new \IPS\sharedstats\Records\PvPGN\Record;

				$pvpgn->uid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id;
				$pvpgn->acct_username = $values['sharedstats_pvpgn_account_add_name'];
				$pvpgn->username = mb_strtolower($values['sharedstats_pvpgn_account_add_name']);
				$pvpgn->acct_userid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id;
				$pvpgn->acct_passhash1 = $pvpgnHash->getHash($values['sharedstats_pvpgn_account_add_password']);
				$pvpgn->acct_email = \IPS\Member::loggedIn()->email;
				$pvpgn->save();

				$friend->uid = \IPS\Member::loggedIn()->member_id;
				$friend->save();

				$profile->uid = \IPS\Member::loggedIn()->member_id;
				$profile->save();

				$Record->uid = \IPS\Member::loggedIn()->member_id;
				$Record->save();

				$conn = new \IPS\sharedstats\Records\ForumConnection;
				$conn->name = mb_strtolower($values['sharedstats_pvpgn_account_add_name']);
				$conn->server = 'Server.WC3.Games';
				$conn->member_id = \IPS\Member::loggedIn()->member_id;
				$conn->status = 'approved';
				$conn->save();

				\IPS\Output::i()
					->redirect(\IPS\Http\Url::internal('app=sharedstats&module=stats&controller=BNetAccount', 'front') , 'sharedstats_pvpgn_account_add_added');
			}
			catch(\IPS\Db\Exception $e)
			{
				if ($e->getCode() !== 1062)
				{
					throw $e;
				}
				$form->error = 'Такой игровой логин уже существует, выберите другой.';
			}
		}
		/* Display */
		\IPS\Output::i()->title = \IPS\Member::loggedIn()
			->language()
			->addToStack('sharedstats_pvpgn_account_add_name');
		if (\IPS\Request::i()->isAjax())
		{
			\IPS\Output::i()->output = $form->customTemplate(array(
				call_user_func_array(array(
					\IPS\Theme::i() ,
					'getTemplate'
				) , array(
					'forms',
					'core'
				)) ,
				'popupTemplate'
			));
		}
		else
		{
			\IPS\Output::i()->output = $form;
		}
	}
}

 

И еще вопрос, как вывести в шаблон результат переменной:

 

		$account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [
		['member_id=?', \IPS\Member::loggedIn()->member_id],
		['server=?', 'Server.WC3.Games']
	]);

Точнее, саму переменную, чтобы использовать условие if, если $account_pvpgn === 0 то отображать кнопку и форму не нужно.

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

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

Опубликовано:

Нужно еще в php-файле добавить, где этот шаблон вызывается.

 

Например, есть шаблон myTemplate

<ips:template parameters="$param" />

 

Добавляете новый параметр

<ips:template parameters="$param, $new" />

 

Ищите, где шаблон вызывается

$param = true;
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('group', 'app')->myTemplate($param);

 

Добавляете параметр

$param = true;
$new = 'test';
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('group', 'app')->myTemplate($param, $new);

Опубликовано:
  • Автор

С подключением разобрался, а запрос мне где выполнять, там в самом начале файла где шаблон подключается или в самой функции? Только в самой функции вроде не работает. Если там выполнить запрос, а потом переменную вставить в функцию, будет работать?

Опубликовано:

а запрос мне где выполнять,

В php.

Опубликовано:
  • Автор

Вот я объявил новые переменные в manage (копия из функции addpvpgn) так же не правильно? Можно в одном месте использовать, потом вставлять по всему файлу, только я не знаю как. Ну и даже так не работает почему-то ((((

 

	protected function manage()
{
	$db = \IPS\sharedstats\DB::get();
	$accountPvPGN = $db::i('stats')->select('COUNT(*)', 'stats_forum_connections', [['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games']])->first() != 0;
	\IPS\Output::i()->title = \IPS\Member::loggedIn() ->language() ->addToStack('menu__sharedstats_connected_accounts');
	\IPS\Output::i()->breadcrumb[] = array( NULL, \IPS\Output::i()->title
	);
	\IPS\Output::i()->output = \IPS\Theme::i()
		->getTemplate('bnet', 'sharedstats')
		->accountView(\IPS\Member::loggedIn(),$accountPvPGN);
}

Опубликовано:

Покажите код шаблона accountView

Опубликовано:
  • Автор
<ips:template parameters="$member, $accountPvPGN" />

<div class="ipsPad ipsType_pageTitle">{lang="sharedstats_bnetacc_title"}</div>

<ul class="ipsToolList ipsToolList_horizontal ipsClearfix ipsSpacer_both">
 <li>
 <a href='{url="app=sharedstats&module=stats&controller=BNetAccount&do=add" seoTemplate="sharedstats_bnetaccount_add" csrf="1"}'
    class="ipsButton ipsButton_positive ipsPos_right"
    data-ipsdialog="" data-ipsdialog-modal="true" data-ipsdialog-title="{lang='sharedstats_bnetacc_add'}">
     <i class="fa fa-plus"></i>  {lang="sharedstats_bnetacc_add"}
 </a>
 </li>
 {{if \IPS\Settings::i()->pvpgn_enabled OR !$accountPvPGN }}
   <li class="ipsToolList_primaryAction">
   <a href='{url="app=sharedstats&module=stats&controller=BNetAccount&do=addpvpgn" seoTemplate="sharedstats_bnetaccount_addpvpgn" csrf="1"}'
      class="ipsButton ipsButton_positive ipsPos_right"
      data-ipsdialog="" data-ipsdialog-modal="true" data-ipsdialog-title="{lang='sharedstats_pvpgn_account_add'}">
       <i class="fa fa-plus"></i>  {lang="sharedstats_pvpgn_account_add"}
   </a>
   </li>
 {{endif}}
</ul>

<div class="ipsClearfix"></div>

{{if $member->connected_accounts['connected'] === 0}}
   <p class="ipsType_light ipsType_center">{lang="sharedstats_bnetacc_no_connection"}</p>
{{else}}
 <div class="ipsPad ipsSpacer_top">
   <ol class='ipsDataList' itemscope itemtype="http://schema.org/ItemList">
     <meta itemprop="itemListOrder" content="Descending">
     {{foreach $member->connected_accounts['accounts'] as $k => $acc}}
       <li class="ipsDataItem {{if $acc['status'] === 'pending'}}ipsDataItem_warning{{endif}}" itemprop="itemListElement">
         <dl class="ipsDataItem_stats ipsDataItem_size1 ipsPos_left">
           {{if $acc['active']}}
             <strong data-ipstooltip="" title="{lang='active'}" class='ipsOnlineStatus ipsOnlineStatus_online'><i class='fa fa-circle'></i></strong>
           {{else}}
             <strong data-ipstooltip="" title="{lang='inactive'}" class='ipsOnlineStatus ipsOnlineStatus_offline'><i class='fa fa-circle'></i></strong>
           {{endif}}
         </dl>

         <dl class='ipsDataItem_stats ipsDataItem_size9 ipsPos_left'>
           <dt class='ipsType_left ipsDataItem_stats_number'>{$acc['name']}</dt>
           <dd class='ipsType_left ipsDataItem_stats_type'>{$acc['server']}</dd>
         </dl>

         <dl class='ipsDataItem_stats ipsPos_left'>
           <dt class='ipsType_left ipsDataItem_stats_number ipsType_minorHeading'>
             {{if $acc['status'] === 'pending'}}Pending{{else}}Confirmed{{endif}}
           </dt>
           <dd class='ipsType_left ipsDataItem_stats_type'>Status</dd>
         </dl>
         <dl class='ipsDataItem_stats ipsPos_right'>
           {{if $acc['status'] === 'pending'}}
             <a href='{url="app=sharedstats&module=stats&controller=BNetAccount&do=verify&id={$acc['id']}" seoTemplate="sharedstats_bnetaccount_verify"}'
                class="ipsButton ipsButton_tiny ipsButton_light" data-ipstooltip="" title="{lang='verify'}"
                data-ipsdialog="" data-ipsdialog-modal="" data-ipsdialog-title="{lang='sharedstats_bnetacc_verify'}">
               <i class="fa fa-check"></i>
             </a>
             <a href='{url="app=sharedstats&module=stats&controller=BNetAccount&do=cancel&id={$acc['id']}"}'
                data-confirm
                class="ipsButton ipsButton_tiny ipsButton_light" data-ipstooltip="" title="{lang='cancel_acc_connection'}">
               <i class="fa fa-times"></i>
             </a>
           {{endif}}
         </dl>
         <div class="ipsClearfix"></div>
       </li>
     {{endforeach}}
   </ol>
 </div>
{{endif}}

Опубликовано:

  {{if \IPS\Settings::i()->pvpgn_enabled OR !$accountPvPGN }}

должно быть AND

  {{if \IPS\Settings::i()->pvpgn_enabled AND !$accountPvPGN }}

Опубликовано:
  • Автор

ой, точно. А то, что, один и тот же код в двух местах вызван, это норм?

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

Опубликовано:

ой, точно. А то, что, один и тот же код в двух местах вызван, это норм?

Создайте метод

Опубликовано:

У Вас там где-то был класс, расширяющий \IPS\Member

Добавьте туда метод

public function someName()
{
// Код
}

 

После используйте \IPS\Member::loggedIn()->someName()

Опубликовано:
  • Автор

Что не так?

post-60255-0-48162000-1534513591_thumb.png

post-60255-0-47036200-1534513595_thumb.png

Опубликовано:

Ваша функция должна возвращать true или false и нужно использовать return

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

Сейчас на странице 0

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

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.