技術(shù)資訊
dede:sql標(biāo)簽如何實現(xiàn)翻頁
2012-02-20 22:18:03
相信很多使用dedecms的朋友在網(wǎng)上查找關(guān)于dede:sql標(biāo)簽進(jìn)行分頁的解決方案時都不盡如人意,尤其是在列表頁使用dede:sql調(diào)用外部數(shù)據(jù)(所謂調(diào)用外部數(shù)據(jù)就是指在后臺只是創(chuàng)建個空欄目,然后對應(yīng)的列表模板文件中使用dede:sql指定自定義的數(shù)據(jù)源,數(shù)據(jù)源與該欄目本身是沒有邏輯關(guān)系的,目的是為了讓織夢能按照它的規(guī)則來幫我們將數(shù)據(jù)源生成靜態(tài)文件予以展示)時,我本人也搜索了很多資料,網(wǎng)上的答案都不夠完美,有的是直接在模板文件中執(zhí)行php代碼來實現(xiàn)分頁,顯然此方法無法生成靜態(tài)文件,有的直接在sql里面指定limit參數(shù),但又無法實現(xiàn)智能分頁,織夢官方也沒有給出具體的解決方案,在dede論壇有看到織夢核心人物天涯給出的回復(fù)是采用自由列表的方法,顯然自由列表無法指定外部數(shù)據(jù)源,最后實在沒辦法只能自己動手了,首先想到的思路是將dede:list標(biāo)簽進(jìn)行改造了,熟悉dede的朋友應(yīng)該知道這個列表頁專用標(biāo)簽的工作原理大致是先通過欄目變量id獲取到對應(yīng)的數(shù)據(jù)源再呈現(xiàn)到頁面上來,那么我們就可以讓它不僅僅通過欄目變量id還可以通過指定的sql語句來獲取數(shù)據(jù)源了,比如我們可以另外嵌入一個類似{dede:listsql sql='select * from wp_posts' pagesize='10'}的標(biāo)簽來使用。
OK,思路已經(jīng)有了,接下來我們打開include/arc.listview.class.php這個文件來給它動個小手術(shù)吧!
找到:
?[Copy to clipboard]View Code PHP if(!is_object($ctag))
{
$ctag = $this->dtp->GetTag("list");
}
這一段,在其后添加如下代碼:
?[Copy to clipboard]View Code PHP //add by LeadTo 2011-12-31 http://www.ihaomai.cn/
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
然后找到:
?[Copy to clipboard]View Code PHP 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")
)
);
}
這一段,在其后添加如下代碼:
?[Copy to clipboard]View Code PHP //add by LeadTo 2011-12-31 http://www.ihaomai.cn/
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這個方法,在其后添加一個可以通過傳入sql參數(shù)獲取指定數(shù)據(jù)源的方法,代碼如下:
?[Copy to clipboard]View Code PHP //add by LeadTo 2011-12-31 http://www.ihaomai.cn/
/**
* 通過listsql標(biāo)簽中sql屬性傳入的參數(shù)來獲得一個單列的文檔列表
* */
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')
{
//傳遞整個數(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
總共就添加三段代碼,每一段代碼基本都參考它緊接著的上面那段原始代碼,而無需改變它原來任何一個地方的代碼,應(yīng)該算是比較完美的手術(shù)了,接下來在模板文件中的使用方法就跟一開始思路中所提到的那樣,分頁標(biāo)簽依舊沿用原來的,調(diào)用范例:
?[Copy to clipboard]View Code HTML{dede:listsql sql='select ID,post_title from wp_posts' pagesize='10'}
<li><a href="http://www.ihaomai.cn/[field:ID /].html">[field:post_title /]</a></li>
{/dede:listsql}
<!--分頁-->
{dede:pagelist listsize='2' listitem='index pre pageno next end '/}
注:以上解決方案適用于dedecms5.6-5.7版本。
網(wǎng)站制作,青島IT資訊
近期更新
- [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è)計開發(fā)——移動端傳播利器
- [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è)項目
- [2021-03-05 10:34:45] 移動互聯(lián)時代房地產(chǎn)行業(yè)的微信小程序解決方案
- [2021-01-22 17:29:38] 微信小程序有哪些優(yōu)勢?為什么要開發(fā)微信小程序?
- [2021-01-08 17:28:04] 網(wǎng)站建設(shè)最容易忽略的人性化設(shè)計
- [2020-12-16 16:55:32] 建設(shè)一個常規(guī)的公司網(wǎng)站建設(shè)成本大概是多少?
延伸閱讀
- [2012-02-18 23:35:18] 網(wǎng)站設(shè)計趨勢-活動站細(xì)分設(shè)計
- [2017-01-16 10:00:00] 提升網(wǎng)站排名應(yīng)如何在關(guān)鍵詞上下功夫?!
- [2012-02-10 15:37:33] 影響網(wǎng)站排名的因素有哪些
- [2011-11-05 23:02:49] 讓網(wǎng)站外鏈在你睡著的時候也能自動增加的方法
- [2011-11-04 13:09:06] 注重實時搜索 谷歌對搜索算法進(jìn)行重大修改
- [2016-10-27 11:47:00] H5響應(yīng)式青島網(wǎng)站制作
- [2013-02-15 22:14:59] 網(wǎng)站設(shè)計師與客戶的溝通重要性
- [2014-06-10 14:51:04] 青島網(wǎng)站建設(shè)之SEO優(yōu)化
- [2014-11-22 19:27:59] 客戶虐我千萬遍 我待客戶如初戀
- [2017-03-28 16:37:00] 普及360瀏覽器的極速模式和兼容模式的知識點
- [2012-07-22 19:01:35] dede標(biāo)題不完整時加省略號
- [2013-01-05 20:24:34] xml網(wǎng)站地圖與html地圖的區(qū)別
解決方案
輪胎行業(yè)網(wǎng)站設(shè)計解決方案 機(jī)械行業(yè)網(wǎng)站設(shè)計解決方案 房地產(chǎn)行業(yè)網(wǎng)站設(shè)計解決方案 科技企業(yè)網(wǎng)站設(shè)計解決方案 電子家電網(wǎng)站設(shè)計解決方案 食品行業(yè)網(wǎng)站設(shè)計解決方案 集團(tuán)公司網(wǎng)站設(shè)計解決方案 企事業(yè)單位網(wǎng)站設(shè)計解決方案 外貿(mào)行業(yè)網(wǎng)站設(shè)計解決方案 健身運動網(wǎng)站設(shè)計解決方案 美容與化妝品網(wǎng)站設(shè)計解決方案 建筑設(shè)計行業(yè)網(wǎng)站設(shè)計解決方案 物流行業(yè)網(wǎng)站設(shè)計解決方案
TAGS關(guān)鍵字
平面設(shè)計 H5 青島網(wǎng)站SEO 青島IT資訊 膠南網(wǎng)站建設(shè)公司 網(wǎng)站設(shè)計 青島輪胎網(wǎng)站設(shè)計 外貿(mào)網(wǎng)站設(shè)計 網(wǎng)站開發(fā) 集團(tuán)官網(wǎng) 插畫 集團(tuán)公司網(wǎng)站建設(shè) 網(wǎng)站推廣 HTML5 GOOGLE 圖形網(wǎng)格 良好的導(dǎo)航 互聯(lián)網(wǎng) 外貿(mào)網(wǎng)站建設(shè) 微官網(wǎng)帶來的好處 青島網(wǎng)站優(yōu)化 SEO優(yōu)化 交互設(shè)計 舒適的界面 青島網(wǎng)站建設(shè)基礎(chǔ)知識 新的元素 青島網(wǎng)站設(shè)計哪家好 網(wǎng)站交互設(shè)計 色彩心理學(xué) 青島抖音小程序開發(fā)