长度省略号规则是什么?

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

使用 DedeCMS 内置的 cn_substr 函数(最推荐)

这是最标准、最简单的方法,直接在模板文件中调用系统自带的字符串截取函数即可。

dede标题长度省略号
(图片来源网络,侵删)

适用场景:

适用于需要截取中文字符串,并且希望按“字”为单位进行截断的场景,一个汉字算一个字符。

操作步骤:

  1. 打开你的模板文件 找到你需要显示标题的模板文件,

    • 首页文章列表:/templets/default/index_article.htm
    • 文章列表页:/templets/default/list_article.htm
    • 页:/templets/default/article_article.htm
  2. 的调用代码 通常是这样的形式:

    <a href='[field:arcurl/]'>[field:title/]</a>
  3. 修改代码,添加截取和省略号[field:title/] 替换为 cn_substr 函数调用。

    dede标题长度省略号
    (图片来源网络,侵删)

    语法:

    {dede:field function='cn_substr(@me, 截取长度, 省略符)'/}
    • @me:代表当前字段的值,在这里就是 [field:title] 的内容。
    • 截取长度:你希望显示的字符数量,建议设置为 2040 之间,根据你的版面布局调整。
    • 省略符被截断后,末尾显示的字符,通常是 。

    示例: 假设你想将标题限制在 20个字符 长度,并在末尾添加 ,修改后的代码如下:

    <a href='[field:arcurl/]'>{dede:field function='cn_substr(@me, 20, "...")'/}</a>

    效果:

    • 是 "DedeCMS 是一个非常强大的内容管理系统",显示为 "DedeCMS 是一个非常强..."。
    • 是 "你好世界",长度不足20,则完整显示 "你好世界"。

使用 substitute 函数(正则表达式替换)

如果你对 cn_substr 的截断方式不满意,或者有更复杂的需求(比如只在特定位置添加省略号),可以使用 substitute 函数,它基于正则表达式,更灵活。

dede标题长度省略号
(图片来源网络,侵删)

适用场景:

适用于需要更精确控制截断逻辑的场景,例如只在标题超过一定长度时才添加省略号。

操作步骤:

  1. 打开模板文件(同上)。

  2. 使用 substitute 函数修改标题代码

    语法:

    {dede:field name='title' function='str_replace("被替换的内容", "替换成的内容", @me)'/}

    我们可以利用正则表达式来实现截断和添加省略号。

    示例: 这个例子实现的功能和 cn_substr 类似,但展示了正则的用法。

    <a href='[field:arcurl/]'>{dede:field name='title' function='preg_replace("/^(.{20}).*$/", "\\1...", @me)'/}</a>

    代码解释:

    • preg_replace:PHP 的正则表达式替换函数。
    • "/^(.{20}).*$/":这是正则表达式模式。
      • ^:匹配字符串的开头。
      • (.{20}):匹配任意20个字符(包括汉字),并捕获为一个分组。
      • 匹配任意数量的任意字符(0个或多个)。
      • 匹配字符串的结尾。
      • 整个模式的意思是:从开头匹配任意20个字符,后面还有任意内容。
    • "\\1...":这是替换字符串。
      • \\1:代表第一个捕获组的内容(也就是那20个字符)。
      • 在后面添加省略号。
    • @me:原始的标题内容。

    效果:

    • "这是一个很长的标题,需要被截断" -> "这是一个很长的标题,..."
    • " -> "短标题" (因为不匹配正则模式,所以不会被替换)

修改 PHP 源文件(不推荐,仅作了解)

这种方法是直接修改 DedeCMS 的核心文件,虽然可以实现,但强烈不推荐,因为:

  1. 升级 DedeCMS 时,你的修改会被覆盖,需要重新修改。
  2. 可能影响其他依赖此函数的模块。
  3. 容易引入不稳定性。

操作步骤(仅作了解):

  1. 找到文件:/include/helpers/extend.helper.php
  2. 在文件末尾,?> 之前,添加你自定义的函数,
    if ( ! function_exists('my_title_cut'))
    {
        function my_title_cut($title, $len = 40, $dot = '...')
        {
            if (strlen($title) > $len) {
                return mb_substr($title, 0, $len, 'UTF-8') . $dot;
            } else {
                return $title;
            }
        }
    }
  3. 在模板中调用这个新函数:
    <a href='[field:arcurl/]'>{dede:field function='my_title_cut(@me, 20, "...")'/}</a>

总结与最佳实践

方法 优点 缺点 推荐度
cn_substr 函数 简单、标准、稳定,专为中文优化,按“字”截断,符合中文排版习惯。 功能相对固定。 ⭐⭐⭐⭐⭐ (强烈推荐)
substitute 函数 非常灵活,可以实现复杂的正则匹配和替换。 语法稍复杂,需要了解正则表达式。 ⭐⭐⭐⭐ (适用于特殊需求)
修改 PHP 源文件 可以实现任何想要的功能。 破坏性大,升级麻烦,有风险。 ⭐ (不推荐,除非万不得已)

给你的建议:

直接使用 方法一,在你的模板文件中找到 [field:title/] 并将其替换为:

{dede:field function='cn_substr(@me, 30, "...")'/}

30 调整成一个适合你网站布局的数值即可,这是最安全、最标准的做法。

-- 展开阅读全文 --
头像
C语言如何将二进制转为十进制?
« 上一篇 03-06
福建省计算机二级C语言题库在哪找?
下一篇 » 03-06

相关文章

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

目录[+]