• 织梦用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;
    }

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

  • 相关阅读:
    MySql.Data.dll的版本
    发现一个“佛系记账本”
    坚果云无法同步SVN文件夹
    Kali Linux打开多个终端窗口
    修改Kali Linux终端主题
    Kali Linux搜索软件包
    指定无线网卡监听信道
    解决Aireplay-ng信道问题
    查看干扰进程
    使用Kali官网提供的虚拟机系统
  • 原文地址:https://www.cnblogs.com/dedehtml/p/9901271.html
Copyright © 2020-2023  润新知