如何在AnQiCMS模板中获取并显示当前文章的详细内容?

构建一个内容丰富的网站,文章详情页无疑是核心所在。它承载着网站最具体、最有价值的信息,也是用户停留时间最长、互动最频繁的页面之一。在AnQiCMS(安企CMS)中,借助其灵活的模板引擎和丰富的标签系统,我们可以轻松地获取并优雅地展示当前文章的详细内容。

AnQiCMS的模板系统设计简洁高效,类似于Django模板语法,通过双花括号 {{变量}} 获取变量值,单花括号加百分号 {% 标签 %} 调用功能标签。这使得即使是不熟悉Go语言的开发者,也能快速上手进行模板定制。

核心标签:archiveDetail 详解

要在文章详情页获取当前文章的详细内容,最核心的标签是 archiveDetail。顾名思义,它专门用于获取单篇“存档”(即文章或产品等具体内容)的详细信息。

当我们访问一个文章详情页面时,AnQiCMS会自动识别当前页面的文章ID,并提供该文章的所有数据。通常,你不需要做任何额外配置,直接使用 archiveDetail 标签,就可以获取到当前页面的文章数据。

archiveDetail 标签的基本用法是 {% archiveDetail with name="字段名称" %}。其中 name 参数指定了你想要获取的文章的某个具体字段。

以下是一些常用的文章字段及其获取方式:

  • 文章标题 (Title): 要显示文章的标题,可以使用 {% archiveDetail with name="Title" %}。这会直接输出当前文章的标题。
  • 文章简介 (Description): 文章简介通常用于摘要或SEO描述,获取方式为 {% archiveDetail with name="Description" %}
  • 文章正文 (Content): 这是文章的核心内容。由于文章正文可能包含HTML标签或Markdown语法,在模板中显示时需要特别注意。 首先,正文内容需要使用 |safe 过滤器来确保HTML标签被正确解析,而不是作为纯文本显示。例如:{{ archiveDetail with name="Content" | safe }}。 如果你的文章内容是使用Markdown编辑器编写的,AnQiCMS提供了 render=true 参数来自动将Markdown渲染为HTML:{% archiveDetail with name="Content" render=true | safe %}。 此外,如果正文中的图片需要实现懒加载,你还可以通过 lazy="data-src" 等参数指定图片src属性的替代名,以配合前端的懒加载脚本。
  • 发布时间 (CreatedTime) 与更新时间 (UpdatedTime): 这些时间字段通常以时间戳形式存储。AnQiCMS提供了 stampToDate 辅助函数来将时间戳格式化为可读的日期字符串。例如,显示发布日期为“2006-01-02”格式:{{ stampToDate(archiveDetail with name="CreatedTime"), "2006-01-02") }}
  • 封面图片 (Logo, Thumb, Images)Logo 通常指文章主图或大图,Thumb 是缩略图。它们可以直接通过 <img> 标签引用:<img src="{% archiveDetail with name="Logo" %}" alt="{% archiveDetail with name="Title" %}" />。 如果文章包含多张封面图片(如产品图集),Images 字段会返回一个图片URL数组。这时,你需要使用 for 循环来遍历并显示这些图片:
    
    {% archiveDetail articleImages with name="Images" %}
    <div class="image-gallery">
        {% for imgUrl in articleImages %}
        <img src="{{ imgUrl }}" alt="图片描述" />
        {% endfor %}
    </div>
    {% endarchiveDetail %}
    
  • 所属分类 (Category): 文章的分类信息可以通过 archiveDetail 直接获取其分类ID,然后结合 categoryDetail 标签获取分类名称和链接:
    
    {% set categoryId = archiveDetail with name="CategoryId" %}
    <a href="{% categoryDetail with name='Link' id=categoryId %}">
        {% categoryDetail with name='Title' id=categoryId %}
    </a>
    
    或者直接使用 {{archive.Category.Title}} 的方式访问。
  • 浏览量 (Views): 简单地显示文章的浏览次数:{% archiveDetail with name="Views" %}
  • 自定义字段: AnQiCMS支持为不同的内容模型(如文章、产品)添加自定义字段。如果你在后台为文章模型添加了如“作者(author)”、“来源(source)”等自定义字段,可以通过两种方式获取:
    1. 直接访问单个字段{% archiveDetail with name="author" %}
    2. 循环遍历所有自定义字段:使用 archiveParams 标签。这在需要动态展示所有附加属性时非常有用:
      
      {% archiveParams params %}
      <ul class="article-meta">
          {% for item in params %}
          <li><span>{{ item.Name }}:</span>{{ item.Value }}</li>
          {% endfor %}
      </ul>
      {% endarchiveParams %}
      

实际应用示例:构建文章详情页

综合上述标签,一个典型的文章详情页模板可能看起来像这样,它展示了文章的标题、分类、发布时间、标签、浏览量和正文:

<article class="article-detail">
    <h1 class="article-title">{% archiveDetail with name="Title" %}</h1>
    <div class="article-meta-info">
        {# 获取文章分类信息 #}
        {% set categoryId = archiveDetail with name="CategoryId" %}
        <span class="category-link">
            分类:<a href="{% categoryDetail with name='Link' id=categoryId %}">{% categoryDetail with name='Title' id=categoryId %}</a>
        </span>
        {# 格式化显示发布时间 #}
        <span class="publish-date">发布于:{{ stampToDate(archiveDetail with name="CreatedTime"), "2006-01-02") }}</span>
        {# 显示文章浏览量 #}
        <span class="views-count">阅读:{% archiveDetail with name="Views" %}次</span>
        {# 获取并显示文章标签 #}
        <div class="article-tags">
            标签:
            {% tagList tags with itemId=archive.Id limit="5" %}
            {% for tag in tags %}
            <a href="{{ tag.Link }}">{{ tag.Title }}</a>
            {% endfor %}
            {% endtagList %}
        </div>
    </div>

    {# 显示文章主图,如果存在的话 #}
    {% set articleLogo = archiveDetail with name="Logo" %}
    {% if articleLogo %}
    <div class="article-thumbnail">
        <img src="{{ articleLogo }}" alt="{% archiveDetail with name='Title' %}" />
    </div>
    {% endif %}

    <div class="article-content">
        {# 显示文章正文,如果为Markdown则渲染,并确保HTML安全解析 #}
        {% archiveDetail articleContent with name="Content" render=true %}
        {{ articleContent | safe }}
        {% endarchiveDetail %}
    </div>

    {# 显示上一篇和下一篇文章链接 #}
    <div class="article-navigation">
        <div class="prev-article">
            {% prevArchive prev %}
            上一篇:{% if prev %}<a href="{{ prev.Link }}">{{ prev.Title }}</a>{% else %}没有了{% endif %}
            {% endprevArchive %}
        </div>
        <div class="next-article">
            {% nextArchive next %}
            下一篇:{% if next %}<a href="{{ next.Link }}">{{ next.Title }}</a>{% else %}没有了{% endif %}
            {% endnextArchive %}
        </div>
    </div>
</article>

这段代码展示了如何将多个标签组合使用,以构建一个功能相对完整的文章详情页。

高级技巧与注意事项

  • 获取特定文章详情:虽然 archiveDetail 默认获取当前页面的文章,但你也可以通过 idtoken 参数来指定获取其他文章的详情。例如:{% archiveDetail with name="Title" id="123" %} 将获取ID为123的文章标题。
  • 调试变量:在模板开发过程中,如果对某个变量的结构不确定,可以使用 |dump 过滤器将其详细结构打印出来,这对于调试非常有帮助:{{ archive|dump }}
  • SEO优化:文章详情页面的TDK(Title, Description, Keywords)可以通过 tdk 标签获取,而 archiveDetail 标签的 SeoTitleKeywordsDescription 字段也直接对应了文章自身的SEO设置。此外,规范链接 (CanonicalUrl) 也是SEO的重要一环,可以通过 {% tdk with name="CanonicalUrl" %} 获取并应用。

通过以上这些标签和技巧,AnQiCMS的用户可以非常灵活且高效地在模板中获取并展示文章的详细内容,满足多样化的网站内容展示需求。


常见问题 (FAQ)

  1. **如何显示文章的