技術(shù)資訊
DEDE{dede:sql}標(biāo)簽如何分頁
2012-02-09 23:27:21
最近研究了一下織夢(mèng)CMS系統(tǒng),看到一篇關(guān)于sql標(biāo)簽調(diào)用數(shù)據(jù)列表如何翻頁的文章,感覺不錯(cuò),貼出來大家分享一下。相信很多使用dedecms青島網(wǎng)站建設(shè)朋友在網(wǎng)上查找關(guān)于dede:sql標(biāo)簽進(jìn)行分頁的解決方案時(shí)都不盡如人意,尤其是在列表頁使用dede:sql調(diào)用外部數(shù)據(jù)(所謂調(diào)用外部數(shù)據(jù)就是指在后臺(tái)只是創(chuàng)建個(gè)空欄目,然后對(duì)應(yīng)的列表模板文件中使用dede:sql指定自定義的數(shù)據(jù)源,數(shù)據(jù)源與該欄目本身是沒有邏輯關(guān)系的,目的是為了讓織夢(mèng)能按照它的規(guī)則來幫我們將數(shù)據(jù)源生成靜態(tài)文件予以展示)時(shí),我本人也搜索了很多資料,網(wǎng)上的答案都不夠完美,有的是直接在模板文件中執(zhí)行php代碼來實(shí)現(xiàn)分頁,顯然此方法無法生成靜態(tài)文件,有的直接在sql里面指定limit參數(shù),但又無法實(shí)現(xiàn)智能分頁,織夢(mèng)官方也沒有給出具體的解決方案,在dede論壇有看到織夢(mèng)核心人物天涯給出的回復(fù)是采用自由列表的方法,顯然自由列表無法指定外部數(shù)據(jù)源,最后實(shí)在沒辦法只能自己動(dòng)手了,首先想到的思路是將dede:list標(biāo)簽進(jìn)行改造了,熟悉dede的朋友應(yīng)該知道這個(gè)列表頁專用標(biāo)簽的工作原理大致是先通過欄目變量id獲取到對(duì)應(yīng)的數(shù)據(jù)源再呈現(xiàn)到頁面上來,那么我們就可以讓它不僅僅通過欄目變量id還可以通過指定的sql語句來獲取數(shù)據(jù)源了,比如我們可以另外嵌入一個(gè)類似{dede:listsql sql='select * from wp_posts' pagesize='10'}的標(biāo)簽來使用。
OK,思路已經(jīng)有了,接下來我們打開include/arc.listview.class.php這個(gè)文件來給它動(dòng)個(gè)小手術(shù)吧!
找到:
if(!is_object($ctag))
{
$ctag = $this->dtp->GetTag("list");
}
這一段,在其后添加如下代碼:
if(!is_object($ctag))
{
$ctag = $this->dtp->GetTag("listsql");
if (is_object($ctag))
{
$cquery = $ctag->GetAtt("sql");
$cquery = preg_replace("/SELECT(.*?)FROM/is", " SELECT count(*) as dd FROM ", $cquery);
$cquery = preg_replace("/ORDER(.*?)SC/is", "", $cquery);
$row = $this->dsql->GetOne($cquery);
if(is_array($row))
{
$this->TotalResult = $row['dd'];
}
else
{
$this->TotalResult = 0;
}
}
}
//end
然后找到:
if($ctag->GetName()=="list")
{
$limitstart = ($this->PageNo-1) * $this->PageSize;
$row = $this->PageSize;
if(trim($ctag->GetInnerText())=="")
{
$InnerText = GetSysTemplets("list_fulllist.htm");
}
else
{
$InnerText = trim($ctag->GetInnerText());
}
$this->dtp->Assign($tagid,
$this->GetArcList(
$limitstart,
$row,
$ctag->GetAtt("col"),
$ctag->GetAtt("titlelen"),
$ctag->GetAtt("infolen"),
$ctag->GetAtt("imgwidth"),
$ctag->GetAtt("imgheight"),
$ctag->GetAtt("listtype"),
$ctag->GetAtt("orderby"),
$InnerText,
$ctag->GetAtt("tablewidth"),
$ismake,
$ctag->GetAtt("orderway")
)
);
}
這一段,在其后添加如下代碼:
else if($ctag->GetName()=="listsql")
{
$limitstart = ($this->PageNo-1) * $this->PageSize;
$row = $this->PageSize;
if(trim($ctag->GetInnerText())=="")
{
$InnerText = GetSysTemplets("list_fulllist.htm");
}
else
{
$InnerText = trim($ctag->GetInnerText());
}
$this->dtp->Assign($tagid,
$this->GetSqlList(
$limitstart,
$row,
$ctag->GetAtt("sql"),
$InnerText
)
);
}
//end
最后找到function GetArcList這個(gè)方法,在其后添加一個(gè)可以通過傳入sql參數(shù)獲取指定數(shù)據(jù)源的方法,代碼如下:
function GetSqlList($limitstart = 0, $row = 10, $sql = '', $innertext){
global $cfg_list_son;
$innertext = trim($innertext);
if ($innertext == '') {
$innertext = GetSysTemplets('list_fulllist.htm');
}
//處理SQL語句
$limitStr = " LIMIT {$limitstart},{$row}";
$this->dsql->SetQuery($sql . $limitStr);
$this->dsql->Execute('al');
$t2 = ExecTime();
//echo $t2-$t1;
$sqllist = '';
$this->dtp2->LoadSource($innertext);
$GLOBALS['autoindex'] = 0;
//獲取字段
while($row = $this->dsql->GetArray("al")) {
$GLOBALS['autoindex']++;
if(is_array($this->dtp2->CTags))
{
foreach($this->dtp2->CTags as $k=>$ctag)
{
if($ctag->GetName()=='array')
{
//傳遞整個(gè)數(shù)組,在runphp模式中有特殊作用
$this->dtp2->Assign($k,$row);
}
else
{
if(isset($row[$ctag->GetName()]))
{
$this->dtp2->Assign($k,$row[$ctag->GetName()]);
}
else
{
$this->dtp2->Assign($k,'');
}
}
}
}
$sqllist .= $this->dtp2->GetResult();
}//while
$t3 = ExecTime();
//echo ($t3-$t2);
$this->dsql->FreeResult('al');
return $sqllist;
}
//end
總共就添加三段代碼,每一段代碼基本都參考它緊接著的上面那段原始代碼,而無需改變它原來任何一個(gè)地方的代碼,應(yīng)該算是比較完美的手術(shù)了,接下來在模板文件中的使用方法就跟一開始思路中所提到的那樣,分頁標(biāo)簽依舊沿用原來的,調(diào)用范例:
{dede:listsql sql='select ID,post_title from wp_posts' pagesize='10'}
[field:post_title /]
{/dede:listsql}
wp_posts這個(gè)表可以換成你需要的,例如dede_archives
{dede:pagelist listsize='2' listitem='index pre pageno next end '/}
注:以上解決方案適用于dedecms5.6-5.7版本。
近期更新
- [2023-07-26 14:17:28] 為品牌賦能,海外官網(wǎng)品牌數(shù)字化
- [2023-05-06 10:32:26] 青島網(wǎng)站建設(shè)公司,高端網(wǎng)站定制,一站式網(wǎng)站服務(wù)——力圖數(shù)字科技
- [2023-04-27 13:47:54] 高端定制網(wǎng)站建設(shè)——從滿足預(yù)期到走向卓越
- [2023-04-11 09:17:49] H5頁面設(shè)計(jì)開發(fā)——移動(dòng)端傳播利器
- [2022-11-16 10:11:43] windows2012程序在哪
- [2022-04-14 11:01:47] 力圖數(shù)字科技配套網(wǎng)站服務(wù)支持
- [2021-05-18 10:14:11] 青島網(wǎng)站建設(shè)的流程
- [2021-04-29 10:14:38] 企業(yè)定制化官網(wǎng)建設(shè)項(xiàng)目
- [2021-03-05 10:34:45] 移動(dòng)互聯(lián)時(shí)代房地產(chǎn)行業(yè)的微信小程序解決方案
- [2021-01-22 17:29:38] 微信小程序有哪些優(yōu)勢(shì)?為什么要開發(fā)微信小程序?
- [2021-01-08 17:28:04] 網(wǎng)站建設(shè)最容易忽略的人性化設(shè)計(jì)
- [2020-12-16 16:55:32] 建設(shè)一個(gè)常規(guī)的公司網(wǎng)站建設(shè)成本大概是多少?
延伸閱讀
- [2011-11-05 19:21:15] 網(wǎng)站推廣需要一定的執(zhí)行力去完成
- [2014-11-30 10:38:50] 具有想象力與創(chuàng)造力的給力網(wǎng)站
- [2013-02-24 16:26:49] 如何做出創(chuàng)意設(shè)計(jì)的網(wǎng)站
- [2012-03-18 21:58:23] 網(wǎng)站設(shè)計(jì)的創(chuàng)意與技巧
- [2015-03-17 09:27:56] 策劃開發(fā)制作營銷型網(wǎng)站?
- [2015-02-03 09:11:08] 時(shí)刻關(guān)注網(wǎng)站的健康程度
- [2011-09-10 23:12:11] 青島網(wǎng)站制作哪家好?
- [2011-11-29 14:50:23] 如何增強(qiáng)圖片設(shè)計(jì)的立體與動(dòng)感效果
- [2015-02-11 14:25:24] 必學(xué)四點(diǎn)讓你的網(wǎng)頁設(shè)計(jì)精彩起來
- [2015-01-20 09:38:41] 網(wǎng)站改版有了新的方法?
- [2011-11-10 00:29:06] 青島網(wǎng)站設(shè)計(jì)中如何增強(qiáng)網(wǎng)站的SEO優(yōu)化 提高排名
- [2014-12-06 01:06:15] 最新的網(wǎng)站優(yōu)化原則和方法
解決方案
輪胎行業(yè)網(wǎng)站設(shè)計(jì)解決方案 機(jī)械行業(yè)網(wǎng)站設(shè)計(jì)解決方案 房地產(chǎn)行業(yè)網(wǎng)站設(shè)計(jì)解決方案 科技企業(yè)網(wǎng)站設(shè)計(jì)解決方案 電子家電網(wǎng)站設(shè)計(jì)解決方案 食品行業(yè)網(wǎng)站設(shè)計(jì)解決方案 集團(tuán)公司網(wǎng)站設(shè)計(jì)解決方案 企事業(yè)單位網(wǎng)站設(shè)計(jì)解決方案 外貿(mào)行業(yè)網(wǎng)站設(shè)計(jì)解決方案 健身運(yùn)動(dòng)網(wǎng)站設(shè)計(jì)解決方案 美容與化妝品網(wǎng)站設(shè)計(jì)解決方案 建筑設(shè)計(jì)行業(yè)網(wǎng)站設(shè)計(jì)解決方案 物流行業(yè)網(wǎng)站設(shè)計(jì)解決方案
TAGS關(guān)鍵字
青島SEO 青島不錯(cuò)的英文網(wǎng)站建設(shè)公司 青島黃島、紅島網(wǎng)站建設(shè)公司 青島網(wǎng)站設(shè)計(jì)哪家好 網(wǎng)頁設(shè)計(jì) 良好的導(dǎo)航 舒適的界面 響應(yīng)式設(shè)計(jì) 網(wǎng)站動(dòng)畫 微網(wǎng)站 網(wǎng)站設(shè)計(jì) H5 網(wǎng)站交互設(shè)計(jì) 青島高端網(wǎng)站建設(shè) 青島IT資訊 青島輪胎網(wǎng)站設(shè)計(jì)公司 html和css 微信開發(fā) 輪胎網(wǎng)站設(shè)計(jì) 官網(wǎng)建設(shè) 青島網(wǎng)站建設(shè) 微官網(wǎng)帶來的好處 robots HTML5 色彩心理學(xué) 網(wǎng)站品牌 php程序 青島網(wǎng)頁制作 網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè) 青島抖音小程序開發(fā)