免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
不使用views,如何自定義節(jié)點列表顯示頁面 | Drupal China

這篇文章針對drupal5寫的,在drupal6里,有些查詢數據庫方式改變了,現在做個一些修正,讓下面的方法適用于drupal5.x和drupal6.x。

基本上,views和cck是大家都建議用的兩個drupal模塊,因為這兩個模塊太強大了,一個可以自由定制字段,一個可以自由過濾數據用以顯 示, drupal的許多其它模塊都是基于這兩個的。正因其強大,所以也龐大,龐大耗費資源,相對來說,配置起來也較復雜。對于一些把drupal做為個人博客 來用的朋友來說,通常不想使用這兩個模塊,但drupal默認就只有一種排列文章的方式,按時間發(fā)表順序,而bloger們可能就需要有多一些的排列顯示 方式。

這個時候可以用查詢數據庫再配合drupal的一些核心函數來達到簡單過濾顯示的目的。舉個例子吧,用習慣了國內cms的朋友,都喜歡在首頁上顯示一些區(qū)塊,什么最新文章、最新推薦、最新評論、熱門文章……

咱們先創(chuàng)建一個page節(jié)點,標題就看你的愛好了,隨便取吧。內容呢,就隨便寫段代碼吧:

<?php
echo ‘嘿羅,世界‘;//反正一般程序測試都這個套路。
?>

然后在輸入格式里選擇php code模式,自定義路徑呢,隨便想一個吧,這兒就定義為:index.html。提交保存,這不就一個“嘿羅世界”嗎?別著急,這只是第一步。

現在進入第二步,到“站點信息(admin/settings/site-information)”中,拉到最后面,把默認首頁設置為咱們剛才創(chuàng) 建的頁面路徑:index.html,好,現在打開網站,發(fā)現默認首頁就?!昂倭_世界”了,忽悠人啊這不是。別急,接下來做第三步。

第三步,開始往里邊添加內容了。我想添加個最新blog文章的列表。drupal區(qū)塊里有個默認的最新blog文章,到區(qū)塊中,查看最新blog文 章的區(qū)塊鏈接是這樣的:admin/build/block/configure/blog/0,注意最后兩層(blog/0),這很重要。這表示這個區(qū) 塊是由blog.module生成的第0個區(qū)塊(從0開始計數的)?,F在我們編輯那篇文章,把里邊的“嘿羅世界”可以刪除了,放這段代碼進去:

<?php
$block
= module_invoke(‘blog‘, ‘block‘, ‘view‘, 0);
echo
$block[‘subject‘];//顯示區(qū)塊的標題
echo $block[‘content‘];//顯示區(qū)塊的主內容區(qū)。
?>

純粹的引用代碼讓人有些糊涂,解釋一下,module_invoke:加載模塊,blog:點名要加載這個;block:區(qū)塊,view:顯示。后面的就 不難理解了,要顯示這個模塊的第0個區(qū)塊。就這么簡單,要直接在文章中插入其它區(qū)塊也是這個方法。現在提交保存,到首頁看看,是不是出現了最新blog文 章的列表(當然,你得先發(fā)表幾篇blog文章)。

我想要顯示其它類型,比如story的最新文章呢?因為默認沒有提供區(qū)塊,所以一般的做法呢是用views來過濾出來,但文章一開頭就說了,咱們不用views。這就進入另一個重點部分,讀取數據庫來顯示。編輯文章,在后面插入這段代碼:

<?php
echo ‘<h2>最新story</h2>‘;//標題隨意
$result = db_query_range("SELECT n.nid, n.title FROM {node} n WHERE n.type = ‘story‘ ORDER BY n.created DESC", 10);
while (
$test = db_fetch_object($result)) {
    echo
l($test->title,‘node/‘.$test->nid).‘<br>‘;
    };
?>

drupal查詢數據庫語句重新定義過,但基本上和mysql手冊上的方法差不多。完整的手冊請看這兒。 現在說我們上面的例子,文章的基本信息都存儲在node這個表里,因為我們只要顯示標題列表,所以查詢title和nid字段,條件呢就是限制為 story類型。你可以把條件改為特定的用戶(uid),或是否推薦(promote)、置頂(sticky),或是否有評論(comment)等等方 式。最后是排序,這個例子中我們按節(jié)點的創(chuàng)建時間倒序,也就是最新文章在前面,數目限制為10條。下面就是一個數組循環(huán)了,在這里邊可以自行排版,添加 css等。

保存,現在看看效果,最新story文章列表是不是出現了呢?而熱門內容呢,statistics模塊也提供了一個按點擊排序的文章列表,我們可 以直接用上面插入區(qū)塊的辦法把它放到頁面里?,F在我們頁面里有最新文章、最新推薦、最新日志、熱門內容、最新評論等區(qū)塊列表了,看起來像那么回事了,接下 來的事就是排版了。這個就取決于個人的審美觀了,熟悉css的就用css,不熟悉的就直接用表格套上去就行了。

可以收工了,可我還想有個more,你看大多數網站的列表下面,不都有個more,點擊進去,顯示更多的內容,并且這里邊的內容還是可以分頁的。好,現在我們來解決這個問題。還是舉例子吧,也想不到其它更好的手段了。先在首頁的列表下面加個more鏈接:

<?php
echo ‘<h2>最新story</h2>‘;
$result = db_query_range("SELECT n.nid, n.title FROM {node} n WHERE n.type = ‘story‘ ORDER BY n.created DESC", 10);
while (
$test = db_fetch_object($result)) {
    echo
l($test->title,‘node/‘.$test->nid).‘<br>‘;
    };
echo
‘<a href="/story/all">更多</a>‘;
?>

就這么簡單?是的,就這么簡單,哈哈。可怎么也得加個判斷吧,萬一只有一篇文章,或者只有0篇文章呢,也顯示個“更多”,那多傻。那就修改一下:
適用于5.x:
<?php
echo ‘<h2>最新story</h2>‘;
$result = db_query_range("SELECT n.nid, n.title FROM {node} n WHERE n.type = ‘story‘ ORDER BY n.created DESC", 10);
if (
db_num_rows($result) > 0) {//加入判斷,查詢結果大于0才顯示;
while ($test = db_fetch_object($result)) {
    echo
l($test->title,‘node/‘.$test->nid).‘<br>‘;
    };
}else {
//否則就顯示
echo ‘沒有文章‘;
}

if(
db_num_rows($result) > 9){//如果等于10篇,就顯示更多鏈接。
   
echo ‘<a href="/story/all">更多</a>‘;
}
?>

db_num_rows在6.x中不能使用,適用于6.x:
<?php
echo ‘<h2>最新story</h2>‘;
$result = db_query_range("SELECT n.nid, n.title FROM {node} n WHERE n.type = ‘story‘ ORDER BY n.created DESC", 10);
$i = 0;
while (
$test = db_fetch_object($result)) {
    echo
l($test->title,‘node/‘.$test->nid).‘<br>‘;
   
$i++;
    };
if(!
$i ){
echo
‘沒有文章‘;
}

if(
$i > 5){
    echo
‘<a href="/story/all">更多</a>‘;
}
?>

提交保存,有了個“更多”鏈接,可點擊鏈接不是“找不到頁面”嗎?別急,下一步。創(chuàng)建一個page節(jié)點,標題就寫個“新聞列表”吧,輸入格式還是選取為 php code,自定義路徑呢,就要和上面的一致了:story/all?,F在要填內容進來了,怎么把這個最新的story文章列表顯示出來呢?
適用于5.x:
<?php
echo ‘<h2>新聞列表</h2>‘;
$result = pager_query("SELECT n.nid, n.title FROM {node} n WHERE n.type = ‘story‘ ORDER BY n.created DESC", 15);
if (
db_num_rows($result) > 0) {//加入判斷,查詢結果大于0才顯示;
while ($test = db_fetch_object($result)) {
    echo
l($test->title,‘node/‘.$test->nid).‘<br>‘;
    };
}else {
//否則就顯示
echo ‘沒有文章‘;
}
echo
‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

適用于6.x:
<?php
echo ‘<h2>新聞列表</h2>‘;
$result = pager_query("SELECT n.nid, n.title FROM {node} n WHERE n.type = ‘story‘ ORDER BY n.created DESC", 15);
$i = 0
while ($test = db_fetch_object($result)) {
    echo
l($test->title,‘node/‘.$test->nid).‘<br>‘;
   
$i++;
};
if(!
$i){
echo
‘沒有文章‘;
}
echo
‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

請注意這一段代碼,和上面其它的對比,有一些變化,首先是db_query_range變成了pager_query,對于有分頁需求的,都使用這個函數 查詢。其次當然是下面多了翻頁函數:theme(‘pager‘, NULL, 15)。在查詢語句中我們定義了數目是15條,翻頁里當然也是設置15條?,F在保存這個節(jié)點,看看,是不是出現了列表,并且有翻頁了(當然,前提是你的 story文章得多于15條,如果不夠多,把15改成2或3試試)。

這個時候可能又會覺得一個列表就顯示個標題,未免太單調了,我還想顯示點作者啊,發(fā)表時間啊,評論數目啊,點擊數量啊等等。好吧,咱們來完成這個需求。
適用于5.x:

<?php
echo ‘<h2>新聞列表</h2>‘;
$result = pager_query("SELECT n.nid, n.title,n.comment, n.created,u.uid, u.name,s.totalcount FROM {node} n INNER JOIN {node_counter} s ON n.nid = s.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = ‘story‘ ORDER BY n.created DESC", 15);
if (
db_num_rows($result) > 0) {//加入判斷,查詢結果大于0才顯示;
while ($test = db_fetch_object($result)) {
echo
‘標題:‘.l($test->title,‘node/‘.$test->nid).
       
‘  作者:‘.l($test->name,‘user/‘.$test->uid).
       
‘  評論:‘.$test->comment.
       
‘  點擊:‘.$test->totalcount.
       
‘  發(fā)表時間:‘.format_date($test->created).‘<br>‘;
    };
}else {
//否則就顯示
echo ‘沒有文章‘;
}
echo
‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

適用于6.x:
<?php
echo ‘<h2>新聞列表</h2>‘;
$result = pager_query("SELECT n.nid, n.title,n.comment, n.created,u.uid, u.name,s.totalcount FROM {node} n INNER JOIN {node_counter} s ON n.nid = s.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = ‘story‘ ORDER BY n.created DESC", 15);
$i = 0;
while (
$test = db_fetch_object($result)) {
echo
‘標題:‘.l($test->title,‘node/‘.$test->nid).
       
‘  作者:‘.l($test->name,‘user/‘.$test->uid).
       
‘  評論:‘.$test->comment.
       
‘  點擊:‘.$test->totalcount.
       
‘  發(fā)表時間:‘.format_date($test->created).‘<br>‘;
              
$i++;
};
if(!
$i) {
echo
‘沒有文章‘;
}
echo
‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

細心的你肯定發(fā)現了,這里使用了多表查詢,因為節(jié)點的點擊量是存放在另外一個表里的,而作者的信息又存在users表里。老套路,提交保存,現在看看列 表,是不是多了作者、評論這些信息。只是排版未免太難看了。那就用css自己調整吧,可我又不想使用css,而且這種列表式的顯示,使用表格更有優(yōu)勢,方 便又快捷。那就用表格吧。這樣改一改:
適用于5.x:
<?php
echo ‘<h2>新聞列表</h2>‘;

$header = array(//這里增加了,先定義個表格頭部
   
array(‘data‘ => ‘標題‘),
    array(
‘data‘ => ‘作者‘),
    array(
‘data‘ => ‘評論‘),
    array(
‘data‘ => ‘點擊‘),
    array(
‘data‘ => ‘發(fā)表時間‘)
  );
$tablesort = tablesort_sql($header);
$result = pager_query("SELECT n.nid, n.title,n.comment, n.created,u.uid, u.name,s.totalcount FROM {node} n INNER JOIN {node_counter} s ON n.nid = s.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = ‘story‘ ORDER BY n.created DESC".$tablesort, 15);
if (
db_num_rows($result) > 0) {//加入判斷,查詢結果大于0才顯示;
while ($test = db_fetch_object($result)) {
   
//這兒不直接打印,而是定義成一個數組了。
$rows[] = array( ‘data‘ =>
            array(
               
l($test->title,‘node/‘.$test->nid),
               
l($test->name,‘user/‘.$test->uid),
               
$test->comment,
               
$test->totalcount,
               
format_date($test->created),
            ),
        );
    };
}else {
//否則就顯示
echo ‘沒有文章‘;
}
echo
theme(‘table‘, $header, $rows);//這兒打印出表格。
echo ‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

適用于6.x:
<?php
echo ‘<h2>新聞列表</h2>‘;

$header = array(//這里增加了,先定義個表格頭部
   
array(‘data‘ => ‘標題‘),
    array(
‘data‘ => ‘作者‘),
    array(
‘data‘ => ‘評論‘),
    array(
‘data‘ => ‘點擊‘),
    array(
‘data‘ => ‘發(fā)表時間‘)
  );
$tablesort = tablesort_sql($header);
$result = pager_query("SELECT n.nid, n.title,n.comment, n.created,u.uid, u.name,s.totalcount FROM {node} n INNER JOIN {node_counter} s ON n.nid = s.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = ‘story‘ ORDER BY n.created DESC".$tablesort, 15);
$i = 0;
while (
$test = db_fetch_object($result)) {
   
//這兒不直接打印,而是定義成一個數組了。
$rows[] = array( ‘data‘ =>
            array(
               
l($test->title,‘node/‘.$test->nid),
               
l($test->name,‘user/‘.$test->uid),
               
$test->comment,
               
$test->totalcount,
               
format_date($test->created),
            ),
        );
   
$i++;
    };
if(!
$i) {
echo
‘沒有文章‘;
}
echo
theme(‘table‘, $header, $rows);//這兒打印出表格。
echo ‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

提交保存,現在看一看頁面,是不是都在一個表格里,排版都省了,整整齊齊。這樣就差不多了吧,又有了區(qū)塊,又有了列表頁。不過,也許你突然又覺得全是標題 列表有也點單調,還想看看摘要顯示是什么效果。咱們就來把標題列表改為摘要模式,這個更簡單一點,直接使用node_view和node_load,這兩 個函數,只要你告訴它節(jié)點nid,它就能加載節(jié)點的摘要或全文視圖了。省得麻煩,就直接還是用這個新聞列表頁來做試驗吧。編輯節(jié)點,放入這段代碼:
適用于5.x:
<?php
echo ‘<h2>新聞列表</h2>‘;
$result = pager_query("SELECT n.nid FROM {node} n INNER JOIN {node_counter} s ON n.nid = s.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = ‘story‘ ORDER BY n.created DESC", 15);
if (
db_num_rows($result) > 0) {//加入判斷,查詢結果大于0才顯示;
   
while ($test = db_fetch_object($result)) {
       
$output .= node_view(node_load(array(‘nid‘ => $test->nid)), 1);//這兒的1或0是全文或摘要。
  
};
}else {
//否則就顯示
   
echo ‘沒有文章‘;
}
echo
‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

適用于6.x:
<?php
echo ‘<h2>新聞列表</h2>‘;
$result = pager_query("SELECT n.nid FROM {node} n INNER JOIN {node_counter} s ON n.nid = s.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = ‘story‘ ORDER BY n.created DESC", 15);
$i = 0;
    while (
$test = db_fetch_object($result)) {
       
$output .= node_view(node_load(array(‘nid‘ => $test->nid)), 1);//這兒的1或0是全文或摘要。
               
$i++;
   };
if(!
$i) {
    echo
‘沒有文章‘;
}
echo
‘<p>‘.theme(‘pager‘, NULL, 15).‘</p>‘;
?>

注意幾個變化,首先要查詢數據庫的時候,只需要節(jié)點nid就行了。其次是在數組循環(huán)時,直接用node_view和node_load來顯示出文章。這兒就用不著排版了,全部是按照你在node.tpl.php中定義的樣式來顯示。

現在終于可以結束了,好像在節(jié)點組織顯示方面,也沒其它的需求了。上面的內容我是一邊試驗一邊寫下來的,在5.x版本上,應該不會有錯誤。本來準備 截圖,嫌上傳麻煩,就沒截了。如果測試過程中有什么問題,請?zhí)岢鰜?。希望這篇文章對于喜歡drupal,但又不想使用views的朋友有一定的幫助。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Drupal 安裝指南 -   X‘zone - 博客園
使用開源軟件設計、開發(fā)和部署協作型 Web 站點,第 14 部分: announcemen...
linux下常用的快捷鍵和$參數
mysql 中的bit數據類型
【PHP】Yii2中事務的使用以及代碼實例
使用 Similar By References 制作“猜你喜歡”列表
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服