织梦调用文章摘要标签

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

使用系统默认摘要字段(最常用、最推荐)

这是最标准、最简单的方法,织梦在后台发布文章时,有一个专门的“输入框,我们只需要调用这个字段即可。

织梦调用文章摘要标签
(图片来源网络,侵删)

标签语法:

[field:description/]

参数说明:

这个标签可以附加一些参数来控制摘要的显示效果。

  • length='数字': 设置摘要显示的字数(按字节计算,一个汉字算2个字节,一个字母算1个字节)。

    • [field:description function='cn_substr(@me, 100)'/] 这里的 100 是字节长度。
    • 更简单的方式是使用 length[field:description length='100'/] (注意:新版本织梦推荐使用 functionlength,具体取决于模板引擎版本,但 length 更直观)。
  • function='htmlspecialchars': 对摘要中的HTML特殊字符(如 <, >, &)进行转义,防止破坏页面结构。强烈建议加上

  • ellipsis='...': 在摘要被截断后,在末尾添加省略号。

    织梦调用文章摘要标签
    (图片来源网络,侵删)

综合应用示例:

假设我们要在文章列表中调用摘要,限制在100个字节,并转义HTML字符,末尾加省略号。

<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<p>[field:description function='htmlspecialchars(cn_substr(@me, 100))' ellipsis='...'/]</p>

代码解析:

  1. [field:arcurl/]: 获取文章链接。
  2. [field:title/]: 获取文章标题。
  3. [field:description ...]: 调用摘要。
    • @me: 代表当前字段的原始值,即 description 字段的内容。
    • cn_substr(@me, 100): 截取 @me 的前100个字节。
    • htmlspecialchars(...): 对截取后的结果进行HTML转义。
    • ellipsis='...'': 如果内容被截断,则在末尾添加 。

自动截取文章内容(无摘要时使用)

编辑人员可能忘记填写摘要字段,为了保证列表页内容不会为空,我们可以使用一个备用方案:自动从文章正文中截取一段文字作为摘要。

标签语法:

[field:body function='cn_substr(@me, 200)'/]

注意:

  • body 是文章正文的字段名。
  • 这种方法会截取文章正文的前200个字节,但可能会包含一些无用的HTML标签(如 <p>, <img>),导致显示不美观。

优化方案:过滤HTML标签后再截取

我们可以使用 htmlspecialcharsereg_replace (或 preg_replace) 组合,先去掉HTML标签,再进行截取和转义。

[field:body function='htmlspecialchars(cn_substr(ereg_replace("(<[^>]*>)", "", @me), 200))'/]

代码解析:

  1. ereg_replace("(<[^>]*>)", "", @me): 使用正则表达式 (<[^>]*>) 匹配并移除所有HTML标签。
  2. cn_substr(..., 200): 对纯文本内容进行截取。
  3. htmlspecialchars(...): 对最终结果进行转义。

使用自定义字段(灵活扩展)

字段不够用,或者你想为不同栏目设置不同格式的摘要,可以创建自定义字段。

  1. 后台设置

    • 进入“核心” -> “频道模型” -> “内容模型管理”。
    • 选择你正在使用的模型(如“文章”模型),点击“更改”。
    • 在“字段管理”中,点击“添加新字段”。
    • 字段名建议用英文,如 custom_summary
    • 字段类型选择“文本区域”或“多行文本”。
    • 提交后,在发布文章的页面就会出现你新添加的字段。
  2. 模板调用: 调用方式和默认摘要字段完全一样,只是把 description 换成你的自定义字段名。

[field:custom_summary/]

同样可以加上参数:

[field:custom_summary length='150' function='htmlspecialchars'/]

完整的列表页调用示例

下面是一个典型的文章列表页(list_article.htm)的循环代码,综合运用了上述方法。

{dede:list pagesize='10'}
<li>
    <!-- 文章标题和链接 -->
    <h2><a href="[field:arcurl/]" title="[field:title function='htmlspecialchars(@me)']">[field:title/]</a></h2>
    <!-- 优先调用系统摘要,如果没有则自动截取正文 -->
    <p>
        <!-- 先尝试调用系统摘要,并截取100字节 -->
        [field:description function='cn_substr(htmlspecialchars(@me), 100)' ellipsis='...'/]
        <!-- 如果系统摘要为空,则自动截取正文200字节作为备用 -->
        <span class="auto-summary" style="display:none;">[field:body function='cn_substr(ereg_replace("(<[^>]*>)", "", @me), 200)'/]</span>
    </p>
    <!-- 文章其他信息 -->
    <div class="info">
        发布时间:[field:pubdate function='MyDate('Y-m-d', @me)'] 
        作者:[field:writer/] 
        浏览:[field:click/]
    </div>
</li>
{/dede:list}

注意: 上面代码中 auto-summary 的部分只是一个示例,织梦的列表标签在循环时,description 为空,它本身不会自动去调用 body,在实际开发中,更常见的做法是:

  1. 严格要求编辑填写摘要,并作为网站规范。
  2. 如果一定要实现“自动截取”作为备用,可能需要修改织梦的核心文件或在模板中使用更复杂的PHP逻辑,但这会增加维护难度,对于大多数网站,使用方法一就足够了。
方法 优点 缺点 适用场景
默认摘要 [field:description/] 标准、高效、可控 依赖编辑人员手动填写 所有列表页、频道页的首选
自动截取 [field:body function='...'/] 作为备用方案,避免摘要为空 可能包含HTML标签,显示不美观 当无法保证摘要一定填写时使用
自定义摘要 [field:自定义字段名/] 灵活,可满足特殊需求 需要后台配置,增加复杂度 不同栏目需要不同摘要格式时

对于99%的情况,请直接使用 方法一,并配合 lengthfunction 参数进行优化,这是最符合织梦设计理念且最稳定可靠的方式。

-- 展开阅读全文 --
头像
C语言16进制转10进制如何实现?
« 上一篇 今天
数据结构C语言版课后答案哪里能找到?
下一篇 » 今天

相关文章

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

目录[+]