icon: module

drupal 複数のtermを指定していると、texonomy/term/n/allで重複されて検出される件

drupalの taxonomyは、要素である termが、親 termを持つ事が可能であり、それによって構造的な分類区別を行う事が可能である。

そして、Nodeは複数の termに属する事が出来る。さらに検索時には、URLに taxonomy/term/[tid]/allと指定すれば、[tid]の子termに属する全ての Nodeを検出する事が出来る。しかし、この様に、taxonomy/term/[tid]/all(若しくはtaxonomy/term/[tid]/[depth])を指定した場合、複数の子 termに属する Nodeが存在すると、その Nodeは属する子 termの数だけ表示されてしまう。以下例。

  • Web(term 1)
    • drupal(term 2)
      • Node「drupalのspam対策」
      • Node「drupalインストール」
    • span(term 3)
      • Node「drupalのspam対策」
  • Windows(term 4)

term「Web」は、term「drupal」「spam」を持ち、Node(記事)「drupalのspam対策」は、term「drupal」「spam」の両方に属する。この場合、taxonomy/term/2/allを実行すると、Node「drupalのspam対策」が 2つリストされてしまう。

  • Node「drupalのspam対策」
  • Node「drupalのspam対策」
  • Node「drupalインストール」

この現象を簡単に解決してみた。おそらく drupalの作法的によろしくない解決方法であり、尚且つ副作用が発生する可能性もある為、お勧めはしません。

viewsモジュールの views_query.inc 301行から304行の「$primary_table.$primary_field」を「DISTINCT」で囲む。

    if ($primary_field) {
      $this->fields = array($alias_prefix ."DISTINCT($primary_table.$primary_field)");
    }
    $this->count_field = $alias_prefix ."DISTINCT($primary_table.$primary_field)";

このサイトで利用中の drupalに適用しており、問題なく動いているようだが、この修正を施し、なんらかの障害が発生しても、当方は一切の責任を持てませんので御了承ください。

動作確認モジュール

  • Drupal 5.7
  • views_query.inc,v 1.51.2.11 2007/04/12 15:18:59

この記事のトラックバックURL:

http://diary.haz.jp/trackback/78