小李SEO博客

網站優化服務

織夢cms實現{dede:sql=""}分頁教程

相信很多使用dedecms的朋友在網上查找關于dede:sql標簽進行分頁的解決方案時都不盡如人意,尤其是在列表頁使用dede:sql調用外部數據(所謂調用外部數據就是指在后臺只是創建個空欄目,然后對應的列表模板文件中使用dede:sql指定自定義的數據源,數據源與該欄目本身是沒有邏輯關系的,目的是為了讓織夢能按照它的規則來幫我們將數據源生成靜態文件予以展示)時,我本人也搜索了很多資料,網上的答案都不夠完美,有的是直接在模板文件中執行php代碼來實現分頁,顯然此方法無法生成靜態文件,有的直接在sql里面指定limit參數,但又無法實現智能分頁,織夢官方也沒有給出具體的解決方案,在dede論壇有看到織夢核心人物天涯給出的回復是采用自由列表的方法,顯然自由列表無法指定外部數據源,最后實在沒辦法只能自己動手了,首先想到的思路是將dede:list標簽進行改造了。

熟悉dede的朋友應該知道這個列表頁專用標簽的工作原理大致是先通過欄目變量id獲取到對應的數據源再呈現到頁面上來,那么我們就可以讓它不僅僅通過欄目變量id還可以通過指定的sql語句來獲取數據源了,比如我們可以另外嵌入一個類似{dede:listsql sql=’select * from wp_posts’ pagesize=’10′}的標簽來使用。思路已經有了,接下來我們打開include/arc.listview.class.php這個文件來給它動個小手術吧!

找到:View Code PHPif(!is_object($ctag)){$ctag = $this->dtp->GetTag("list");}這一段,在其后添加如下代碼:View Code PHP//add by Gump 2011-12-31 http://5loveb.com/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然后找到: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")));}

這一段,在其后添加如下代碼:View Code PHP//add by Gump 2011-12-31 http://5loveb.com/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參數獲取指定數據源的方法,代碼如下:View Code PHP//add by Gump 2011-12-31 http://5loveb.com//*** 通過listsql標簽中sql屬性傳入的參數來獲得一個單列的文檔列表* */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'){//傳遞整個數組,在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

總共就添加三段代碼,每一段代碼基本都參考它緊接著的上面那段原始代碼,而無需改變它原來任何一個地方的代碼,應該算是比較完美的手術了,接下來在模板文件中的使用方法就跟一開始思路中所提到的那樣,分頁標簽依舊沿用原來的,調用范例:View Code HTML。{dede:listsql sql='select ID,post_title from wp_posts' pagesize='10'}<li><a href="http://5loveb.com/[field:ID /].html">[field:post_title /]</a></li>{/dede:listsql}<!--分頁-->{dede:pagelist listsize='2' listitem='index pre pageno next end '/}

上一篇:dedecms投票漏洞解決方法 下一篇:dedecms5.7最新版發表評論點不了不能評論了解決方法
織夢cms相關文章閱讀
  • 織夢cms文章添加字段填欄目id標簽調用方法

    小李網絡公司介紹織夢cms文章添加字段填欄目id標簽調用方法知識,包括織夢相關文章調用dedecms調用網站織夢調用代碼dedecms代碼調用id字段的數據類型dedecms怎么調用織夢首頁調用描述dedecms調用商...

  • 織夢cms讓上傳的圖片名字不變保持原名

    小李網絡公司介紹織夢cms上傳圖片名稱不變知識,包括織夢后臺如何讓上傳的圖片名字不變不重命名_織夢園,dedecms織夢讓上傳的圖片名字不變保持原名-織夢優化-跟版網....

  • 織夢cms去掉自定義字段調用后的TABLE標簽教程

    小李網絡公司介紹織夢cms去掉TABLE標簽教程知識.包括去掉dede 中自定義附件類型字段調用后的TABLE標簽_織夢無憂.dedepeurl字段dede提交時間dede自定義模型dede自定義背景dede自定義模塊自定義表單d...

  • 織夢cms下面生成Google Sitemap網站地圖方法

    小李網絡公司介紹織夢cms下面生成Google Sitemap網站地圖方法知識,包括產生隨機數的常用方法數字隨機生成一鍵生成小字體生成器目錄如何生成生成元怎么求生成算法的步驟是什么京貼鏈接生成方...

  • 織夢cms有效防止采集的兩個實用辦法

    小李網絡公司介紹織夢cms有效防止采集方法知識.包括Dedecms有效防止采集的兩個實用辦法_織夢無憂,防采集怎么采集其他網站內容網站被別人采集怎么辦Wp主題網站如何防止被采集如何防止網站被...

  • 織夢cms模板給每個欄目添加縮略圖的方法

    小李網絡公司介紹織夢cms模板給每個欄目添加縮略圖知識,包括織夢DedeCms5.7給欄目欄目添加縮略圖的修改方法_織夢58.什么叫縮略圖縮略圖怎么弄織夢模板欄目頁文件在哪縮略圖怎么恢復織夢欄目...

  • 織夢cms執行php腳本限制設置教程

    小李網絡公司介紹織夢cms執行php腳本限制設置教程知識,包括寶塔shell腳本執行php如何運行php腳本程序php執行shell命令php腳本怎么運行php異步執行一個腳本shell腳本調用php方法shell腳本調用urlphp最大...

  • 織夢cms文檔關鍵詞維護功能頻率設置教程

    小李網絡公司介紹織夢cms文檔關鍵詞維護功能頻率設置教程知識,包括織夢cms建站教程dedecms織夢系統dedecms內容關鍵詞織夢關鍵詞自動提取織夢欄目關鍵詞織夢優化網站關鍵詞織夢全站關鍵詞描述...

  • 織夢cms在channel標簽中調用typeid無效解決方法

    小李網絡公司介紹織夢cms在channel標簽中調用typeid無效解決方法知識,包括channel中文織夢cmschannel 4織夢 建站織夢官網channel 7go channel織夢免費源碼織夢源碼channel9織夢仿站教程channel5....

  • 織夢cms出現Upload filetype not allow的原因

    小李網絡公司介紹織夢cms出現Upload filetype not allow的原因知識,包括not allow什么意思allow doing什么意思405not allowallow和allowedshould not toallow后加什么allow menot wellallow for什么意思allow什么意思....

  • 織夢cms美化文章內容頁來源作者方法

    小李網絡公司介紹織夢cms美化文章內容頁來源作者方法知識,包括美化文章內容頁來源作者的方法_織夢dedecms教程,巨人網絡.西門豹治鄴的作者是誰百度百科的內容來源自媒體內容來源關于垃圾的...

  • 織夢cms自定義表單獲取填寫時間的方法

    小李網絡公司介紹織夢cms表單獲取時間方法知識.包括DedeCMS自定義表單獲取填寫時間的方法_織夢58.自定義表單系統自定義表單 數據庫設計activiti自定義表單自定義表單源碼js自動填寫網頁表單...

SEO公司排名
在线视频国产网站你懂得},97se亚洲国产综合自在线观看,婷婷五月色综合香五月a,欧洲自拍视频另类中文字幕
?
QQ在線咨詢
SEM競價推廣
137-1296-7640
SEO優化外包
137-1296-7640