web-dev-qa-db-ja.com

Nodeパラメータによる作成

送信して検証したときに、ノード(node/add/factura-tmn)を作成するためにページにリダイレクトする必要があるフォームがありますが、このページにパラメーターを送信します。出来ますか?

私は現在次のコードを持っています:

function add_invoice_file_form_submit($form, &$form_state) {
  $form_state['redirect'] = 'node/add/factura-tmn';
  drupal_redirect_form($form_state);
}
4
Miguel Borges

解決策は非常に簡単です。

function add_invoice_file_form_submit($form, &$form_state) {
// files validations...
...
  $form_state['redirect'] = 'node/add/factura-tmn/' . $fid;
  drupal_redirect_form($form_state);
}


function paperless_planning_form_node_form_alter(&$form, $form_state, $form_id) {
    if(isset($form['type']) && isset($form['#node'])) {
        $type = $form['#node']->type;
        switch($type) :
            case 'factura_tmn':
                $fid = arg(3);
                $file = file_load($fid);
                ...
        endswitch;
    }
}
1
Miguel Borges

変更されたノード追加フォームを使用しないのはなぜですか?これを変更して、必要なフィールドと検証を設定できます。

1
Jeremy French

フォームを処理する場合は、 drupal_form_submit() を使用できます。ドキュメントページで報告されている例は、関数の使用方法を示しています。

_// Register a new user.
$form_state = array();
$form_state['values']['name'] = 'robo-user';
$form_state['values']['mail'] = '[email protected]';
$form_state['values']['pass']['pass1'] = 'password';
$form_state['values']['pass']['pass2'] = 'password';
$form_state['values']['op'] = t('Create new account');
drupal_form_submit('user_register_form', $form_state);
_

フォーム送信ハンドラー内では、drupal_redirect_form()を呼び出す必要はありません。コードは_$form_state['redirect']_を設定する必要があるだけです。 system_modules_submit()aggregator_form_opml_submit() 、および comment_multiple_delete_confirm_submitなどのDrupalコアモジュールによって実装されたフォーム送信ハンドラから何が行われるかを確認する()

0
kiamlaluno