1

esrnumberという追加のカスタム フィールドを作成しました。onUserBeforeSave()プラグイン内の php ファイルに関数を追加しました。これは、カスタム フィールドの esrnumber と登録フォームの名前を取得し、データベースをチェックして、一致する場合は true を返すことになっています。したがって、ユーザーが登録できるようになります。

問題は、フォームからこの php スクリプトにフィールド値を取得できないように見えることです。以下は私のコードです。

function onUserBeforeSave($user, $isnew, $new){
//sql code removed for example
    $foundesr = false;
    if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['esrnumber'])) {
    $test = $_GET['esrnumber'];
    } else if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['esrnumber']))         {
        $test = $_POST['esrnumber'];
    } else {
        $test = "booo";
    }
   if($foundesr == false){
        JError::raiseWarning(1000, JText::_('There is a problem with your ESR number, ' . JRequest::getVar('username') . JRequest::getVar('esrnumber') . JRequest::getVar('jform_username') . $test . 'it does not match that name in our records.'));
        return false;
    }
    return true;
}

ほとんどが不要であることがわかるように、登録フォームのフィールドから値を取得するためにいくつかの異なるメソッドを試してみましたが、それらはすべて空を返します。どこが間違っているのですか?フォームからこのメソッドに値を簡単に取得するにはどうすればよいですか?

Joomlaがフォーム用に生成するHTMLコードは次のとおりです(これはすべてデフォルトのものです

<div class="registration">
<form id="member-registration" action="/index.php/component/users/?task=registration.register" method="post" class="form-validate">
            <fieldset>
                <legend>User Registration</legend>
                <dl>
                                <dt>
                <span class="spacer"><span class="before"></span><span class="text"><label id="jform_spacer-lbl" class=""><strong class="red">*</strong> Required field</label></span><span class="after"></span></span>                                    </dt>
            <dd>&#160;</dd>
                                            <dt>
                <label id="jform_name-lbl" for="jform_name" class="hasTip required" title="Name::Enter your full name">Name:<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[name]" id="jform_name" value="pirateballoon@gmail.com" class="required" size="30"/></dd>
                                            <dt>
                <label id="jform_username-lbl" for="jform_username" class="hasTip required" title="Username::Enter your desired user name">Username:<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[username]" id="jform_username" value="pirateballoon@gmail.com" class="validate-username required" size="30"/></dd>
                                            <dt>
                <label id="jform_password1-lbl" for="jform_password1" class="hasTip required" title="Password::Enter your desired password - Enter a minimum of 4 characters">Password:<span class="star">&#160;*</span></label>                                    </dt>
            <dd><input type="password" name="jform[password1]" id="jform_password1" value="" autocomplete="off" class="validate-password required" size="30"/></dd>
                                            <dt>
                <label id="jform_password2-lbl" for="jform_password2" class="hasTip required" title="Confirm Password::Confirm your password">Confirm Password:<span class="star">&#160;*</span></label>                                    </dt>
            <dd><input type="password" name="jform[password2]" id="jform_password2" value="" autocomplete="off" class="validate-password required" size="30"/></dd>
                                            <dt>
                <label id="jform_email1-lbl" for="jform_email1" class="hasTip required" title="Email Address::Enter your email address">Email Address:<span class="star">&#160;*</span></label>                                 </dt>
            <dd><input type="text" name="jform[email1]" class="validate-email required" id="jform_email1" value="pirateballoon@gmail.com" size="30"/></dd>
                                            <dt>
                <label id="jform_email2-lbl" for="jform_email2" class="hasTip required" title="Confirm email Address::Confirm your email address">Confirm email Address:<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[email2]" class="validate-email required" id="jform_email2" value="pirateballoon@gmail.com" size="30"/></dd>
                                                                            </dl>
    </fieldset>
                <fieldset>
                <legend>User ESR Profile</legend>
                <dl>
                                <dt>
                <label id="jform_esrprofile_esrnumber-lbl" for="jform_esrprofile_esrnumber" class=" required">ESR Number<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[esrprofile][esrnumber]" id="jform_esrprofile_esrnumber" value="" class="required"/></dd>
                            </dl>
    </fieldset>
        <div>
        <button type="submit" class="validate">Register</button>
        or          <a href="/" title="Cancel">Cancel</a>
        <input type="hidden" name="option" value="com_users" />
        <input type="hidden" name="task" value="registration.register" />
        <input type="hidden" name="b44564159b9c7ebe3b7caf93cc5ce8de" value="1" />       </div>
</form>

私が作成した新しいメソッドを個人的に呼び出したことはありません。メソッドを作成しただけで、フォームを送信するとJoomlaが自動的に呼び出すようです。

乾杯。

4

4 に答える 4

1
$jinput = JFactory::getApplication()->input;
$fields = $jinput->get('jform','','array');
于 2012-11-03T14:57:05.750 に答える
0

解決しました。誰かがこのスレッドを見つけて知る必要がある場合は、これが私がonUserBeforeSave($user, $isnew, $new)関数で行った方法です。

JArrayHelper::getValue($new, 'name', 0, 'STRING')

あなたの変数を与えます。名前が表示されている場所を変更するだけで、必要なユーザーの詳細を取得できます。ESR番号(私のカスタムフィールド)を取得するには、これを行う必要がありました:

        foreach ($new['esrprofile'] as $k => $v) {
             $esrnumber = $v;
        }

そこに数字のインスタンスが1つしかないと思う方法を見て、その配列からそのesr数字を取得するより効率的な方法がおそらくありますが、これは今のところ機能します。

于 2012-11-29T13:30:01.047 に答える
0

まず第一に、JRequest は非推奨であり、2.5 では使用しないでください。新しい Joomla 3.0 では完全に削除されています。代わりに、次のようにJInputを使用します。

$jinput = JFactory::getApplication()->input;
$fields = $jinput->getArray('jform');

これで、次のように yout フィールドを参照できるようになります。

$fields['name'];
$fields['username'];
etc.
于 2012-11-02T11:14:37.313 に答える
-1

JRequestを使用して入力を取得する$new代わりに、変数を使用できます。

echo $new->username;
echo $new->email;

ただし、機能しJRequest::getVarない理由は、間違った名前を使用しているためです。名前ではなく、入力フィールドの ID を使用しようとしているようです。

入力名はjform[name]などに設定されます。したがって、JRequestを使用してそれらを取得するには、配列全体を取得します。

$jform = JRequest::getVar('jform');
$username = $jform['username'];

また、Joomla バージョン > 2.5 を使用している場合は、JInputを参照してください

于 2012-11-01T17:05:26.240 に答える