Drupal 7ファセット検索:常にファセットを表示


7

searchapi、facetapi、およびentityapiを使用するファセット検索機能があります。これを開発したのは私ではありませんが、Drupalでの経験はあります。現在、ナビゲーションは選択にリンクを使用しており、以下のようになります(箇条書きの最初のレベルはリンクではありません)。ミキシングを選択すると、サウンドデザインと構成が予想どおりに消えます。

クライアントが望んでいるのは、ユーザーがドリルダウンしても(何も返されない場合でも)すべてのアイテムが表示され、選択可能なままであることです。一度に選択できるのは、カテゴリごとに1つの項目だけですが、ユーザーは「戻る」ことなく選択できるはずです。
アドバイスは大歓迎です。

  • 私達がすること_
    • 混合(18)
    • サウンドデザイン(11)
    • 構成(6)
  • 私たちは誰ですか_
    • ジョー・シュモー(17)
    • ジェフ・ブレック(14)
    • デビッドベリー(4)
  • 所属作曲家_
    • ジム・キャリー(3)
    • トニー・マロニ(2)

回答:


8

下のadmin/config/search/search_api検索インデックスをクリック「編集」と「ファセット」を選択します。次に、アイテムの説明された動作が必要なすべてのファセットについて、次の手順に従います。

  1. 「ディスプレイの設定」をクリックします。
  2. [グローバル設定]セクションで、[最小ファセット数]を0(ゼロ)に変更します。おそらく、この入力フィールドは「最小ファセットアイテム数」と呼ばれるべきです…
  3. 「構成の保存」。

これで、一致しないすべてのファセットアイテムがファセットリストに残ります(カウントは0)。すでに述べたように、このようなファセットアイテムをクリックしても、検索結果は返されません。


うーん、私のインストールにリストがちょうど...項目をクリックしたときに(1つだけのアイテムが残っていると言うことではない)縮小し続ける
ミシェル

@ミシェル・フム、それは変だ。私は自分のサイトでそれをもう一度試したところ、問題なく動作しました。2つの異なるファセットの「最小ファセットカウント」を変更しても0機能します。最初のファセットのアイテムを選択すると、2番目のファセットのアイテムは更新されますが、消えることはありません。以前は消えていたはずのすべてのファセットアイテムの末尾に「(0)」マーカーが付いています。
Chriki 2013

お返事をありがとうございます!私のインストールでは、そのアイテムをクリックすると1つのアイテムしか残りません...この奇妙な動作の原因は何でしょうか?
ミチエル2013

@ミシエル私は恐れています、私には
わかり

1
はい、最初のコメントで混乱してしまい申し訳ありません。実際、あなたが私のために作品を探している振る舞い(つまり、すべてのファセットアイテムを常に表示し続ける)。私は、望ましい振る舞いが複数の側面にわたって私にとって機能することを指摘したかっただけです。
Chriki 2013

1

このコメントの解決策はあなたの問題の解決策だと思います。template.phpで、theme_facetapi_link_inactive-functionを上書きします。

function theme_facetapi_link_inactive($variables) {
  // Builds accessible markup.
  $accessible_vars = array(
    'text' => $variables['text'],
    'active' => FALSE,
  );
  $accessible_markup = theme('facetapi_accessible_markup', $accessible_vars);

  // Sanitizes the link text if necessary.
  $sanitize = empty($variables['options']['html']);
  $variables['text'] = ($sanitize) ? check_plain($variables['text']) : $variables['text'];

  // Adds count to link if one was passed.
  if (isset($variables['count'])) {
    $variables['text'] .= ' ' . theme('facetapi_count', $variables);
  }

  // Add functionality requested in #1669600.
  if (!$variables['count'] && isset($variables['options']['query']['f'])) {
    // We should be getting this from the url processor plugin, however we are
    // making an assumption since this is in our custom theme.
    $params = &$variables['options']['query']['f'];

    // Capture the filter associated with this link and find the field alias.
    $filter = end($params);
    $field_alias = substr($filter, 0, strpos($filter, ':')) . ':';

    // Iterate over params and strip out items that are using the same field
    // alias as this filter. Do not strip out this filter.
    foreach ($params as $key => $param) {
      if (0 === strpos($param, $field_alias) && $param != $filter) {
        unset($params[$key]);
      }
    }
  }

  // Resets link text, sets to options to HTML since we already sanitized the
  // link text and are providing additional markup for accessibility.
  $variables['text'] .= $accessible_markup;
  $variables['options']['html'] = TRUE;
  return theme_link($variables);
}

0

これがこの問題に対する私の回避策です。コーディングは必要ありません。

  • 検索インデックスに基づいてビューを作成する
  • ファセットブロックをビューに追加し、必要なファセットフィールドを使用するように構成します。分類法ツリーがある場合は、すべての親の用語フィールドを使用してトップレベルのみを表示できます。
  • サイトに表示されるようにブロックを構成する

検索がアクティブになっているので、他のファセットブロックもどこにでもあります。必要に応じて、作成したブロックをcssで非表示にできます。

grts

フレデリックwbase


理由はわかりませんが、私の場合、ファセットブロックで使用するフィールドを選択すると、いくつかのファセットしか表示されません。すべてのアイテムを表示するようにビューを設定しました。ファセット構成にも制限はありません
Math666

0

ことを保証するためにすべての項目が表示および選択のまま、グローバル設定検索は「OR」に設定されていることを確認してください。管理メニューから、[設定]> [検索API]> [インデックスの名前]の[編集]リンク>ファセット(タブ)> [ファセットの名前]の[ディスプレイの構成]リンクに移動し、[グローバル設定]で[演算子]または[OR]を選択します。(「最小ファセット数」を1に維持)

すべてのファセットブロックが表示されたままになるようにするには、各ファセットブロックの構成ページで、ファセットが指定されたページに表示されていることを確認してください。[構造]> [ブロック]> [ファセットブロックの名前]の[構成]リンクに移動します。例えば:

サービス
services / *

ユーザーはドリルダウンできます。前に戻ることなく、ユーザーはファセットアイテムの選択を解除するだけで済みます。オプション「1つのアクティブなアイテムに制限する」は、現在のところ、私の経験に基づいて構成するとうまく機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.