dede英文分页标签如何正确使用?

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

DedeCMS 本身是中文开源系统,其默认分页标签 {dede:pagelist} 主要生成中文文本,如“首页”、“上一页”、“下一页”、“末页”,要实现英文分页,主要有两种方法:

dede英文分页标签
(图片来源网络,侵删)
  1. 修改系统文件 (直接修改,效果彻底)
  2. 使用CSS隐藏中文,替换为英文 (推荐,更灵活,不修改核心文件)

修改系统文件 (直接修改)

这种方法会直接修改 DedeCMS 的核心文件,使分页标签直接输出英文,优点是一劳永逸,缺点是升级系统后需要再次修改。

步骤:

  1. 找到并打开文件 在你的 DedeCMS 安装目录下,找到并打开以下文件: /include/arc.archives.class.php

    这个文件是处理文章列表、文章内容等标签的核心类文件,分页逻辑就在这里。

  2. 定位代码arc.archives.class.php 文件中,搜索 GetPageListDM 函数,这个函数就是用来生成分页HTML的。

    dede英文分页标签
    (图片来源网络,侵删)
  3. 修改分页文本GetPageListDM 函数中,找到定义分页文本的代码,通常是 $listdd = ''; 之后的一系列 if 判断。

    你需要找到类似下面这些行,并将其中的中文文本替换为英文:

    // 原始代码 (中文)
    if($prepagenum==1)
    {
        $prepage.="<li><a class='page-prev' href='".$purl."start=0'>上一页</a></li>\r\n";
    }
    else
    {
        $prepage.="<li><a class='page-prev' href='".$purl."start=".($prepagenum-2*$list_len)."'>上一页</a></li>\r\n";
    }
    // ... 其他代码 ...
    if($nextpagenum<=$totalpage)
    {
        $nextpage.="<li><a class='page-next' href='".$purl."start=".$nextpagenum."'>下一页</a></li>\r\n";
    }
    else
    {
        $nextpage.="<li><a class='page-next' href='#'>下一页</a></li>\r\n";
    }
    // ... 其他代码 ...
    $listdd.="<li><a href='".$purl."start=0'>首页</a></li>\r\n";
    // ...
    $listdd.="<li><a href='".$purl."start=".($totalpage-1)*$list_len."'>末页</a></li>\r\n";
  4. 替换为英文 将上述代码中的中文替换为英文:

    // 修改后代码 (英文)
    if($prepagenum==1)
    {
        $prepage.="<li><a class='page-prev' href='".$purl."start=0'>Previous</a></li>\r\n";
    }
    else
    {
        $prepage.="<li><a class='page-prev' href='".$purl."start=".($prepagenum-2*$list_len)."'>Previous</a></li>\r\n";
    }
    // ... 其他代码 ...
    if($nextpagenum<=$totalpage)
    {
        $nextpage.="<li><a class='page-next' href='".$purl."start=".$nextpagenum."'>Next</a></li>\r\n";
    }
    else
    {
        $nextpage.="<li><a class='page-next' href='#'>Next</a></li>\r\n";
    }
    // ... 其他代码 ...
    $listdd.="<li><a href='".$purl."start=0'>First</a></li>\r\n";
    // ...
    $listdd.="<li><a href='".$purl."start=".($totalpage-1)*$list_len."'>Last</a></li>\r\n";

    你还可以修改当前页的显示文本,比如将 [<span class='page_now'>1</span>] 修改为 <span class='page-now'>1</span>

    dede英文分页标签
    (图片来源网络,侵删)
  5. 保存文件 保存修改后的 arc.archives.class.php 文件。

注意:此方法会影响整个网站的所有分页,如果你的网站是中英文双语,并且需要分别显示中英文分页,此方法就不适用了。


使用CSS隐藏中文,替换为英文 (推荐)

这种方法不修改任何PHP文件,而是通过CSS隐藏默认的中文分页文本,然后在HTML中通过 :before:after 伪元素添加英文文本,这是最灵活、最安全的方法,尤其适合双语网站。

步骤:

  1. 在模板文件中添加自定义CSS 在你的英文模板文件(article_article_en.htm)的 <head> 部分添加以下CSS代码:

    <style>
      /* 1. 隐藏默认的中文分页文本 */
      .dede-pages a,
      .dede-pages span {
        position: relative; /* 为伪元素定位提供参考 */
      }
      .dede-pages a::before,
      .dede-pages span::before {
        content: attr(data-en-text); /* 使用 data-en-text 属性的值作为内容 */
        display: inline-block;
        visibility: visible;
      }
      /* 隐藏原始的中文文本 */
      .dede-pages a::after,
      .dede-pages span::after {
        content: attr(title); /* 默认织梦的文本在 title 属性里 */
        visibility: hidden;
        height: 0;
        width: 0;
        overflow: hidden;
      }
      /* 特殊处理首页、末页等没有 title 的,直接隐藏 */
      .dede-pages a[title="首页"]::after,
      .dede-pages a[title="上一页"]::after,
      .dede-pages a[title="下一页"]::after,
      .dede-pages a[title="末页"]::after,
      .dede-pages span[title]::after {
        visibility: hidden;
        height: 0;
        width: 0;
        overflow: hidden;
      }
      /* 可选:为当前页添加特殊样式 */
      .dede-pages .page-now::before {
        content: attr(data-en-text);
        font-weight: bold;
        color: #ff6600; /* 高亮当前页 */
      }
      .dede-pages .page-now::after {
        visibility: hidden;
        height: 0;
        width: 0;
        overflow: hidden;
      }
    </style>
  2. 修改分页标签,添加 data-en-text 属性 在你的模板文件中,找到 {dede:pagelist} 标签,我们需要给它添加一些自定义属性来告诉CSS每个链接应该显示什么英文。

    原始标签:

    <div class="dede-pages">
        {dede:pagelist listsize='5' listitem='index pre pageno next end'/}
    </div>

    修改后的标签 (使用自定义函数或手动修改): 直接手动修改标签不太现实,因为织梦会动态生成,我们需要通过修改模板文件来包裹 pagelist 的输出,然后使用jQuery来动态添加属性,这比纯CSS更可靠。

    更推荐的方案 (结合JS):

    a. 在模板中,给分页容器一个ID:

    <div class="dede-pages" id="english-pagination">
        {dede:pagelist listsize='5' listitem='index pre pageno next end'/}
    </div>

    b. 在模板底部引入jQuery,并添加以下脚本:

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
    $(document).ready(function(){
        $('#english-pagination .dede-pages a').each(function(){
            var $this = $(this);
            var href = $this.attr('href');
            var text = $this.text().trim();
            // 根据链接的文本或href特征来设置对应的英文
            if (text == '首页' || href.indexOf('start=0') > -1) {
                $this.attr('data-en-text', 'First');
            } else if (text == '末页') {
                $this.attr('data-en-text', 'Last');
            } else if (text == '上一页') {
                $this.attr('data-en-text', 'Previous');
            } else if (text == '下一页') {
                $this.attr('data-en-text', 'Next');
            } else if (text.match(/^\d+$/)) { // 如果是纯数字,则为页码
                $this.attr('data-en-text', text);
            }
        });
        // 处理当前页 <span class="page-now">1</span>
        $('#english-pagination .dede-pages span.page-now').each(function(){
            var text = $(this).text().trim();
            $(this).attr('data-en-text', text);
        });
    });
    </script>

    c. CSS可以简化为

    .dede-pages a,
    .dede-pages span {
        visibility: hidden; /* 先隐藏所有 */
    }
    .dede-pages a::before,
    .dede-pages span::before {
        content: attr(data-en-text);
        visibility: visible;
    }

这个JS方案非常灵活,可以精确控制每个分页元素显示的文本,并且不影响其他语言版本。


总结与对比

特性 方法一 (修改PHP文件) 方法二 (CSS/JS方案)
优点 一次性修改,永久生效。
性能最高,无额外请求。
不修改核心文件,升级无忧。
灵活,可针对不同模板定制。
适合多语言网站。
缺点 破坏性修改,升级后需重改。
影响全站,无法区分中英文。
容易出错。
需要额外的CSS或JS代码。
JS方案需要jQuery,有轻微性能开销。
适用场景 纯英文网站,且不打算未来升级。 强烈推荐,几乎所有场景,尤其是双语或多语言网站。

对于绝大多数用户,方法二 是更优的选择,它既安全又灵活,是现代前端开发的最佳实践。

-- 展开阅读全文 --
头像
c语言iconv函数如何正确使用编码转换?
« 上一篇 04-30
c语言默认return
下一篇 » 04-30

相关文章

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

目录[+]