织梦评论分页代码模板

原生分页机制说明

织梦文章页评论默认是全部一次性输出,当评论数量超过几十条时会导致页面过长、加载缓慢。系统在/plus/feedback.php中其实预留了分页参数page,但前台模板没有对应的分页导航输出,需要自己补充。

分页核心思路是:通过feedback.php?aid=xx&page=xx传递页码,后端根据$cfg_feedback_pagesize(每页条数,默认10)做LIMIT查询,再用GetPageList生成分页HTML。

后端分页代码实现

打开/plus/feedback.php,找到评论列表输出部分,替换为分页查询逻辑:

$page=isset($page) ? max(1,intval($page)) : 1;
$pagesize=$cfg_feedback_pagesize ? $cfg_feedback_pagesize : 10;
$total=$dsql->GetOne("SELECT COUNT(*) as dd FROM dede_feedback
        WHERE aid='$aid' AND ischeck=1");
$totalRow=$total['dd'];
$totalPage=ceil($totalRow / $pagesize);
if($page > $totalPage) $page=$totalPage;
$start=($page-1) * $pagesize;

$query="SELECT * FROM dede_feedback
          WHERE aid='$aid' AND ischeck=1
          ORDER BY id DESC LIMIT $start,$pagesize";
$dsql->Execute('fb',$query);
while($row=$dsql->GetArray('fb')){
    // 输出评论HTML
}

// 生成分页
$purl="/plus/feedback.php?aid=$aid";
$multi=GetPageListDM($page,$totalPage,$purl);
echo $multi;

分页函数GetPageListDM

/include/arc.partview.class.php或自定义文件中加入分页生成函数:

function GetPageListDM($page,$totalPage,$url){
    if($totalPage<=1) return '';
    $str='<div class="pager">';
    if($page>1){
        $str .="<a href='{$url}&page=".($page-1)."'>上一页</a>";
    }
    for($i=1;$i<=$totalPage;$i++){
        if($i==$page){
            $str .="<span class='cur'>$i</span>";
        }else{
            $str .="<a href='{$url}&page=$i'>$i</a>";
        }
    }
    if($page<$totalPage){
        $str .="<a href='{$url}&page=".($page+1)."'>下一页</a>";
    }
    $str .='</div>';
    return $str;
}

分页样式可参考右侧示例:上一页、页码、下一页,当前页高亮。

模板调用方式

若使用织梦原生{dede:feedback}标签,可在feedback.lib.php中加入分页支持。更简单的做法是直接用文章页模板嵌入:

<div id="comment-list">
{dede:feedback row='10' page='yes'}
 <div class="comment-item">
  <strong>[field:username/]</strong>
  <span>[field:dtime function="MyDate('Y-m-d H:i',@me)"/]</span>
  <p>[field:msg/]</p>
 </div>
{/dede:feedback}
</div>
<div class="pager">{dede:pagelist listitem="index,end,pre,next,pageno" listsize="3"/}</div>

其中page='yes'开启分页,row='10'设置每页10条。

AJAX无刷新分页

为提升体验,可将分页改为AJAX加载。前台JS监听分页链接点击事件:

$(document).on('click','.pager a',function(e){
    e.preventDefault();
    var url=$(this).attr('href');
    $.get(url,function(html){
        $('#comment-list').html(html);
    });
});

后端需判断是否为AJAX请求,是则只返回评论HTML片段,不返回整页。

常见问题与排查

分页不显示

检查$cfg_feedback_pagesize是否在后台"系统基本参数——评论设置"中配置,且评论总数是否超过单页条数。若GetPageListDM函数未定义会报致命错误。

第二页404

通常是因为URL规则问题,伪静态规则未包含page参数。检查.htaccess或Nginx配置,确保/plus/feedback.php?aid=xx&page=xx能正常访问。

分页HTML中页码数字要做intval过滤,防止SQL注入。查询时$page必须经过max(1,intval($page))处理。

实施建议

评论量较小的站点(单篇少于50条)不必开启分页,直接全部展示更利于SEO抓取。大型门户或门户资讯站建议开启分页并配合AJAX,既能控制页面体积又能提升交互流畅度。上线后观察分页是否被搜索引擎正确收录各页评论。