dede如何调用文章正文?

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

页(article_article.htm)中调用正文

这是最简单、最直接的情况,文章内容页默认已经加载了文章数据,你只需要使用系统提供的全局变量即可。

dede 调用文章正文
(图片来源网络,侵删)

核心变量: {dede:field.body/}

这个变量直接输出当前文章的完整正文内容,包含了你在后台编辑器中设置的所有HTML标签、图片、视频等。

示例代码:

在你的 article_article.htm 模板文件中,找到你想放置正文内容的位置,直接使用如下代码:

dede 调用文章正文
(图片来源网络,侵删)
<article class="article-content">
    {dede:field.body/}
</article>

特点:

  • 最常用:用于文章详情页的显示。
  • 包含所有格式:会原样输出编辑器中的所有内容。
  • 无需额外设置:在文章内容页中,此变量是默认可用的。

在列表页或首页调用文章摘要(推荐)

在首页、列表页、栏目页等地方,我们通常不希望显示完整的文章正文,因为那样会非常长,影响页面加载速度和用户体验,我们一般只调用文章的摘要

核心标签: {dede:field.description function='html2text(@me)'/}

这个标签的作用是:

dede 调用文章正文
(图片来源网络,侵删)
  1. {dede:field.description}:获取文章在后台“字段中填写的内容。
  2. function='html2text(@me)':这是一个系统内置的函数,它会将获取到的HTML格式的摘要内容纯文本化,去除所有HTML标签,只保留文字。

使用场景:

  1. 在列表页(list_article.htm

    {dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p class="summary">[field:description function='html2text(@me)'/]...</p>
    </li>
    {/dede:list}
  2. 在首页(index.htm

    {dede:arclist titlelen='30' row='5'}
    <div class="entry">
        <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
        <p class="excerpt">[field:description function='html2text(@me)'/]</p>
    </div>
    {/dede:arclist}

特点:

  • 性能最佳:只调用简短摘要,页面加载快。
  • 用户体验好:列表页简洁明了,用户可以快速浏览。
  • 需要手动填写摘要:这个方法要求你在发布文章时,必须在“字段填写内容。

在列表页或首页调用正文的一部分(不推荐,但可行)

如果你没有填写摘要,又想在列表页显示正文的前N个字符,可以通过修改模板文件来实现。注意:此方法会增加服务器负担,不推荐在大型网站上使用。

操作步骤:

  1. 打开 /include/arc.listview.class.php 文件。

  2. 找到大约第740行左右的代码(不同版本行号可能不同):

    // 替换正文里的内容
    $this->Fields['body'] = preg_replace("/\[page\](.+?)\[\/page\]/is", '', $this->Fields['body']);
  3. 在这行代码下面,添加如下代码来截取正文:

    // 截取正文前200个字符作为摘要
    $this->Fields['description'] = cn_substr(strip_tags(htmlspecialchars_decode($this->Fields['body'])), 200);
    • strip_tags():去除HTML标签。
    • htmlspecialchars_decode():将HTML实体转换回字符。
    • cn_substr():DedeCMS的截取字符串函数,第二个参数200是截取的长度,你可以根据需要修改。
  4. 保存文件。

添加完成后,你就可以在模板中像调用摘要一样调用正文了:

{dede:list pagesize='10'}
<li>
    <a href="[field:arcurl/]">[field:title/]</a>
    <p class="summary">[field:description/]...</p>
</li>
{/dede:list}

特点:

  • 无需手动填写摘要:系统自动从正文中提取。
  • 增加服务器负担:每次列表页加载时,都需要对每篇文章的正文进行处理,会影响性能。
  • 可能格式错乱:如果正文中包含代码或不规范的HTML,截取结果可能不理想。

使用自定义宏标签(最灵活、最推荐的高级方法)

如果你想在多个地方(如首页、列表页、自定义页面)都能灵活地调用文章内容,并且希望有统一的控制,那么使用自定义宏标签是最佳选择。

操作步骤:

  1. 进入后台:登录DedeCMS后台 -> 系统 -> SQL命令行工具

  2. 执行SQL:在输入框中粘贴以下SQL语句,然后点击“查询”执行。

    ALTER TABLE `dede_arctype` ADD `body` TEXT NOT NULL;

    这句代码会给栏目表(dede_arctype)增加一个名为body的文本字段,用于存储模板代码。

  3. 修改模板文件

    • 打开 /include/typelink.class.php 文件。
    • 找到 function GetList 函数(大约在第290行),在函数内 $typeinfos 数组赋值的最后,添加一行代码:
      $typeinfos['templet'] = $this->TypeInfos['templet'];
    • 打开 /include/arc.listview.class.php 文件。
    • 找到 function GetList 函数(大约在第750行),在函数内 $this->Fields 赋值的最后,添加一行代码:
      $this->Fields['templet'] = $this->TypeInfos['templet'];
  4. 使用自定义宏标签: 你可以在任何使用 {dede:list}{dede:arclist} 的地方,通过 [field:templet/] 来调用一个自定义的模板片段。

    示例: 假设你想在列表页调用文章正文的前100个字符,并加上“阅读更多”链接。

    • 第一步:在后台的“栏目管理”中,编辑任意一个栏目,在“自定义栏目模板”中填入你的模板代码,

      [field:body function='cn_substr(html2text(@me), 100)'/]... <a href="[field:arcurl/]">阅读更多</a>
      • html2text(@me):先将正文转为纯文本。
      • cn_substr(..., 100):再截取前100个字符。
    • 第二步:在你的列表页模板(list_article.htm)中,使用 [field:templet/] 来调用它:

      {dede:list pagesize='10'}
      <li>
          <a href="[field:arcurl/]">[field:title/]</a>
          <p class="summary">[field:templet/]</p>
      </li>
      {/dede:list}

特点:

  • 极度灵活:可以为不同栏目设置不同的内容展示方式。
  • 代码复用:将复杂的逻辑封装在栏目设置中,模板文件本身非常简洁。
  • 性能可控:逻辑处理在后台设置,前端调用简单,性能影响小。

总结与推荐

场景 推荐方法 优点 缺点
文章详情页 {dede:field.body/} 简单直接,功能完整
列表页/首页 {dede:field.description function='html2text(@me)'/} 性能好,用户体验佳 需要手动填写摘要
列表页/首页 (无摘要) 修改arc.listview.class.php 自动生成,无需手动 增加服务器负担,可能出错
多场景灵活调用 自定义宏标签 [field:templet/] 最灵活,可复用,强大 设置步骤稍复杂

给新手的建议:

  1. 先掌握方法一和方法二,它们能满足90%以上的日常需求。
  2. 发布文章时,养成填写摘要的好习惯,这对SEO和用户体验都至关重要。
  3. 当你的网站需要更复杂的个性化展示时,再深入学习和使用方法四(自定义宏标签)。
-- 展开阅读全文 --
头像
织梦手机端分页失效怎么办?
« 上一篇 今天
dede页面如何改成伪静态?
下一篇 » 今天

相关文章

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

目录[+]