在網站中,用 Views 建立一個區塊(block),專門條列出某個 term 最新的 node title,例如有個 term 叫「新聞」,而區塊叫「最新新聞」,則這個區塊就是顯示最新的十條新聞標題。現在想要做個功能出來,當使用者點其中一篇node,則區塊就變成以此node為中心,列出前後幾篇的新聞,每次點選不同的新聞,則條列的新聞也會跟著調整。要如何做呢?下面開始介紹:

  首先新建一個區塊,區塊的說明及標題自行設定,在區塊內容中貼上:

<div class="XXXXXX">
<?php

if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
  $nodeId = arg(1);
}
if ($nodeId<1){$nodeId=1;}

$sql = "(SELECT nid FROM node INNER JOIN term_node ON node.vid = term_node.vid WHERE term_node.tid = 13 AND node.nid > ".$nodeId." ORDER BY nid ASC LIMIT 0,4)
UNION
(SELECT nid FROM node INNER JOIN term_node ON node.vid = term_node.vid WHERE term_node.tid = 13 AND node.nid <= ".$nodeId." ORDER BY nid DESC LIMIT 0,6) ORDER BY nid DESC";

$result = db_query($sql);
WHILE ($data = db_fetch_object($result)){
  $node = node_load($data->nid);
  if ($node->nid == $nodeId){
    echo "<strong>".$node->title."</strong><br />";
  }ELSE{
    echo l($node->title, "node/".$node->nid)."<br />";
  }
}

?>

</div>

「13」是我要特別挑選出來的 term 的 id,改成想要的term id即可。而這個是直接去資料庫撈資料出來,應該還有更方便的方法,不過我還沒有研究出來。上面這段程式碼是先取得目前顯示的 node 的 nid,再由 nid 去抓標題,抓取的原則是現在的node往前取4個(nid 大於現在的),往後取6個(nid 小或等於現在的)(限定在同一個 term id 的 node),加上現在的總共十個node,排序是以 node id為主。

  接下來是設定區塊顯示的時機,在區塊設定的地方,最下面有一個「特定頁面的顯示設定」,點選第三個 PHP模式,然後貼上下面的程式碼到文字方塊中:

<?php
$match = FALSE;

if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) { $nodeId = arg(1); }

if ($nodeId<1){$nodeId=1;}

$sql = "SELECT term_node.tid AS tid FROM node INNER JOIN term_node ON node.vid = term_node.vid WHERE node.nid = ".$nodeId;

$result = db_query($sql);
WHILE ($data = db_fetch_object($result)){
  $tid = $data -> tid;
  if ($tid == 13){
    $match = TRUE;
  }
}
return $match;
?>

「13」也要改成特定的term id。上面的程式碼是取得 node 的 nid,再去資料庫抓該 node 的 term id,當此 term id 與你設定的 term id 相同時,則顯示此區塊。因此,我們也可以利用相反的設定($match的參數互換),來關閉特定的區塊,這樣就可以做到兩個區塊的切換動作了。

  由於這種作法是直接去抓資料庫裡的資料,不清楚這樣的作法是否會有風險,所以使用時請注意。

 

同步分享於Drupal Taiwan

創作者介紹

緒含的部落格

senkao 發表在 痞客邦 PIXNET 留言(0) 人氣()