web-dev-qa-db-ja.com

表示されたビューのフィルターを検索と組み合わせる方法は?

私のクライアントは私に単一のフィールドを要求しました、それは2つの方法で機能します:

  • 分類法に基づくオートコンプリートフィルター。
  • サイトの訪問者が分類にないものを入力した場合、コンテンツの本文に対して全文検索を実行し、適切な情報メッセージを表示する必要があります。

そうすれば、ユーザーがカテゴリ名を入力すると、手で選択されたノードが一覧表示されます。それ以外の場合は、少なくともいくつかのコンテンツが表示されます。

別に、それは簡単です。しかし、これらの動作を1つのフィールドに組み合わせるにはどうすればよいでしょうか。

18
Mołot

Finder モジュールは要件を正確に実行します。分類の用語だけでなく、ノードのタイトル、本文、フィールドなどを選択して、検索を実行できます。

Finderの機能を組み合わせて、必要な種類の検索フォームを取得する方法はたくさんあります。 Finderの出力の完全なカスタマイズを可能にする多くのフックとテーマ関数もあります。

次の目的で使用されます。

As a search tool to find a group of nodes or users.
As a way to navigate to a specific node or user page that matches criteria.
As an alternative to exposed filters for a Views module display.

以下のスクリーンショットを参照してください。Finderフィールドでは、分類用語とノード本体を選択して、オートコンプリートの公開フィールドで検索を実行できます。コンマで区切られた複数のキーワード検索を実行できます。詳細は Finderのドキュメント を参照してください。

enter image description here

要素を追加したら、リストからFinder fieldsを選択できます。

分類用語およびノードを選択するCtrlキー:ノード:ボディ

17
Bala

私はテストせずに書いていますが、少なくとも出発点としてそれを使用できると感じています。

Views Field View モジュールを使用すると、ビューを別のビューに埋め込むことができ、コンテキストフィルターを埋め込みビューに渡すこともできます。

あなたの場合、与えられたフィルターを検索するコンテキストフィルターを持つ別のビューを作成します。その点については、コンテキストフィルターで検索できるかどうかはわかりませんが、「検索:用語」などのオプションをいくつか見ました。

そうは言っても、この最初のステップをとにかく達成できれば、残りは比較的簡単です。

元のビューで、詳細オプションセクションの下に「結果の動作なし」を追加し、「グローバル:ビュー(ビューフィールドビュー)」を追加して、以前に作成したビューを選択し、公開されたフィルターのトークンを埋め込みビューに対するコンテキストフィルター(置換パターンのリストでトークンを見つけることができます)。

3
Елин Й.

上記のディスカッションを終えましたが、おそらく以下のシナリオで、「公開されたビューとフィルターを組み合わせる方法」という投稿に対処できます。実装には、カスタムコーディングが必要です。

  1. URL http://www.seedandspark.com/studio を検討してください。
  2. ここでは、左側に検索フォームがあります。これはカスタムフォーム(form_id = 'sns_studio_form_filter')。
  3. コンテンツ領域には約7〜8のビューブロックとすべての動的情報の生成があります(匿名ユーザーの場合は3ブロックのみ)
  4. これで、各ビューブロックで有効化されたフィルターが公開されました。
  5. これらの公開されたフィルターを非表示にしました
  6. ビュー公開フィルターを使用するときは、URL構造をメモしておきました
  7. カスタムフォーム送信ハンドラーでは、カスタムフォームのフィールドから情報を取得し、手順6でメモしたのと同じようなURLを生成します。最後に、そのURLにリダイレクトします。送信ハンドラでは、次のようになります::

    $form_state ['redirect'] = array(
      $path, 
      array(
        'query' => $params // $params is the url
      )
    );
    drupal_redirect_form( $form_state );
    

したがって、ステップ7が実行されると、すべてのビューブロックが、設定したフィルター基準に基づいてフィルターされます。

それが役に立てば幸い。

3
dhrubaj

それを行う別の方法もあります: Concat Field モジュールを試すことができます。基本的にはフィールドをコンテンツタイプに追加し、このフィールドによるフィルターを検索として使用できます。

Finderとよく似ていると思いますが、言及する価値はあります。

3
32i