drupal 複数のtermを指定していると、texonomy/term/n/allで重複されて検出される件
By 投稿日:2008年 2月 10日
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対策」
- drupal(term 2)
- 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