如果你學過Asp.net,你一定知道它裡面有一個叫datalist之類自帶的分頁功能十分強大,這裡的這個類就模擬了一部份這個功能,我敢用“強大”來定義它,是因為作為一個通用的頁類,這個類真正做到了“通用”。
廢話少說,馬上介紹一下是如何使用的。
1、先新建一個用於測試的表
CREATE TABLE `test` (
`aa` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`bb` VARCHAR(50) NOT NULL,
`cc` VARCHAR(50) NOT NULL,
`tt` INT DEFAULT 0 NOT NULL
);
2、制作一個模板文件,保存為:test.htm
{dede:page pagesize=15/}
<table width=100% border=0 cellpadding=1 cellspacing=1 bgcolor=#CCCCCC>
<tr bgcolor=#F8FFEE align=center>
<td width=10%>aa</td>
<td width=30%>bb</td>
<td width=30%>cc</td>
<td width=30%>tt</td>
</tr>
{dede:datalist}
<tr bgcolor=#FFFFFF align=center>
<td>[field:aa/]</td>
<td>[field:bb/]</td>
<td>[field:cc/]</td>
<td>[field:tt function=date("Y-m-d H-i-s","@me")/]</td>
</tr>
{/dede}
<tr bgcolor=#F8FFEE>
<td colspan=4>
{dede:pagelist listsize=3/}
</td>
</tr>
</table>
3、編寫調用這個類的代碼
數據庫的連接信息均在config_base.php這個文件是設定
showtable.php
<?
require("inc_datalist.php");
$dlist = new DataList();
$dlist->Init();
$dlist->SetTemplet("./test.htm");
$dlist->SetSource("select * from ttt");
$liststring = $dlist->Display();
$dlist->Close();
?>
看看效果,做一個分文件就這麼簡單,還完全實現了頁面與邏輯分離
假如我要增加一個GET字符串傳遞給查詢應該怎麼做呢?
Easy
假如增加的查詢串為 keyword
<?
require("inc_datalist.php");
if(!isset($keyword)) $keyword="";
$dlist = new DataList();
$dlist->Init();
$dlist->SetParameter("keyword",$keyword);
$dlist->SetTemplet("./test.htm");
$dlist->SetSource("select * from ttt where bb like %$keyword%");
$liststring = $dlist->Display();
$dlist->Close();
?>
還有什麼不能解決嗎?
假如有一個字段是布爾值,我想輸出時按不同情況輸出不同內容,其實不難實現
Dede模板引擎支持使用自定義函數
<?
require("inc_datalist.php");
if(!isset($keyword)) $keyword="";
function GetMyName($mname)
{
if($mname=="dede") return "My Name";
else return $mname;
}
$dlist = new DataList();
$dlist->Init();
$dlist->SetParameter("keyword",$keyword);
$dlist->SetTemplet("./test.htm");
$dlist->SetSource("select * from ttt where bb like %$keyword%");
$liststring = $dlist->Display();
$dlist->Close();
?>
在程序裡不用做什麼,需要做的事情是更改一下模板
[field:aa function="GetMyName(@me)"/]
這樣返回的值就是函數返回的值。
這樣幾乎達到盡善盡美的境界,唯一的是分頁列表的鏈接是固定的,不過你可以對它進行改進。