2011-12-21 1 views
0
function Mymodule_user($op,&$edit, &$account, $category = NULL) { 
    switch ($op) { 
    case 'register': 
     $result = db_query("SELECT id,name FROM {sites} ORDER BY name"); 
     while($row=db_fetch_array($result)) { 
     $sites[$row['id']] = $row['name']; 
     } 

     $form['site_select'] = array(
     '#type' => 'select', 
     '#title' => t('Select your site'), 
     '#options' => $sites, 
    ) 
     return $form; 

    case 'insert': 
     //How to take the $form values from above and use in my query to 
     //write to my own table while writing to the standard 'users' table? 
     db_query("INSERT INTO {another_table} (site_name) VALUES ('%s')", 
       $form['site_select']); 
); 

のための2つの異なるテーブルに書き込みます私のケースは 'insert'なので、これを 'another_table'に書くことができます。ユーザー名やパスワードなどの通常のユーザーデータは、引き続きデフォルトの「ユーザー」テーブルに書き込む必要があります。

Q:なぜ、ちょうどそれが通常どおりDrupalは「データ」フィールドに「ユーザ」テーブルにデータをシリアル化して保存できませんか?

A:私は、AJAX-IFYのことができるように、別のDrupalの形でオートコンプリートを使用するだけでなく、MySQLでクエリの特定のカスタムフィールドにしたいので。 MySQLはシリアル化/シリアル化解除できません。例えば、同様に、そのフォームの#submitプロパティに独自のコールバック関数を追加するために、user_registerフォームを変更したいあなたはおそらくつもり

答えて

1

「another_table FROM DISTINCT SITE_NAMEを選択」:

<?php 
/** 
* Implementation of hook_form_FORMID_alter(). 
* @param $form 
* @param $form_state 
* @return void 
*/ 
function MYMODULE_form_user_register_alter(&$form, &$form_state) { 
    $form['#submit'][] = 'MYMODULEs_own_register_submit_callback_func'; 
} 

そして、その後、コールバックで、あなたは(あなたがあなたのhook_userの実装に追加余分site_selectフィールド要素の値を含む)の形に充填されたものは何でも利用者でいっぱい$form_stateを持っているつもりだ:これは動作します

<?php 
function MYMODULEs_own_register_submit_callback_func(&$form, &$form_state) { 
    // Do stuff with $form_state['values'], i.e $form_state['values']['site_select'], etc. 
} 
+0

を!しかし、今、これらのカスタムフィールドが「データ」フィールドの「ユーザー」テーブルに書き込まれてシリアル化される方法がありますか?私は2つの場所にデータを望んでいません。私はMymodule_form_user_register_alter()にカスタムフォームフィールド$フォーム[「site_select」]を移動し、それはまだ「データ」フィールドに「ユーザ」テーブルにキャプチャされます。 – user785179

+0

その場合、あなたはその代わりに、 '$フォームの、あなたの他の人の前に実行されるコールバック提出し確認してください[「#が提出」] [] =「MYMODULEs_own_register_submit_callback_func」;'、あなたが 'するarray_unshift($フォームを[ '#が提出するだろう']、' MYMODULEs_own_register_submit_callback_func '); 'あなたのhook_form_FORMID_alter()にあります。そして、あなたはあなたの事をした後、コールバックでは、あなたは、単に解除できた値のDrupalの通常のコールバックはそれを取得したことがないように、すなわち '解除($ form_state [「値」] [「site_select」]);優秀' – Alexander

+0

!データは1つのテーブルに書き込まれ、ユーザーアカウントは 'users'テーブルに正しく作成されます。ありがとうございました! – user785179

関連する問題