web-dev-qa-db-ja.com

階層を持つ分類用語のカスタムビューとしての検索インデックス。分類法メニューで用語親のすべての子の結果を表示

タイトルはかなり壮大ですが、次のようになります。主な要素:ビュー、taxonomy_menu、分類、検索API、ファセット。

私はボキャブラリー「製品」(Drupal Commerceですが、それは重要ではないと思います)を作成しました。「化学」という用語は、他のより具体的な用語のツリーのルートになるはずです。いくつかの製品を追加しました。次に、Taxonomy Menuを有効にしてメニューを作成しましたが、これまでのところ良好ですが、検索APIを使用したかったので、パス付きの検索インデックスのビューを作成しました。

/ taxonomy/term /%

そうすることで、分類法のビューをオーバーライドして、その中にファセットを持つことができるようにしたかったのです。また、インデックス付きの用語のある製品は完全に表示されますが、子供向けの用語のすべての製品は表示されません。したがって、「化学」という用語がある場合(クリックした後)、その子の用語のすべての製品を表示できるようにしたいと考えています。私のビューには検索インデックスが表示されているため、コンテキストフィルターがないため、現在のアプローチでこれを行う方法を確認できません。

私に何ができる?

3
Łukasz Zaroda

私があなたの質問を正しく理解しているなら、ここにいくつかのヒントがあります。

定義した検索インデックスの下で、フィールドに移動します。 「製品」分類法を定義している場合は、分類法用語のチェックを外し、下部に移動して「関連フィールドの追加」を開き、「製品」を追加して、変更を保存します。リロードすると、分類オプションが増えます。 「製品>>すべての親規約」を確認してください。これで、親/子の用語に追加のファセットが必要です。

さらに強力な使用法のために Facet API Pretty Paths と組み合わせて使用​​します。それの使い方について my other response の1つを見てください。

4
kyletaylored

カスタムモジュールで以下を使用すると、保存時に親用語がノードに自動的に追加されます。

/*
 * Implements hook_node_presave().
 */
function MYMODULE_node_presave($node) {
  // Get the taxonomy terms.
  if ($terms = field_get_items('node', $node, 'MYVOCABULARY')) {
    $tids = Array();
    foreach ($terms as $term) {
      // Add the term to a list of tids.
      $tids[$term['tid']]['tid'] = $term['tid'];
      // Get the parents of the taxonomy term.
      $parents = taxonomy_get_parents($term['tid']);
      foreach ($parents as $parent) {
        // Add the parents to a list of tids.
        $tids[$parent->tid]['tid'] = $parent->tid;
      }
    }
    // Add the list of tids to the node.
    $node->MYVOCABULARY['und'] = $tids;
  }
}
1
James

カイルテイラードの方向は正しかった。

しかし、私はadmin/config/search/search_api/index/product_display/workflow(product_displayは製品表示インデックスDBの私のマシン名です)チェックボックスインデックス階層をチェック。コンテンツのインデックスを再作成するadmin/config/search/search_api/index/product_display/status

それで全部です。

1
Voloda86