Опубликовано: 15 августа 20187 г Здравствуйте. Я создал функцию регистрации на игровом сервере через сайт. Пожалуйста, посмотрите код, правильно ли всё реализовано, функция рабочая, интересует на сколько кривой код получился. 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 то отображать кнопку и форму не нужно. Изменено 15 августа 20187 г пользователем TemKa_SD
Опубликовано: 16 августа 20187 г Нужно еще в 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);
Опубликовано: 16 августа 20187 г Автор С подключением разобрался, а запрос мне где выполнять, там в самом начале файла где шаблон подключается или в самой функции? Только в самой функции вроде не работает. Если там выполнить запрос, а потом переменную вставить в функцию, будет работать?
Опубликовано: 16 августа 20187 г Автор Вот я объявил новые переменные в 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); }
Опубликовано: 16 августа 20187 г Автор <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}}
Опубликовано: 16 августа 20187 г {{if \IPS\Settings::i()->pvpgn_enabled OR !$accountPvPGN }} должно быть AND {{if \IPS\Settings::i()->pvpgn_enabled AND !$accountPvPGN }}
Опубликовано: 16 августа 20187 г Автор ой, точно. А то, что, один и тот же код в двух местах вызван, это норм? Изменено 16 августа 20187 г пользователем TemKa_SD
Опубликовано: 16 августа 20187 г ой, точно. А то, что, один и тот же код в двух местах вызван, это норм? Создайте метод
Опубликовано: 17 августа 20187 г У Вас там где-то был класс, расширяющий \IPS\MemberДобавьте туда методpublic function someName() { // Код } После используйте \IPS\Member::loggedIn()->someName()
Опубликовано: 17 августа 20187 г Автор Вы про хук ? http://ipbskins.ru/forum/topic15670.html/page__view__findpost__p__104828
Опубликовано: 17 августа 20187 г Ваша функция должна возвращать true или false и нужно использовать return
Здравствуйте. Я создал функцию регистрации на игровом сервере через сайт. Пожалуйста, посмотрите код, правильно ли всё реализовано, функция рабочая, интересует на сколько кривой код получился.
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