1
我需要你的幫助。 我有drupal 7 cck表單,匿名用戶可查看,但當匿名用戶填寫表單並點擊提交時,我想顯示用戶登錄表單,並且在登錄後不刷新頁面,cck表單將自動提交併顯示感謝信息。 我搜索了很多,但我沒有得到任何解決方案。 請幫我,我不明白如何做到這一點。對錶格提交檢查用戶登錄或不Drupal 7
我需要你的幫助。 我有drupal 7 cck表單,匿名用戶可查看,但當匿名用戶填寫表單並點擊提交時,我想顯示用戶登錄表單,並且在登錄後不刷新頁面,cck表單將自動提交併顯示感謝信息。 我搜索了很多,但我沒有得到任何解決方案。 請幫我,我不明白如何做到這一點。對錶格提交檢查用戶登錄或不Drupal 7
您可以編寫一個使用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');
}
}
}