欧美乱伦图片区,国产日韩欧美一区二区三区四区五区,欧美性色爽,乱伦小说网站免费观看视频,啊用力啊好深啊H在线观看,男女做哎爱过程图片

信息動(dòng)態(tài)

網(wǎng)站設(shè)計(jì)是技術(shù)與創(chuàng)意的完美融合!

技術(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版本。

 

 

0532-85810878 473587358 掃碼添加微信

掃碼添加微信

掃碼關(guān)注公眾號(hào)

官方公眾號(hào)

2054585360
抚顺市| 洛川县| 长岛县| 正镶白旗| 淮北市| 攀枝花市| 乡宁县| 武威市| 华容县| 罗城| 垦利县| 宜城市| 宁蒗| 吉首市| 祁阳县| 兴义市| 武汉市| 江油市| 商南县| 嘉祥县| 革吉县| 渑池县| 郁南县| 麻城市| 吴旗县| 社旗县| 梨树县| 惠水县| 长宁县| 田林县| 凤庆县| 霍城县| 新丰县| 富平县| 三明市| 遂昌县| 京山县| 乐东| 潼南县| 长治县| 鲁甸县|