2012-04-29 9 views
1

私は、「高度な検索」ツールとして使用しているビューを持っています。これは、適切な数の公開されたフィルタによって制限される関連ノードのリストを提供するだけのものです。特に、私は "キーワード"露出フィルタを持っています。このフィルタはメインの検索ボックスとして機能し、ノードのタイトルをフィルタリングします。今度は、このフィルタをチェックボックスなどを使って切り替えて、ノードのタイトルの両方を同時に検索する機能をリクエストしました。これは、ユーザーにさらに検索結果を提供するオプションです。Drupal 6ビュー:チェックボックスでフィルタのオン/オフを切り替えますか?

現在のところ、ノードタイトルだけをフィルタリングするビューと、Views Orを使用してノードタイトルまたはノード本文のいずれかのキーワードを持つノードに結果を限定するビューの2つのビューが表示されます。それだけで、これらのディスプレイはどちらも私が望むように動作しています。

私の質問は、これらの2つのディスプレイをチェックボックスなどを使って切り替える方法です。私はViews Display Tabsを使用したくありません。両方のディスプレイが視覚的に同じに見えます(唯一の違いは、フィルタがより多くの結果を含むように構成されているためです)ビューの振る舞いにjQueryを使って行った変更。

私が達成したいのは、本質的には、ビューがサブミットされたときの条件付きチェックです。チェックボックスが選択されているかどうかによって、引数は1つのディスプレイまたは他のディスプレイに送られます。どのようにこれを達成するための任意の提案?

答えて

1

これは、理論上、値をチェックして要求を別のページの表示に適切に転送できるようにする、公開されたフィルタフォームにカスタムの検証ハンドラを追加することです。公開されたフィルタは$ _GET変数としてURLに公開されているため、事前定義されたフィルタを使用して特定のページにユーザーを転送するだけで十分です。

<?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); 
    } 
} 

?> 
+0

フィルタをブロックとして公開し、次に2つの異なるビュー結果に表示するように表示を制御し、再帰的に使用できるようにすることをお勧めします。 –

関連する問題