2009年11月1日星期日

在 Drupal 中分隔分類和標籤顯示出來


有用過 WordPress 的用戶都應該知道分類 (Category) 和標籤 (Tag) 的用途,要用 Drupal 做分類和標籤功能當然沒有問題啦,只要新建兩個分類,一個叫 "文章分類" 另一個叫 "標籤" ,而標籤選 "自由分類" 就能做到和標籤同樣隨意輸入的效果。

但還有一個問題需要解決,就是顯示在文章中了,假設一篇文章中建立了 "電腦軟體" 的分類,同時建立了 "文書處理" 和 "Office" 的標籤的時候,很多 Drupal 的主題 (Theme) 都只會同時顯示出分類和標籤,而不會被分隔開。

因為在 Drupal 還無論我建立多少個分類,Drupal 都只會當作主分類 (Vocabulary) 和子分類 (Taxonomy) ,要在文章中將 "分類" 和 "標籤" 分隔顯示出來,就需要修改主題的 node.tpl.php 檔案了。

一般 Drupal 主題只會用一個 <?php print $terms ?> 來顯示文章中所有的分類 (Term) ,就算同一文章中有多個主分類 (Vocabulary) 的分類 (Term) 都好,還是會將所有分類 (Term) 一同顯示出來,print $terms 不會幫你將主分類分門別類顯示出來。

例如你在 Drupal 中建立了一個內容類型 (node type) ,這個類型叫作 blog,建議在主題中建立又或用 node.tpl.php 複製一個 node-blog.tpl.php ,用來只顯示 blog 的文章模版。

將下列兩段代碼取代 node-blog.tpl.php 的 <?php print $terms ?> ,兩段代碼一段是 "分類" 別一段是 "標籤"。

下列這段是分類:
<!-- Display categoies trems begin -->
<?php
  $vid = 2;
//在上方填寫分類 vid
  $result = db_query("SELECT t.tid, t.name FROM {term_data} t, {term_node} r WHERE r.tid = t.tid AND r.nid = %d AND t.vid = %d ORDER BY weight, name", array($node->nid, $vid));
  while ($term = db_fetch_object($result)) {
    $cats[] = l($term->name, 'taxonomy/term/' . $term->tid);
  }
  if ($cats) {
    print t("<b>分類:</b> ") . implode(' | ', $cats);
  }
//在上方 .implode(' | ') 中的 | ,你可更改它,用來顯示多個分類的分隔符號
?>
<!-- Display categories terms end -->       

 下列這段是標籤:
<!-- Display tag terms begin -->
<?php
  $vid = 3;
  $vid = 3;
//上方標籤的 vid ,填寫標籤的 vid ,兩個填寫相同
  $result = db_query("SELECT t.tid, t.name FROM {term_data} t, {term_node} r WHERE r.tid = t.tid AND r.nid = %d AND t.vid = %d ORDER BY weight, name", array($node->nid, $vid));
  while ($term = db_fetch_object($result)) {
    $ntags[] = l($term->name, 'taxonomy/term/' . $term->tid);
  }
  if ($ntags) {
    print t("<b>標籤:</b> ") . implode(' , ',$ntags);
//在上方 .implode(' ,') 中的 , ,你可更改它,用來顯示多個標籤的分隔符號
  }
?>
<!-- Display tag terms end -->

0 留言:

發佈留言