加拿大预测网-在线预测

信息动态

网站设计是技术与创意的完美融合!

技术资讯

dede:sql 调用flag att文档属性 翻页

2014-07-25 12:40:12

dede:sql标签分页 dede:sql 调用flag/att文档属性 翻页,加拿大预测网-在线预测:青岛网站建设中有时候需要在页面上通过sql语句调用其他数据库或者其他表的数据,例如在当前列表页调用一个特定文档属性的文章列表,再加上翻页,效果就不好处理了,需要对arc.listview.class.php进行改造,方法在这篇文章有描述  加拿大预测网-在线预测:DEDE{dede:sql}标签如何分页 ,下文最后会在描述一遍,改造完着文件后,就可以这样调用了。

{dede:listsql pagesize='1' sql="select a.id as aid, a.description as description, t.id as tid,typeid,senddate,title,litpic,ismake,arcrank,💝namerule,typedir From ltd_archives a, ltd_arctype t where a.typeid = t.id and FIND_IN_SET('f', flag)>0" }

<li><a href="[field:array runphp='yes']@me=꧟GetFileUrl(@me['aid'],@me['typeid'],@me['senddate'],@me['title'],@me['ismake'],@me['description'],@me['arcrank'],@ꦑme['namerule'],@me['typedir'],@me['money']);[/field:array]"><img src="[field:litꦓpic/]" width="304" he♛ight="158" /><h4>[field:title/]</h4>

<h5>[field:senddate function='strftime("%Y-%m-%d",@me)'/]</h5>

<p>[field:description/]...</p></a>

</li>

{/dede:listsql}

                            <div class="page">

<!--分页-->

{dede:pagelist listsize='1' listitem='pre pageno next'/}

 

</div>

 

 

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

然后找到:

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 GetArcLi🍌st这个方法,在其后添加一个可以通过꧃传入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

 

0532-85810878 473587358 扫码添加微信

加拿大预测网-在线预测:扫码添加微信

扫码关注公众号

加拿大预测网-在线预测:官方公众号

2054585360