如何在 AnQiCMS 文章详情页中自动生成并显示内容目录(ContentTitles)?

📅 👁️ 65

在 AnQiCMS 文章详情页中自动生成并显示内容目录(ContentTitles)?

对于长篇内容,一个清晰的内容目录(或称“文章大纲”、“章节导航”)能够极大地提升用户的阅读体验。它不仅能帮助读者快速了解文章结构,还能让他们直接跳转到感兴趣的章节,从而提高内容的可读性和用户满意度。AnQiCMS 充分考虑到了这一需求,在文章详情页中提供了一种便捷的方式来自动生成并展示内容目录。

AnQiCMS 如何获取内容目录数据?

AnQiCMS 的强大之处在于其模板引擎能够智能地解析文章内容。当您在文章编辑时使用了标准的 HTML 标题标签(<h1><h2><h3>等,或在 Markdown 编辑器中使用了 ###### 等标记),AnQiCMS 会自动提取这些标题,并将它们整理成结构化的数据,供模板调用。

要获取这些结构化的内容目录数据,我们需要用到 archiveDetail 标签,并指定 name="ContentTitles"。这个标签会返回一个数组,其中包含了文章所有检测到的标题信息。

每个数组项都是一个对象,包含以下关键信息:

  • Title:标题的文本内容。
  • Tag:标题使用的 HTML 标签(例如 H1H2)。
  • Level:标题的层级(H1 对应 Level 1,H2 对应 Level 2,以此类推),这对于目录的缩进和样式设计非常有用。
  • Prefix:如果标题内容中有序号(如 “1. 引言”),系统会自动提取这个前缀。

在模板中显示内容目录的步骤

要在文章详情页中展示内容目录,您需要对当前的详情页模板进行编辑。

第一步:找到并编辑文章详情页模板

通常情况下,文章详情页的模板文件位于您当前主题目录下的 archive/detail.html 或直接是 detail.html。如果您自定义了文章模型或特定文章的模板,请根据您的配置找到相应的模板文件。

第二步:使用 archiveDetail 标签获取 ContentTitles 数据

在模板文件中,找到您希望显示内容目录的位置(通常在文章内容上方、侧边栏或文章内容内部的某个合适位置)。然后,使用 archiveDetail 标签将内容目录数据赋值给一个变量。例如,我们可以将其赋值给一个名为 contentTitles 的变量:

{% archiveDetail contentTitles with name="ContentTitles" %}

现在,contentTitles 变量就包含了文章中所有标题的结构化数据。

第三步:循环遍历 contentTitles 数据并渲染目录

由于 contentTitles 是一个数组,我们需要使用 for 循环来遍历它,并逐一显示每个标题。在循环中,您可以根据 item.Titleitem.Tagitem.Level 来构建目录的 HTML 结构。

一个基本的目录显示代码可能如下所示:

{% archiveDetail contentTitles with name="ContentTitles" %}
{% if contentTitles %}
<div class="article-toc">
    <h4>文章目录</h4>
    <ul>
    {% for item in contentTitles %}
        {# 根据层级添加缩进样式,例如使用CSS类或内联样式 #}
        <li class="toc-level-{{ item.Level }}">
            <a href="#{{ item.Title|urlencode }}" title="{{ item.Title }}">
                {% if item.Prefix %}{{ item.Prefix }} {% endif %}{{ item.Title }}
            </a>
        </li>
    {% endfor %}
    </ul>
</div>
{% endif %}

代码解释:

  • {% if contentTitles %}:这是一个条件判断,确保只有当文章中存在标题时,内容目录才会被显示,避免空目录的出现。
  • <div class="article-toc">:为内容目录创建一个容器,方便后续的 CSS 样式控制。
  • <li class="toc-level-{{ item.Level }}">:这里利用 item.Level 为每个目录项生成一个独特的 CSS 类(例如 toc-level-1toc-level-2),这让您可以轻松通过 CSS 为不同层级的标题设置不同的缩进、字体大小或颜色,从而直观地展示文章的层级结构。
  • href="#{{ item.Title|urlencode }}":这行代码是为了实现点击目录项后页面能平滑滚动到对应章节。它假设文章内容中的标题(通过 Markdown 或富文本编辑器创建)会自动或通过自定义 JavaScript 生成对应的 id 属性,且 id 值与标题文本相关。|urlencode 过滤器用于确保标题中的特殊字符被正确编码,以便在 URL 中使用。
  • {% if item.Prefix %}{{ item.Prefix }} {% endif %}:如果标题带有数字或点号前缀,这里会将其显示出来。

完善内容目录的样式与交互

仅仅显示目录文本是不够的,您还需要通过 CSS 来美化目录,使其更具可读性。例如,您可以为不同 toc-level-X<li> 元素设置不同的 margin-left 来实现缩进效果。

此外,为了实现点击目录项后平滑滚动到对应标题,并高亮当前阅读章节等高级交互,通常需要结合 JavaScript 来实现。这部分功能可以通过编写一些前端脚本来增强用户体验。例如,您可以监听目录项的点击事件,使用 scrollIntoView API 实现平滑滚动;或者在页面滚动时,检测当前可视区域的标题,并为对应的目录项添加 active 类。

通过以上步骤,您就能在 AnQiCMS 的文章详情页中自动生成并显示一个结构清晰、易于导航的内容目录了。


常见问题 (FAQ)

1. 为什么我的内容目录无法点击跳转到对应章节?

ContentTitles 标签主要负责提取文章中的标题文本和层级信息,但它并不会自动为这些标题生成 HTML id 属性。要实现点击跳转,您需要确保文章内容中的每个标题都有一个唯一的 id 属性。

  • 富文本编辑器: 部分高级富文本编辑器可能支持在编辑时为标题手动添加 id,或有插件能自动生成。
  • Markdown 编辑器: 如果您使用 Markdown 编辑器,很多 Markdown 解析器(如 GitHub Flavored Markdown)会自动为标题(### 等)生成 id 属性。例如,## 我的章节 可能会被解析为 <h2 id="我的章节">我的章节</h2>。如果您的 Markdown 解析器不支持,您可能需要手动添加,例如 ## 我的章节 {#my-chapter}
  • JavaScript 辅助: 如果编辑器无法自动生成 id,您可以在前端通过 JavaScript 动态遍历文章内容中的所有标题(h1h2 等),为它们生成唯一的 id,并更新目录中 <a> 标签的 href 属性。

2. 我的文章内容中明明使用了标题,为什么内容目录却不显示?

首先,请检查您的文章详情页模板中是否正确地添加了上述的代码片段。其次,请确保您在文章内容中使用的确实是标准的 HTML 标题标签(<h1><h6>)或 Markdown 语法中的对应标题标记(#######)。如果使用了其他自定义标签或仅仅是加粗文本,AnQiCMS 将无法识别并提取。最后,清除系统缓存并刷新页面,确保模板更改已生效。

3. 内容目录的层级(Level)是如何确定的,它有什么作用?

Level 属性是根据文章中标题标签的层级关系自动确定的。<h1> 对应 Level 1,<h2> 对应 Level 2,以此类推。这个 Level 属性在目录的样式设计中非常有用。您可以利用它为不同层级的标题设置不同的缩进、字体大小或颜色,从而在视觉上清晰地展示文章的逻辑结构和层次感,提升目录的可读性。例如,一级标题可以靠左对齐,二级标题向右缩进,三级标题进一步缩进

相关文章

AnQiCMS 模板如何实现文章内容的图片懒加载效果以优化性能?

在数字时代,网站的访问速度已成为衡量用户体验和搜索引擎排名的关键指标之一。图片作为网页内容的重要组成部分,往往也是影响页面加载速度的主要因素。当一个页面包含大量高清图片时,浏览器在渲染页面前需要加载所有图片资源,这无疑会大大增加用户的等待时间。为了解决这一问题,图片懒加载(Lazy Loading)技术应运而生。 图片懒加载的核心思想是延迟加载非当前视口(即用户当前屏幕可见区域)内的图片

2025-11-07

如何在 AnQiCMS 模板中显示文章的自定义字段内容(如作者、来源)?

AnQiCMS以其灵活的内容模型和强大的模板标签系统,为网站内容的个性化展示提供了极大的便利。在网站运营中,我们常常需要为文章、产品或其他内容添加一些标准字段之外的信息,例如文章的作者、内容来源、产品批次号、或特定的SEO信息等。这些非标准化的信息,AnQiCMS称之为“自定义字段”,它们能够让你的网站内容更加专业、详尽,并满足特定的业务需求。 ### 理解自定义字段的价值 自定义字段的引入

2025-11-07

AnQiCMS 模板如何将文章发布时间戳格式化为易读的日期和时间?

在网站内容运营中,文章的发布时间往往是用户关注的焦点之一,它不仅影响用户阅读的兴趣,也对内容的实效性和权威性有着潜在的影响。然而,数据库中存储的时间信息通常是机器可读的时间戳格式,例如一串数字,这对于普通访问者来说是难以理解的。AnQiCMS 充分考虑到了这一点,提供了灵活的方式让您将这些时间戳转化为清晰易读的日期和时间格式,极大地提升了用户体验。 AnQiCMS在后台管理文章时

2025-11-07

如何在 AnQiCMS 网站中显示后台管理的友情链接列表?

在 AnQiCMS 网站中显示后台管理的友情链接列表,是一个非常实用的功能,它不仅有助于提升网站的 SEO 效果,也能为访问者提供更多有价值的外部资源。AnQiCMS 提供了一套简洁高效的机制来管理和展示这些链接,让即使是初次接触的用户也能轻松上手。 要实现友情链接的展示,我们主要分两步进行:首先,在 AnQiCMS 的后台管理系统中配置和维护友情链接;其次

2025-11-07

AnQiCMS 模板如何根据Tag ID获取并显示相关的文章列表?

内容管理系统中,Tag(标签)扮演着重要的角色。它们不仅能帮助我们灵活地组织内容,将横跨不同分类但主题相近的文章关联起来,还能有效提升网站的内链结构和用户体验。当用户对某个特定主题感兴趣时,通过点击一个 Tag,就能方便地查阅所有相关的文章。AnQiCMS 提供了一套直观而强大的模板标签,让您能够轻松地根据 Tag ID 获取并展示这些相关的文章列表。 ### 理解 AnQiCMS 中的

2025-11-07

如何在 AnQiCMS 模板中显示当前文章所属的所有Tag标签?

在 AnQiCMS 模板中灵活展示文章标签 在网站内容运营中,标签(Tags)是一种极为有效的内容组织方式。它们不仅能帮助用户更快地找到相关内容,提升网站的浏览体验,对于搜索引擎优化(SEO)也有着不可忽视的积极作用。AnQiCMS 作为一个功能丰富的企业级内容管理系统,自然也提供了强大的标签管理和调用功能,让我们可以轻松地在文章详情页展示当前文章所关联的所有标签。 这篇文章将引导你如何在

2025-11-07

AnQiCMS 如何在模板中动态显示网站首页的Title、Keywords和Description信息?

在网站运营中,首页的Title(标题)、Keywords(关键词)和Description(描述)是网站在搜索引擎结果页面(SERP)上展示给用户的第一印象,也是搜索引擎理解网站核心内容的关键。它们不仅影响着网站的搜索引擎优化(SEO)效果,也直接关系到用户是否会点击进入您的网站。AnQiCMS作为一款功能丰富的企业级内容管理系统,提供了直观而强大的方式来管理这些重要的SEO元素。 接下来

2025-11-07

如何在 AnQiCMS 模板中判断一个变量是否为空并设置默认显示值?

在网站模板开发过程中,经常会遇到变量值可能为空的情况。如果不进行妥善处理,前端页面可能会出现不美观的空白区域,甚至显示一些默认的占位符(如 `nil` 或 `null`),这无疑会影响用户体验和网站的专业性。安企CMS(AnQiCMS)提供了强大而灵活的模板引擎,能够帮助我们优雅地判断变量是否为空,并为它们设置合适的默认显示值。 ### 理解 AnQiCMS 模板中的“空” 在

2025-11-07