0

現在、製品カテゴリの並べ替え機能 (公開フィルター) を備えたビューと Drupal Commerce モジュールを使用した製品ページがあります。ドロップダウン リスト/選択リストを含むフォームには GET メソッドがあるため、カテゴリ ID が URL に追加されます。私の目標は、URL の末尾に追加されたカテゴリ ID だけではなく、URL に追加されたカテゴリ ID を取得し、ユーザーを特定の製品ページにリダイレクトすることです。

この問題に関する回答をグーグルで検索しましたが、どれも機能していません。そこで、hook_form_alter モジュールを実装するカスタム モジュールを作成しました。カスタム送信ハンドラーをフォームに追加して、最初のフォーム送信後に、URL からカテゴリ ID を取得するために別の送信がトリガーされ、ユーザーを特定のページにリダイレクトするようにしました。モジュールの私のコードは以下の通りです。

function custom_form_submit_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == 'views_exposed_form') { 
         $form['#submit'][] = 'my_custom_handler_submit';
    }   
}


function my_custom_handler_submit(&$form, &$form_state) {
    if ($_GET['field_categories_tid'] == 13) {
         $form_state['redirect'] = '/products/furnitures';
         }
}

最初の関数は、Devel モジュールを有効にして kpr($form) を実行したときに、フォームの値を返すように機能します。2番目の機能はまったくトリガーされていないようです。私はこれに数日間立ち往生しており、たくさんの調査を行った後、実際には理解できませんでした. 私は Drupal に比較的慣れていないので、誰かがこれに光を当ててくれることを期待しています。あなたの助けは大歓迎です!

4

3 に答える 3

1

これで問題は解決したと思います。誰かが将来同じ問題に遭遇した場合に備えて、私がしたことは次のとおりです。$form_state['no_redirect'] がデフォルトで TRUE に設定されているため、カスタム送信ハンドラーがトリガーされませんでした。そこで、URL にカテゴリ ID が含まれている場合、$form_state['no_redirect'] = FALSE という条件ステートメントを作成しました。次に、カスタム送信ハンドラーがトリガーされます。これが役立つことを願っています。

于 2012-11-16T21:27:59.113 に答える
0

フック名に問題がある

カスタム_form_submit_form_alter

my_custom_handler_submit _

どちらが良いかはわかりませんが、同じである必要があります

それが役に立てば幸い

広報

于 2012-11-16T18:42:07.970 に答える
0

関数がリダイレクトされる前に実行されるデフォルトの送信関数は、form_alter を介してアタッチした関数にジャンプできなかった可能性があります。最初に関数を呼び出すことで、これを並べ替えることができます

$temp = $form['#submit'][0];
$form['#submit'][0] = 'my_custom_handler_submit';
$form['#submit'][1] = $temp;
于 2012-11-16T18:58:05.837 に答える