4

フォームを送信した後、ページをリダイレクトしようとしています。フォームは「formulaires/demande-de-subvention-pour-les-entraineurs」のページにありますが、「formulaires/demande-de-subvention-pour-les-entraineurs/entraineurs」にリダイレクトしたいのですが、どうすればよいですか?

function ulsform_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'ulsform_demande_de_subvention_pour_les_entraineurs_form') {
    $form['#submit'][] = 'ulsform_demande_submited_form';
  }else if($form_id == 'ulsform_demande_de_subvention_pour_les_entraineurs_02_form'){
    $form['#submit'][] = 'ulsform_entraineur_submited_form';
  }
}

function ulsform_demande_submited_form(&$form, $form_state){
  global $user;

  $v = $form_state['values'];
  $form_state['redirect'] = 'formulaires/demande-de-subvention-pour-les-entraineurs/entraineurs';

/* My code to insert into the db */    


}

それは機能せず、別の投稿でのこぎりのようなフォーム['#redirect'] を作成しようとしても機能しません。何を試すことができますか?

ご協力ありがとうございました!私はdrupalが初めてです

4

2 に答える 2

16

参照渡しを忘れた$form_stateため、変更は関数内でのみform_alter機能します。

関数のシグネチャを次のように変更します。注&$form_state:

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

$form_state['redirect'] は、配列または単純な文字列のいずれかです。文字列の場合、ユーザーはそこにリダイレクトされます。配列の場合は、drupal_gotoの仕組みに従って動作します。

$form_state['redirect'] = array(
  'node/123',
  array(
    'query' => array(
      'foo' => 'bar',
    ),'fragment' => 'baz');

node/123?foo=bar#baz

$form_state['redirect'] = 'node/123'

node/123

于 2013-01-27T02:33:57.067 に答える
0

カスタムモジュールに次のコードがあり、コンテンツを編集した後、常に /admin/content にリダイレクトされます

function redirect_to_edit_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == "page_article_node_form") {
        $form['#submit'][] = "_redirect_to_edit";
    }
}

function _redirect_to_edit($form, &$form_state) {
    $form_state['redirect'] = array(
            'node/' . $form['nid']['#value'],
            array(
                    'query' => array(
                            'destination' => 'node/' . $form['nid']['#value'],
                    )
            )
    );
    dpm($form_state);

    drupal_set_message("L'article a été mis à jour.", 'status');
}

最後の試行として追加したクエリ部分。送信後、カスタム メッセージを読むことはできますが、ユーザーを編集ページにとどまらせることはできません。

私は何をスキップしていますか?

ありがとう。

編集:

https://www.drupal.org/node/1074616と私の経験談ですが、リダイレクトがうまくいかない場合があります私にとっては、次のように目的のリダイレクトを行うことができました。

function redirect_to_edit_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == "page_article_node_form") {
        //$form['actions']['submit']['#submit'][] = '_redirect_to_edit';
        $form['#action'] = '?destination=node/' . $form['nid']['#value'] . '/edit';
    }
}
于 2015-03-07T15:39:31.320 に答える