1

だから私は概念的にはほとんどそこにいると思いますが、欠けているポインタが必要です。

目的は、通常のユーザー登録フォームにさらにいくつかのフィールドを追加し、少しスタイルを整えてから、余分なフィールドをテーブルに保存して送信することです。

これは私がこれまでに持っているものです。誰かが私に最後のナッジを与えて、私を動かしてくれませんか. 私を助けてください。また、新しいフォーム フィールドを揃えるなどのマイナーなスタイリングを適用するにはどうすればよいですか?

どうもありがとう !!!!!!!!!

  function module_menu() {
$items = array();
$items['school/registration'] = array(
      'title' => 'Upgraded Registration Form',
      'page callback'    =>'module_school_register',
      'type' => MENU_CALLBACK
);

return $items; }//end of the function

function module_school_register(){ return drupal_get_form('form_school_register'); }//end of the function

function module_school_form_alter(&$form, $form_state, $form_id) {

dsm($form_id);

if ($form_id == 'user_registration_form') { // modify the "#submit" form property by prepending another submit handler array $form['#submit'] = array_merge( array('_module_registration_submit' => array()), $form['#submit'] );

} }

function _module_registration_submit($form_id, $form_values) { // store extra data in different table }

function module_registration_validate($form, &$form_state) { $error=0; //Validation stuff here, set $error to true if something went wrong, or however u want to do this. Completely up to u in how u set errors. if ($error) { form_set_error('new_field_name', 'AHH SOMETHING WRONG!'); } }

4

2 に答える 2

1

RedBenは正しいです、コンテンツプロファイルはより良い解決策かもしれません。

2番目の送信ハンドラーを奇妙な方法で追加しているようです。これは単に関数の名前であり、配列ではありません。送信ハンドラーが実行されていることを確認しましたか?

ハンドラーへの参照は単純な文字列であるため、を使用して配列に追加する必要があります。

$form['#submit'][] = '_module_registration_submit'

標準ハンドラーの前に実行する必要がある場合は、を使用して配列array_unshiftの先頭にプッシュします。#submit

于 2010-06-13T13:34:33.853 に答える
1

独自のソリューションを展開する前に、コンテンツ プロファイル モジュールを確認することをお勧めします。

学校登録用のカスタム コンテンツ タイプ (ノード) を定義し、cck フィールドを追加して、コンテンツ プロファイルとしてアクティブ化します。コンテンツ プロファイルの設定で、ユーザー登録フォームで有効にします。ゼロコード!

于 2010-06-13T13:13:02.110 に答える