1

「高度な検索」ツールとして使用しているビューがあります。これは、適切な場所にある公開フィルターの数によって制限される関連ノードのリストを提供するだけです。特に、ノード タイトルをフィルター処理するメインの検索ボックスとして機能する "キーワード" 公開フィルターがあります。現在、ユーザーにより多くの検索結果を提供するためのオプションとして、ノードのタイトル本文の両方を同時に検索するために、このフィルターを切り替える機能 (チェックボックスなどで想定) のリクエストがありました。

私は現在、2 つのディスプレイで設定されたビューを持っています。1 つはノード タイトルのみでフィルタリングし、もう 1 つはViews Orを使用してノード タイトルまたはノード本体のいずれかにキーワードを持つノードに結果を制限します。単独では、これらのディスプレイはどちらも私の思いどおりに機能しています。

私の質問は、チェックボックスなどを使用してこれら 2 つの表示を切り替える方法です。両方の表示が視覚的に同一に見えるため(唯一の違いは、フィルターがより多くの/より少ない結果を含めるように構成されていることです)、ユーザーを混乱させるため、ビュー表示タブを使用したくありません-さらに、一部を壊すAJAXを使用します(ほとんどの場合小さな)ビューの動作に対してjQueryを介して行った変更。

私が達成したいのは、本質的に、ビューが送信されたときの条件付きチェックです。チェックボックスが選択されているかどうかに応じて、引数はいずれかのディスプレイに送信されます。これを達成する方法について何か提案はありますか?

4

1 に答える 1

1

これを行う方法の 1 つは、公開されたフィルター フォームにカスタムの検証ハンドラーを追加することです。これにより、理論的には、値を確認し、要求を別のページ表示に適切に転送できるようになります。公開されたフィルターは URL で $_GET 変数として公開されるため、フィルターが事前定義された特定のページにユーザーを転送するのは簡単です。

<?php

function mymodule_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {
    case 'views_exposed_form':
      // Deterimine the ID so you only do this
      // to a specific exposed filter form
      // drupal_set_message($form['#id']);
      if ($form['#id'] == 'views-exposed-form-api-search-page-1') {
        // You might also want to add the checkbox FAPI item in this area
        $form['#validate'][] = 'mymodule_api_search_validate'; // custom validate handler function name
      }
    break;
  }
}

function mymodule_api_search_validate($form, &$form_state) {
  // Check if the FAPI item has the specified checkbox value
  if ($form_state['values']['options'] == 'title') {
    // The get variables to pass to the views exposed filters
    // You can configure what this $_GET variable should be while editing the filter
    $query = array(
      'query' => 'the search query',
    );
    drupal_goto('api/search', $query);
  }
}

?>
于 2012-04-29T23:59:05.677 に答える