[小片段程式碼] 列出某一分類的最新文章標題

使用方式
可以開一個新的block,內容填下這段程式碼,也可以開一個新的文章允許php語法

版本
4.6, 4.7

程式碼:
<?php
$posts = 8;  // number of post to list
$tid = 74;   // a taxonomy term id

$result = db_query_range('SELECT n.title, n.nid FROM {node} n 
            INNER JOIN {term_node} tn ON n.nid=tn.nid WHERE tn.tid = %d 
            ORDER BY n.created DESC', $tid, 0, $posts);
while($n = db_fetch_object($result)){
  $content .= '<div>'.l($n->title, "node/$n->nid").'</div>';
}

echo $content.'<br>';
echo l(t('more').'...', "taxonomy/term/$tid");
?>

執行效果:

更多...
charlesc 的照片

問一下,如果還要列出teaser的話呢?

jimmy 的照片

teaser,4.6和4.7有重大的變動
另外,4.6的方法在這兒不試用...

DrakeGuan 的照片

野人獻曝一下,我們

野人獻曝一下,我們來試試怎麼使用 Views 這個 module 完成這件事:

* 新增一個 view
* 在 Basic Information 下
** Name 隨便給
** Access 不用設,這樣所有的 role 都可以存取到
* Page
** 把 Provide Page View 勾起來
** Url 自行給個名字
** View Type 先給它 Teaser List
** Use Pager 不要勾
** Nodes per Page 給個數字,例如 10。
* Filters
** 新增三個 filters, 分別是 "node published", "taxonomy: vocabulary name" 和 "node: distinct",其中第二個 filter 可以改成 "taxonomy: term"
* Sort Criteria
** 新增一個 "node: created time", 把它的值設為 "descending"

這樣就算完成了。

如果把 View Type 改為 "List View" 或是 "Table View",就要記得到 Fileds 裏頭,告訴它你要秀出來的欄位為何(ex, title, created time, node type....),就可以秀出和 jimmy 的程式一樣的結果了。

jimmy 的照片

挺好的,我終於開始

挺好的,我終於開始比較能理解views了。

聽說views是寫程式人員最愛,和cck一樣是令人驚豔呢...

Oscar0410 的照片

Re: 野人獻曝一下,我們

謝謝你的教學唷...
從你的這篇我終於大致了解views的基本設定了..
也順利的做出一些想要的效果了...感恩ㄚ^^

Oscar0410 的照片

Re: 野人獻曝一下,我們

想請問drakeguan大.
我使用views使用分類..大致分類舉例如下:
1.休閒 2.生活 3.藝術 .........
請問有什麼辦法可以當我在該分類新增文章時會顯示有幾篇文章嗎?
像這樣:
1.休閒(12) 2.生活(56) 3.藝術(9)..

請指導一下...謝謝^^

charlesc 的照片

剛找到這個4.7版的程式碼可以用:
Creating a paged list of nodes from a taxonomy category, with teasers.

Hipfox 的照片

上面那一段SQL執行後會

$result = db_query_range('SELECT n.title, n.nid FROM {node} n
            INNER JOIN {term_node} tn ON n.nid=tn.nid WHERE tn.tid = %d
            ORDER BY n.created DESC', $tid, 0, $posts);

這一段會把指定分類中的所有node全部列出,這樣連尚未發表的文章也會顯示出來。

修改後如下:

$result = db_query_range('SELECT n.title, n.nid FROM {node} n
            INNER JOIN {term_node} tn ON n.nid=tn.nid WHERE n.status = 1 AND tn.tid = %d
            ORDER BY n.created DESC', $tid, 0, $posts);

在 WHERE 後面加上 n.status = 1 的過濾條件,如此尚未發表的文章才不會列出來。