• 织梦用dede:sql实现列表页分页教程方法


    将dede:list标签进行改造,使用SQL标签实现静态分页,在自定义表单调用的分页用他就很方便

    例如会员列表的模板标签写法

    {dede:listsql sql="select * from #@_member" pagesize="10"}
    <li><a href="https://www.dedehtml.com/[field:XX /].html">[field:XX /]</a></li>
    {/dede:listsql}
    <!--分页-->
    {dede:pagelist/}

    实现教程

    打开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");
            //$sql = str_replace('~reid~',$this->ReID,$cquery); 这是另一个客户要求的获取url第2个参数才加的。
            $cquery = preg_replace("/SELECT(.*?)FROM/is", " SELECT count(*) as dd FROM ", $sql);
            $cquery = preg_replace("/ORDER(.*?)SC/is", "", $cquery);
            $row = $this->dsql->GetOne($cquery);
            if(is_array($row))
            {
                $this->TotalResult = $row['dd'];
            }
            else
            {
                $this->TotalResult = 0;
            }
        }
    }

    继续找到

    else if($ctag->GetName()=="pagelist")

    在它上面加入

    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
        ));
    }

    最后找到

    function GetPageListST(

    在它上面加入

    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}";
        $sql = str_replace('~reid~',$this->ReID,$sql);
        
        $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;
    }

    完成,注意代码放置的位置,有的是在上面有的是在下面。

  • 相关阅读:
    aspnet mvc 中 跨域请求的处理方法
    Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计
    Aspnet Mvc 前后端分离项目手记(二)关于token认证
    Aspnet Mvc 前后端分离项目手记(一) 关于跨域问题(还有前言)
    31 | 误删数据后除了跑路,还能怎么办?
    30 | 答疑文章(二):用动态的观点看加锁
    29 | 如何判断一个数据库是不是出问题了?
    28 | 读写分离有哪些坑?
    27 | 主库出问题了,从库怎么办?
    26 | 备库为什么会延迟好几个小时?
  • 原文地址:https://www.cnblogs.com/dedehtml/p/9901271.html
Copyright © 2020-2023  润新知