dede list短标题如何实现?

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

使用 cn_substr 函数直接截取(最常用)

这是最直接、最简单的方法,直接在模板文件中使用 DedeCMS 自带的字符串截断函数 cn_substr

dede list 短标题
(图片来源网络,侵删)

函数说明: cn_substr($str, $start, $length)

  • $str: 要截取的字符串,这里就是文章标题 {dede:field.title/}
  • $start: 开始截取的位置(从0开始)。
  • $length: 要截取的字符长度。

操作步骤:

  1. 打开你的列表页模板文件,通常位于 /templets/你的模板目录/list_*.php
  2. 找到显示文章标题的标签,通常是 {dede:field.title/}
  3. 将其替换为 cn_substr 函数。

示例代码: 只显示前 20 个字符。

{dede:list pagesize='10'}
    <li>
        <!-- 原始方式显示完整标题 -->
        <!-- <a href="[field:arcurl/]">[field:title/]</a> -->
        <!-- 使用 cn_substr 显示短标题,只显示前20个字符 -->
        <a href="[field:arcurl/]">[field:title function='cn_substr(@me, 20)'/]</a>
        <!-- 如果标题长度超过20个字符,后面可以加上省略号 -->
        <a href="[field:arcurl/]">[field:title function='cn_substr(@me, 20) "..."/]</a>
    </li>
{/dede:list}

代码解释:

dede list 短标题
(图片来源网络,侵删)
  • [field:title function='cn_substr(@me, 20)'/]:
    • [field:title/]: 获取当前文章的标题。
    • function='...': 对获取到的值执行函数操作。
    • @me: DedeCMS 模板中的特殊变量,代表当前标签的原始值,在这里就是 {field:title} 的完整内容。
    • cn_substr(@me, 20): 对 @me)执行 cn_substr 函数,截取前 20 个字符。

使用 substring 函数(ASCII 字符截取)

中不包含中文等全角字符,或者你只想按字节(Byte)截取,可以使用 substring 函数,它和 cn_substr 的区别在于,cn_substr 是按字符(一个汉字算一个字符)来计算的,而 substring 是按字节(一个汉字可能占 2-3 个字节)来计算的。

示例代码:

{dede:list pagesize='10'}
    <li>
        <!-- 使用 substring 截取前10个字节 -->
        <a href="[field:arcurl/]">[field:title function='substring(@me, 0, 10)'/]</a>
    </li>
{/dede:list}

注意: 对于包含中文的标题,使用 substring 很容易导致截断处出现乱码(如“标题abc变”),因此强烈推荐使用 cn_substr


使用自定义函数(最灵活)

当你有更复杂的需求时,比如想自定义截取后的样式、添加更多判断逻辑,最好的方法是创建一个自定义函数。

dede list 短标题
(图片来源网络,侵删)

操作步骤:

  1. 创建自定义函数文件:

    • /include/ 目录下创建一个新文件,myfunctions.php
    • 在这个文件中定义你的函数,这里我们定义一个 get_short_title 函数,它可以在截断后自动添加省略号,并且处理了标题过长的情况。
    // 文件路径: /include/myfunctions.php
    if(!defined('DEDEINC')) exit('Request Error!');
    /**
     * 获取短标题
     * @param string $title 原始标题
     * @param int $length 截取长度
     * @return string 处理后的短标题
     */
    function get_short_title($title, $length = 20) {
        // 如果标题长度小于等于指定长度,直接返回
        if (mb_strlen($title, 'UTF-8') <= $length) {
            return $title;
        }
        // 否则进行截断并添加省略号
        return mb_substr($title, 0, $length, 'UTF-8') . '...';
    }
  2. 引入自定义函数文件:

    • 在你的列表页模板文件(list_*.php)的最顶部,引入你刚刚创建的文件。
    {dede:config}
    <!-- 在模板顶部引入自定义函数文件 -->
    <?php
    require_once(DEDEROOT.'/include/myfunctions.php');
    ?>
    {/dede:config}
  3. 在模板中使用自定义函数:

    • 现在可以在模板中调用你的 get_short_title 函数了。
    {dede:list pagesize='10'}
        <li>
            <!-- 调用自定义函数,截取前15个字符 -->
            <a href="[field:arcurl/]">[field:title function='get_short_title(@me, 15)'/]</a>
        </li>
    {/dede:list}

优点:

  • 逻辑清晰:所有自定义逻辑都放在 PHP 文件中,模板文件更干净。
  • 可复用:这个函数可以在任何其他模板(如文章页 article_*.php)中调用。
  • 功能强大:可以轻松扩展,比如添加过滤 HTML 标签、自定义省略号样式等。

修改 DedeCMS 核心文件(不推荐,除非你确定后果)

这种方法是直接修改 DedeCMS 的源代码,让 {dede:field.title/} 默认就显示短标题。极不推荐,因为升级 DedeCMS 时你的修改会被覆盖,且可能导致意想不到的问题。

仅作了解: 你可以在 /include/helpers/arc.listview.class.php 文件中找到处理列表标签的逻辑,修改它,使其在输出标题时自动调用截断函数,但这属于“黑魔法”,强烈建议不要使用。


总结与推荐

方法 优点 缺点 适用场景
cn_substr 简单、快速、直接,无需修改文件 功能单一,无法处理复杂逻辑 绝大多数情况下的首选,日常使用完全足够。
substring 适用于纯英文或按字节截取的场景 对中文不友好,易出乱码 标题纯为英文,且对字节长度有严格要求时。
自定义函数 最灵活、最规范,可扩展性强 需要额外创建文件和引入 有复杂需求,如自定义省略号、过滤内容、多处复用。
修改核心 一劳永逸(理论上) 破坏系统完整性,升级麻烦,风险高 不推荐新手使用,仅用于深度定制且不打算升级的系统。

对于绝大多数用户,我强烈推荐使用【方法一】或【方法三】。

  • 如果只是简单截取,用 方法一
  • 如果项目较大,希望代码更规范、功能更强大,用 方法三
-- 展开阅读全文 --
头像
数据结构与算法C语言描述如何高效学习?
« 上一篇 今天
织梦字体颜色代码H5如何使用?
下一篇 » 今天

相关文章

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

目录[+]