web-dev-qa-db-ja.com

Form_submitフックの使用方法

コンテンツタイプによって自動的に生成されるフォームがあります。 form_submit関数を実行して、データベースに保存するデータを入力/変更したいと思います。

Content-typeには既にこれらのフィールドが設定されていますが、ユーザー入力ではなく、form_submit関数でそれらを決定してほしいです。

フォーム送信関数を取得できますが、クエリ全体を自分で記述せずに、送信される値の配列に追加する方法がわかりません。取得する必要がある変数と、これを行うためにそれらを変更する方法は?

より具体的には.. form_alterで、これは私が望むことを行います。 $form["field_org_id"]["und"][0]['value']['#default_value'] = $org->id;

しかし、form_submitで同等のサイト外処理を行うにはどうすればよいですか? (これはコンテンツ追加フォームであり、クエリ全体を書き換えないことを望んでいます)

5
Damon
  1. hook_form_alter または hook_form_FORM_ID_alter を使用する必要があります
  2. このように、送信ハンドラを $ form ['#submit'] に追加します$form['#submit'][]='my_submit'
  3. そしてあなたのコードを書きなさい:

    function my_submit($form, &$form_state) { 
      // your code
    }
    
23
jibran

FORM_FUNCTION_submit()関数は、プレフィックスジェネレーター関数を含むフォームが送信されると自動的に起動します。

function generate_special_form(){ // this function name is "FORM_FUNCTION" above
    $form = array();
    $form['field_org_id'] = array(
        '#type' => 'textfield',
        '#title' => 'Organisation',
    );
    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => 'Submit',
    );
    return $form;
}

その関数がサブミットすると、2つのパラメーターを指定して関数generate_special_form_submit()が自動的に呼び出され、次のようにサブミットされた値を取得できます。

function generate_special_form_submit($form, &$form_state){
    // Form above was submitted, now lets clean up $form_state['values'], 
    // that's the submitted values in an associative array.
    form_state_values_clean($form_state);
    // And here is the value that was submitted:
    drupal_set_message($form_state['values']['field_org_id']);
}

コアで生成されたフォームを変更しようとしているようです。その場合は、hook_form_alterを使用して$ form ['#submit']値を上記のJibranアウトラインとして追加します。

3
Coomie