dede调用分类文章如何限制显示字数?

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

使用 infolen 属性(最简单,推荐)

这是DedeCMS内置的一个最直接、最简单的方法,专门用于截取文章摘要(内容)的长度。

dede调用分类下文章内容限制字数
(图片来源网络,侵删)

标签语法:

{dede:arclist typeid='分类ID' row='10' titlelen='50' infolen='200' }
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>[field:info/]</p>
    </li>
{/dede:arclist}

参数解释:

  • typeid='分类ID':指定要调用哪个分类下的文章。typeid='5',如果要调用多个分类,用英文逗号隔开,如 typeid='5,6,7'
  • row='10':调用文章的数量,len='50'`:标题显示的字数长度(可选)。
  • infolen='200'【核心参数】 这是限制文章内容字数的关键,它会截取文章正文的前200个字符作为摘要显示出来。

优点:

  • 简单、高效,是DedeCMS官方推荐的方式。
  • 不会修改数据库,只是在前端显示时进行截取。

缺点:

dede调用分类下文章内容限制字数
(图片来源网络,侵删)
  • 它截取的是从文章开头算起的固定字符数,可能会在单词或句子中间断开,影响阅读体验。
  • 它调用的是文章正文的摘要,而不是description字段。

使用 description 字段(更推荐,效果更好)

这种方法是调用文章在后台“文档详细内容”页面中填写的 “描述” 字段,这样能保证截取的是一段完整的、有意义的文字,并且在任何地方断句都比直接截取正文要好。

步骤1:在后台文章编辑页填写摘要 登录DedeCMS后台,编辑你要显示的文章,在“文档详细内容”页面的最下方,找到 简介” 输入框,手动填写一段文章的简介(例如200字以内)。

步骤2:在模板中调用 description 字段 在模板文件中,使用 {dede:arclist} 调用 description 字段。

{dede:arclist typeid='分类ID' row='10' titlelen='50'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>[field:description function='cn_substr(@me, 200)'/]</p>
    </li>
{/dede:arclist}

核心技巧: 这里我们使用了 function='cn_substr(@me, 200)'

dede调用分类下文章内容限制字数
(图片来源网络,侵删)
  • @me:代表当前这个字段(在这里就是 description)的原始值。
  • cn_substr():这是DedeCMS的一个PHP函数,用于截取字符串。
  • 200:表示截取200个字符。

优点:是编辑精心撰写的摘要,质量高,可读性好。

  • 截断点由编辑控制,更符合SEO和用户体验。

缺点:

  • 需要手动为每篇文章填写摘要,比较耗时。

使用自定义函数(高级,自动截取)

如果你不想手动填写摘要,又希望 infolen 的截断效果更“人性化”(比如在句号、逗号处断开),可以编写一个自定义函数。

步骤1:创建自定义函数文件 在您的网站根目录下找到 include/helpers/extend.helper.php 文件,在文件末尾的 ?> 之前添加如下PHP函数代码:

/**
 * 智能截取摘要,尽量在句号、空格处断开
 *
 * @param string $str 需要截取的字符串
 * @param int $length 截取长度
 * @param string $dot 超过长度的附加字符
 * @return string
 */
function smart_cutstr($str, $length, $dot = '...')
{
    $str = strip_tags(trim($str)); // 去除HTML标签和首尾空格
    $str = str_replace(array("\n", "\r", "\t"), '', $str); // 去换行和制表符
    // 如果字符串长度小于等于指定长度,直接返回
    if (mb_strlen($str, 'UTF-8') <= $length) {
        return $str;
    }
    // 截取到指定长度的子串
    $substr = mb_substr($str, 0, $length, 'UTF-8');
    // 尝试在最后一个句号、逗号或空格处断开
    $last_dot = mb_strrpos($substr, '。', 0, 'UTF-8');
    $last_comma = mb_strrpos($substr, ',', 0, 'UTF-8');
    $last_space = mb_strrpos($substr, ' ', 0, 'UTF-8');
    // 找到最靠近末尾的断点
    $last_break = max($last_dot, $last_comma, $last_space);
    if ($last_break > 0) {
        return mb_substr($substr, 0, $last_break + 1, 'UTF-8') . $dot;
    } else {
        // 如果没有找到合适的断点,直接截断
        return $substr . $dot;
    }
}

步骤2:在模板中调用自定义函数 现在你可以在模板中像这样使用它:

{dede:arclist typeid='分类ID' row='10' titlelen='50'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>[field:info function='smart_cutstr(@me, 200)'/]</p>
    </li>
{/dede:arclist}

参数解释:

  • [field:info function='smart_cutstr(@me, 200)'/]:这里调用了我们刚刚创建的 smart_cutstr 函数。
  • @me:传递 field:info(文章正文)的原始内容给函数。
  • 200:设置截取长度为200个字符。

优点:

  • 自动处理,无需手动填写摘要。
  • 截断效果比 infolen 更智能,可读性更好。

缺点:

  • 需要修改核心文件(extend.helper.php),升级DedeCMS时可能会被覆盖,需要重新添加。
  • 对于包含大量无意义符号的文章,效果可能不完美。

总结与推荐

方法 优点 缺点 适用场景
infolen 最简单,官方支持 可能截断不自然,调用正文摘要 快速搭建,对内容质量要求不高的列表
description 内容质量最高,可读性好 需要手动为每篇文章填写摘要 新闻门户、博客等对内容展示要求高的网站
自定义函数 自动处理,截断智能 需修改核心文件,有维护成本 长期运营、追求自动化和良好用户体验的网站

给您的建议:

  • 如果只是临时做一个简单的列表,直接使用方法一 (infolen) 就足够了。
  • 如果您的网站是正式运营,希望内容展示更专业、更利于SEO和用户体验,强烈推荐使用方法二 (description),养成在后台填写摘要的好习惯。
  • 如果您有大量的历史文章没有填写摘要,且希望系统自动处理,可以考虑使用方法三(自定义函数)作为折中方案。
-- 展开阅读全文 --
头像
织梦ueditor1.3.6有何新功能或问题?
« 上一篇 今天
苏小红C语言课后答案第二版哪里有?
下一篇 » 今天

相关文章

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

目录[+]