dede如何调用缩略标题?

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

使用 infolen 属性(最常用、最简单)

这是DedeCMS内置的、最直接的方法,它通过截取标题的字符数来生成缩略标题。

dede调用缩略标题
(图片来源网络,侵删)

标签语法:

{dede:arclist row='10' titlelen='20'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">[field:title function='cn_substr(@me, 20)'/]</a>
    </li>
{/dede:arclist}

参数说明:

  • row='10':表示调用10条文章,len='20'这个参数在这里**无效**,它只对{dede:field.title/}这样的标签起作用,我们需要在function` 中指定截取长度。
  • [field:title function='cn_substr(@me, 20)'/]:这是核心部分。
    • field:title:获取文章的完整标题。
    • function='...':对获取到的值进行函数处理。
    • cn_substr(@me, 20):这是DedeCMS的截取字符串函数。
      • @me:代表当前字段的值,即 [field:title] 的内容。
      • 20:表示截取前20个字符(一个汉字、一个字母或一个符号都算一个字符)。

优点:

  • 简单直接,一行代码搞定。
  • 无需修改任何文件,纯模板标签实现。

缺点:

dede调用缩略标题
(图片来源网络,侵删)
  • 按字符截取,可能会截断词语,导致语义不完整,例如标题为“织梦CMS建站教程大全”,截取15个字符会变成“织梦CMS建站教程大”,看起来有点奇怪。
  • 无法区分中英文是 "DedeCMS is a good CMS!",截取10个字符会变成 "DedeCMS is ",可能把单词截断。

使用 mb_substr 函数(推荐,更智能)

为了解决 cn_substr 可能截断词语的问题,我们可以使用 PHP 的 mb_substr 函数,它能更好地处理中文字符,并且可以按字数(一个汉字算一个字,一个单词也算一个字)来截断。

标签语法:

{dede:arclist row='10'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">[field:title function='mb_substr(@me, 0, 20, "utf-8")'/]</a>
    </li>
{/dede:arclist}

参数说明:

  • [field:title function='mb_substr(@me, 0, 20, "utf-8")'/]
    • mb_substr:多字节字符串截取函数。
    • @me
    • 0:开始截取的位置(0表示从开头)。
    • 20:截取的字数
    • "utf-8":网站编码,非常重要! 如果你的网站是 gbk 编码,这里就要写成 "gbk"

优点:

dede调用缩略标题
(图片来源网络,侵删)
  • 按字数截取,对中文更友好,不会轻易把一个词分开。
  • 语义更完整,显示效果更好。

缺点:

  • 需要确保你的网站编码和函数中的编码参数一致。

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

如果你的需求更复杂,比如希望“**如果标题超过指定长度,就显示省略号 ,否则显示完整标题”,那么自定义函数是最佳选择。

操作步骤:

  1. 创建自定义函数文件 在你的网站根目录下的 include/extend.func.php 文件中(如果这个文件不存在,就新建一个),添加以下 PHP 函数:

    /**
     * 智能截取标题,并添加省略号
     * @param string $title 原始标题
     * @param int $length 截取长度
     * @return string 处理后的标题
     */
    function smart_title($title, $length = 20) {
        // 如果标题长度小于等于指定长度,直接返回
        if (mb_strlen($title, 'utf-8') <= $length) {
            return $title;
        }
        // 否则截取并添加省略号
        return mb_substr($title, 0, $length, 'utf-8') . '...';
    }

    注意:

    • 函数名 smart_title 可以自定义。
    • mb_strlen 用来获取标题的真实长度。
    • utf-8 同样需要根据你的网站编码修改。
  2. 在模板中调用自定义函数 现在你可以像使用普通函数一样在你的模板中调用它了。

    {dede:arclist row='10'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title function='smart_title(@me, 20)'/]</a>
        </li>
    {/dede:arclist}

    参数说明:

    • smart_title(@me, 20):调用我们刚刚创建的 smart_title 函数。
    • @me:将 [field:title] 的值传递给函数的第一个参数。
    • 20:将 20 这个值传递给函数的第二个参数 $length

优点:

  • 逻辑最灵活,可以实现各种复杂需求(如添加省略号、自定义后缀等)。
  • 代码复用性强,在网站的任何地方都可以调用这个函数。
  • 显示效果最专业、最友好。

缺点:

  • 需要修改PHP文件,对新手来说稍微复杂一点。

总结与对比

方法 标签示例 优点 缺点 适用场景
cn_substr [field:title function='cn_substr(@me, 20)'/] 极其简单,无需额外操作 可能截断词语,中英文混合效果差 快速实现,对标题美观度要求不高的地方
mb_substr [field:title function='mb_substr(@me, 0, 20, "utf-8")'/] 按字数截取,中文友好,不轻易断词 不带省略号,需确保编码正确 大多数列表页,追求基本的美观和完整性
自定义函数 [field:title function='smart_title(@me, 20)'/] 最灵活,可添加省略号,效果最佳 需要修改PHP文件,有入门门槛 对显示效果有高要求的网站,推荐使用

强烈推荐使用方法三(自定义函数),因为它能提供最佳的用户体验,是专业开发中常用的做法,如果你只是想快速搞定,方法二 (mb_substr) 也是一个非常好的选择。

-- 展开阅读全文 --
头像
如何清空织梦默认数据库?
« 上一篇 昨天
dede默认密码是多少?怎么恢复?
下一篇 » 昨天

相关文章

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

目录[+]