青岛做网站
        行业新闻
行业新闻
当前位置:首页> 新闻动态 > 行业新闻

织梦dede:sql标签根据动态变量查询以及分页显示

更新时间:2016-10-28
   我们在使用织梦CMS系统是,会经常用到sql标签调用数据。在使用sql标签调用数据时会经常遇到要根据页面动态变量调取数据的情况,并且遇到调取数据列表太多也需要静下分页显示。笔者本人也搜索了很多资料,网上的答案都不够完美,有的是直接在模板文件中执行php代码来实现分页,显然此方法无法生成静态文件,有的直接在sql里面指定limit参数,但又无法实现智能分页,织梦官方也没有给出具体的解决方案。青岛做网站就自己动手对该标签进行了一下二次开发,今天就跟大家分享一下解决方法。

第一:如何实现织梦dede:sql标签实根据动态变量查询

比如在内容页,根据本文章的id或其它参数,调用其它的列表信息.

arc.id = ~id~’

上面的id就是本页面的动态变量,可以直接输入

用法示例,表示根据一个值,查询附加表中的信息.

{dede:sql sql=’Select arc.title,arc.litpic,addon.* from #@__archives arc left join #@__addon17 addon  on addon.aid = arc.id where arc.id = ~id~’}

<p class="text-center"><img src="[field:litpic/]" alt="[field:title/]" /></p>

<p ><span class="text-777">青岛网站建设公司 :</span> [field:title/]</p>

<p ><span class="text-777">成立时间:</span> [field:starttime/]</p>

{/dede:sql}

第二:如何实现织梦dede:sql标签分页显示

1、打开include/arc.listview.class.php这个文件

找到:

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

2、然后找到:

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

3、最后找到function GetArcList这个方法,在其后添加一个可以通过传入sql参数获取指定数据源的方法,代码如下:

 /**

  * 通过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

 

总共就添加三段代码,每一段代码基本都参考它紧接着的上面那段原始代码,而无需改变它原来任何一个地方的代码

调用范例:

 

{dede:listsql sql=’select ID,post_title from wp_posts’ pagesize=’10’}

<li><a href="http://www.qdsulian.com/[field:ID /].html">[field:post_title /]</a></li>

{/dede:listsql}

<!--分页-->

{dede:pagelist listsize=’2’ listitem=’index pre pageno next end ’/}

 

 

免责声明:本站所有资讯内容搜集整理于互联网或者网友提供,并不代表本网赞同其观点,仅供学习与交流使用,如果不小心侵犯到你的权益,如果你对文章内容、图片和版权等问题存在异议,请及时联系我们删除该信息。