dede栏目分页如何优化?

99ANYc3cd6
预计阅读时长 25 分钟
位置: 首页 DEDE建站 正文

下面我将从核心优化思路具体操作步骤进阶技巧三个方面,为你提供一份详尽的Dede栏目分页优化指南。

dede栏目分页优化
(图片来源网络,侵删)

核心优化思路

在动手修改之前,我们必须明确优化的目标:

  1. 用户体验优先:分页要清晰、易用,让用户能轻松找到想看的内容,页码不宜过多,导航要明确。
  2. SEO权重集中:将最重要的页面(通常是第1页,即栏目首页)的权重传递给其他页面,避免搜索引擎抓取大量低价值的分页页,造成“权重稀释”。
  3. URL规范化:使用简洁、规范的URL结构,便于搜索引擎理解和用户记忆。
  4. 加载速度优化:减少不必要的数据库查询和代码执行,提升页面打开速度。

具体操作步骤

步骤1:修改分页数量(控制分页深度)

这是最直接也是最有效的一步,默认情况下,Dede可能会生成非常多的分页页,这对于SEO和用户体验都是不利的。

目标:限制每个栏目下生成的分页总数,最多只显示前10页的内容。

修改文件include/arc.listview.class.php

dede栏目分页优化
(图片来源网络,侵删)
  1. 找到关键代码: 用代码编辑器打开 arc.listview.class.php 文件,搜索 GetPageListDT 函数(这是用于获取“数字分页”的函数)。

  2. 添加限制逻辑: 在 GetPageListDT 函数中,你会看到一个循环生成页码的 for 循环,我们需要修改这个循环,让它只生成我们想要数量的页码。

    原始代码片段(大约在第780行左右,版本不同可能略有差异):

    for($i=1;$i<=$totalpage;$i++)
    {
        if($i==$nowpage)
        {
            $listdd .= "<li class='page_now'>".$i."</li>\r\n";
        }
        else
        {
            $listdd .= "<li><a href='".$purl."/$i".$addstr."'>".$i."</a></li>\r\n";
        }
    }

    这里的 $totalpage 是总页数,如果总页数有100页,这里就会生成100个页码。

    dede栏目分页优化
    (图片来源网络,侵删)
  3. 修改后的代码: 我们添加一个 $maxshowpage 变量来控制最大显示页数,并修改循环逻辑。

    // 在函数内部开始处定义最大显示页数
    $maxshowpage = 10; // 最多显示10个页码
    // 修改循环逻辑
    $startpage = max(1, $nowpage - floor($maxshowpage / 2));
    $endpage = min($totalpage, $startpage + $maxshowpage - 1);
    // 如果总页数小于最大显示页数,则从第1页开始
    if ($endpage - $startpage + 1 < $maxshowpage) {
        $startpage = max(1, $endpage - $maxshowpage + 1);
    }
    for($i=$startpage;$i<=$endpage;$i++)
    {
        if($i==$nowpage)
        {
            $listdd .= "<li class='page_now'>".$i."</li>\r\n";
        }
        else
        {
            $listdd .= "<li><a href='".$purl."/".$i.$addstr."'>".$i."</a></li>\r\n";
        }
    }

    代码解释

    • $maxshowpage = 10; 设置最多显示10个页码。
    • 新的循环逻辑会确保当前页码始终在显示的页码列表中间(或尽可能中间),如果页码总数超过10个,则只显示当前页附近的10个页码,形成一个“... 8 9 10 11 12 ...”的效果,而不是从1一直排到100,这极大地提升了用户体验。

步骤2:优化分页样式(美化与用户体验)

默认的分页样式比较简陋,我们可以通过修改模板文件来美化它。

目标:使用更现代、更清晰的分页样式,如Bootstrap或自定义的CSS。

修改文件

  1. 模板文件templets/default/list_channel.htm (这是栏目列表页的模板)

  2. CSS文件templets/default/style.css (存放样式)

  3. 在模板中修改分页HTML结构: 打开 list_channel.htm,找到类似 {dede:pagelist listsize='5' /} 的标签。 我们可以给它包裹一个 div 并添加一个class,方便我们用CSS控制。

    <!-- 修改前 -->
    <div class="dede_pages">
        <ul class="pagelist">
            {dede:pagelist listsize='5' /}
        </ul>
    </div>
    <!-- 修改后,添加了class -->
    <div class="pagination-wrapper">
        <ul class="pagination">
            {dede:pagelist listsize='5' /}
        </ul>
    </div>
  4. 添加自定义CSS样式: 在 style.css 文件中添加以下CSS代码,可以参考Bootstrap的分页样式。

    /* 分页容器样式 */
    .pagination-wrapper {
        margin: 30px 0;
        text-align: center;
    }
    /* 分页列表样式 */
    .pagination {
        display: inline-block;
        padding-left: 0;
        margin: 0;
        border-radius: 4px;
    }
    /* 分页项样式 */
    .pagination li {
        display: inline; /* 让所有li在同一行 */
    }
    .pagination li a,
    .pagination li span {
        position: relative;
        float: left;
        padding: 6px 12px;
        margin-left: -1px;
        line-height: 1.42857143;
        color: #337ab7;
        text-decoration: none;
        background-color: #fff;
        border: 1px solid #ddd;
    }
    /* 当前页样式 */
    .pagination li.page_now {
        z-index: 2;
        color: #fff;
        cursor: default;
        background-color: #337ab7;
        border-color: #337ab7;
    }
    /* 首页/尾页/上一页/下一页链接样式 */
    .pagination li a:hover,
    .pagination li a:focus {
        background-color: #eee;
    }

步骤3:优化分页链接(SEO友好)

默认的分页链接是 list_1.html, list_2.html... 这种形式很好,但我们可以做得更好,比如使用更语义化的URL。

目标:将分页URL修改为 /category/栏目名/page/2.html 这样的形式。

修改文件include/arc.listview.class.php

  1. 找到生成URL的代码: 在 GetPageListDT 函数中,找到生成 $purl 的地方,通常在函数的顶部。

  2. 修改URL生成逻辑: 原始代码可能类似这样:

    $purl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$this->TypeID;

    我们可以修改它,使其生成更友好的URL,这通常需要配合伪静态规则。

    修改后(示例)

    // 假设你已经配置好了伪静态规则
    $purl = $GLOBALS['cfg_phpurl']."/list/".$this->TypeID; // 去掉 ?tid=

    在生成具体分页链接时,代码会变成:

    // ... 在循环内部 ...
    $listdd .= "<li><a href='".$purl."/page/".$i.$addstr.".html'>".$i."</a></li>\r\n";

    注意:修改URL结构后,你必须在服务器上配置相应的伪静态规则(如Nginx或Apache的Rewrite规则),否则会导致404错误,Dede后台的“系统” -> “系统基本参数” -> “核心设置”里也可以开启伪静态。


进阶技巧与最佳实践

使用 "rel" 属性指导搜索引擎

这是SEO中非常重要的一环,通过 rel="next"rel="prev" 属性,你可以明确告诉搜索引擎页面之间的序列关系,帮助它理解分页结构,并将权重正确地传递到第一页。

修改文件include/arc.listview.class.php (修改 GetPageList 函数,这是用于生成“上下页”分页的函数)

在生成上一页和下一页链接的地方,添加 rel 属性。

// 在 GetPageList 函数中找到生成上一页和下一页的代码
// ... 省略其他代码 ...
// 上一页
if($nowpage>1)
{
    $prepage.="<li><a href='".$purl."/".$prepagenum.$addstr."'>上一页</a></li>\r\n";
    $prepage.="<link rel='prev' href='".$purl."/".$prepagenum.$addstr.".html' />\r\n"; // 添加这一行
}
// 下一页
if($nowpage!=$totalpage)
{
    $nextpage.="<li><a href='".$purl."/".$nextpagenum.$addstr."'>下一页</a></li>\r\n";
    $nextpage.="<link rel='next' href='".$purl."/".$nextpagenum.$addstr.".html' />\r\n"; // 添加这一行
}
// ... 省略其他代码 ...

注意rel="prev"rel="next" 应该放在 <head> 标签内,上面的代码只是示例,实际操作中,你可能需要将 <link> 标签整合到模板的头部,更稳妥的方法是直接修改模板文件,在 {dede:pagelist /} 标签前后通过判断来输出这些 <link>

"View All" (查看全部) 页面

特别多的栏目,提供一个“查看全部”的链接是一个很好的SEO策略,这个页面包含所有内容,权重最高,而分页页则作为补充。

  • 实现方法
    1. 创建一个新的模板文件,list_all.htm
    2. list_channel.htm 模板中,分页导航的旁边添加一个链接:
      <a href="/plus/list.php?tid={$typeid}&totalall=yes" class="view-all">查看全部</a>
    3. 修改 arc.listview.class.php,增加一个判断,当URL参数 totalall 存在时,不进行分页查询,获取所有内容。
    4. 在后台设置中,为这个“查看全部”页面设置一个 noindex 标签,因为它包含了重复内容,我们不希望它和分页页竞争排名。

修改 list.php 文件(可选)

直接修改 list.php 可以实现更底层的URL重写或逻辑控制,但这比较复杂,风险也较高,不建议新手操作,如果你有特殊需求,可以研究一下 list.php 的代码,并配合服务器的Rewrite规则。


优化项目 核心目标 操作文件 关键点
分页数量控制 避免权重稀释,提升用户体验 include/arc.listview.class.php 修改 GetPageListDT 函数的循环逻辑,限制最大显示页数。
分页样式美化 提升用户体验,网站美观 templets/default/list_channel.htm
templets/default/style.css
修改HTML结构,添加自定义CSS,可参考Bootstrap。
分页链接优化 URL规范化,更利于SEO include/arc.listview.class.php
服务器伪静态规则
修改URL生成逻辑,并配置服务器Rewrite规则。
SEO指导 (rel属性) 明确页面关系,传递权重 include/arc.listview.class.php 或直接修改模板 为上一页/下一页添加 rel="prev"rel="next"
"View All"页面 集中权重,处理海量内容 新建模板,修改PHP逻辑 提供一个包含所有内容的页面,并设置 noindex

重要提醒: 在进行任何文件修改之前,务必备份原始文件!DedeCMS版本众多,文件行号可能略有差异,请根据你的实际情况灵活调整,修改后,清除网站缓存,并检查效果。

-- 展开阅读全文 --
头像
如何导出dede全部文章?
« 上一篇 04-24
dede如何添加迅雷联盟?
下一篇 » 04-24

相关文章

取消
微信二维码
支付宝二维码