构建一个内容丰富的网站,文章详情页无疑是核心所在。它承载着网站最具体、最有价值的信息,也是用户停留时间最长、互动最频繁的页面之一。在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)”等自定义字段,可以通过两种方式获取:
- 直接访问单个字段:
{% archiveDetail with name="author" %}。 - 循环遍历所有自定义字段:使用
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默认获取当前页面的文章,但你也可以通过id或token参数来指定获取其他文章的详情。例如:{% archiveDetail with name="Title" id="123" %}将获取ID为123的文章标题。 - 调试变量:在模板开发过程中,如果对某个变量的结构不确定,可以使用
|dump过滤器将其详细结构打印出来,这对于调试非常有帮助:{{ archive|dump }}。 - SEO优化:文章详情页面的TDK(Title, Description, Keywords)可以通过
tdk标签获取,而archiveDetail标签的SeoTitle、Keywords、Description字段也直接对应了文章自身的SEO设置。此外,规范链接 (CanonicalUrl) 也是SEO的重要一环,可以通过{% tdk with name="CanonicalUrl" %}获取并应用。
通过以上这些标签和技巧,AnQiCMS的用户可以非常灵活且高效地在模板中获取并展示文章的详细内容,满足多样化的网站内容展示需求。
常见问题 (FAQ)
- **如何显示文章的