あなたの助けが必要です。匿名ユーザーが表示できる drupal 7 cck フォームがありますが、匿名ユーザーがフォームに入力して [送信] をクリックすると、ユーザー ログイン フォームを表示し、ログイン後にページを更新せずに cck フォームが自動的に送信され、お礼のメッセージが表示されます。私はこれをたくさん検索しましたが、解決策はありませんでした。これを行う方法がわかりません助けてください。
質問する
1139 次
1 に答える
1
form_alter フックを使用するカスタム モジュールを作成できます。次に、CCK フォームについて、ユーザーがログインしているかどうかを確認し、ログインしていない場合は、フォームにユーザー名/パスワード フィールドを追加して、ユーザーが入力できるようにします。次に、カスタム検証関数をフォームに追加して、フォームが送信されたときに検証関数がプログラムでユーザーのログインを試みるようにします。ログインに失敗した場合はフォーム エラーを表示し、それ以外の場合はグローバル ユーザーをログイン ユーザーに設定します。そのため、フォームが送信機能に到達するまでに、ユーザーはログインしている必要があります。
カスタムモジュールの場合は次のようになります。
<?php
function mymodule_form_alter(&$form,&$form_state,$form_id){
global $user;
//only for the form we are looking for, and if the user is anonymous
if (($form_id == 'my_form_id') && ($user->uid==0)){
$form['login'] = array(
'#type' => 'fieldset',
'#title' => 'Login',
);
$form['login']['username'] = array(
'#type' => 'textfield',
'#title' => 'Username',
'#required' => true,
);
$form['login']['password'] = array(
'#type' => 'password',
'#title' => 'Password',
'#required' => true,
);
$form['#validate'][] = 'mymodule_my_form_validate';
}
}
function mymodule_my_form_validate(&$form,&$form_state){
global $user;
//stop from re-login if there were other validation errors
if ($user->uid == 0){
$username = $form_state['values']['username'];
$password = $form_state['values']['password'];
//authenticate the user (attempt to login)
if ($uid = user_authenticate($username,$password)){
$user = user_load($uid);
//finalize login
user_login_finalize(array('name'=>$username,'pass'=>$password));
}else{
form_set_error('username','Invalid username or password');
}
}
}
于 2012-09-25T21:20:02.730 に答える