在安企CMS中,无论是展示单个文章的详细内容,还是在列表页中呈现文章标题和摘要,都得益于其灵活且易于理解的模板标签系统。AnQiCMS采用了类似Django模板引擎的语法,让内容的调用变得直观高效。
模板基础:内容呈现的桥梁
在AnQiCMS中,您会发现所有的模板文件都以.html为后缀,并统一存放在您所选用的模板文件夹(例如 /template/default/)中。模板引擎的核心在于两种标记:
- 双花括号
{{ 变量名 }}:用于直接输出变量的内容。 - 单花括号和百分号
{% 标签名 参数 %}:用于实现逻辑控制,如条件判断(if/else)、循环(for)以及调用内置的各种功能标签。
理解了这两种基本标记,我们就可以开始探索如何在AnQiCMS模板中显示文章的标题和内容了。
显示单篇文章的标题与内容 (详情页)
当您访问一篇具体的文章详情页时(例如 article/123.html),AnQiCMS会智能地将当前文章的所有信息作为archive对象提供给模板。这意味着您可以直接通过archive对象访问文章的各种属性。
要显示文章标题,您可以使用以下方式:
<h1>{{ archive.Title }}</h1>
而显示文章的详细内容,通常内容会包含HTML标签(如段落、图片、加粗等),为了确保这些HTML标签能被浏览器正确解析而不是作为纯文本显示,我们需要使用 |safe 过滤器:
<div class="article-content">
{{ archive.Content|safe }}
</div>
|safe 过滤器会告诉模板引擎,这段内容是安全的HTML代码,可以直接输出而无需转义。如果您的文章内容使用了Markdown编辑器撰写,并且希望在前端渲染成HTML,您也可以明确地使用 render=true 参数:
<div class="article-content">
{% archiveDetail archiveContent with name="Content" render=true %}{{ archiveContent|safe }}
</div>
此外,您还可以利用 archiveDetail 标签来更精细地控制内容的显示,或者在非文章详情页面的其他位置调用指定ID的文章内容:
{# 在文章详情页,直接使用即可 #}
<h1>{% archiveDetail with name="Title" %}</h1>
<p>发布时间:{{ stampToDate(archive.CreatedTime, "2006年01月02日") }}</p>
<div class="article-body">
{% archiveDetail articleFullContent with name="Content" lazy="data-src" %}{{ articleFullContent|safe }}
</div>
{# 在其他页面调用ID为1的文章标题和内容 #}
<h2>{% archiveDetail with name="Title" id="1" %}</h2>
<p>{% archiveDetail with name="Description" id="1" %}</p>
在上面的示例中,stampToDate 标签用于将文章的Unix时间戳格式化为可读的日期,lazy="data-src" 是内容中图片懒加载的参数,让图片加载更优化。
显示文章列表中的标题和摘要 (列表页)
在文章列表页(例如分类列表页或搜索结果页),我们通常会展示多篇文章的简要信息,如标题、摘要和链接,而不是完整的文章内容。AnQiCMS提供了 archiveList 标签来实现这一需求。
archiveList 标签允许您根据分类、模块、推荐属性等多种条件获取文章列表。获取到文章列表后,您需要使用 for 循环来遍历每一篇文章。
以下是一个显示文章列表标题、链接和摘要的常见用法:
<ul class="article-list">
{% archiveList articles with type="page" moduleId="1" limit="10" %} {# 获取文章模型ID为1,每页10条的列表 #}
{% for item in articles %}
<li>
<h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
<p class="summary">{{ item.Description }}</p>
<span class="date">发布于:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
</li>
{% empty %}
<li>暂无文章可显示。</li>
{% endfor %}
{% endarchiveList %}
</ul>
在这个示例中:
archiveList标签获取了一个名为articles的文章集合。type="page"表示这是一个需要分页的列表,moduleId="1"指明了文章所属的模型ID,limit="10"则限制了每页显示的文章数量。{% for item in articles %}循环遍历了articles集合中的每一篇文章,并将当前文章对象命名为item。{{ item.Link }}、{{ item.Title }}和{{ item.Description }}分别用于输出文章的链接、标题和自动生成的摘要。{% empty %}块会在articles集合为空时显示,提供了友好的用户提示。stampToDate(item.CreatedTime, "2006-01-02")同样用于格式化文章的创建时间。
通过这些标签的组合使用,您可以在AnQiCMS模板中灵活且高效地展示各种文章内容,满足不同页面的显示需求。掌握这些基本用法,将让您的网站内容运营事半功倍。
常见问题 (FAQ)
为什么我在模板中直接输出
{{ archive.Content }},文章内容中的HTML标签没有被解析,而是原样显示了? 这是因为AnQiCMS模板引擎为了安全考虑,默认会对所有输出内容进行HTML实体转义。如果您确认内容是安全的HTML代码,需要使用|safe过滤器来指示模板引擎跳过转义,例如{{ archive.Content|safe }}。如何在文章列表页只显示文章的简短摘要,而不是完整的文章内容? 在文章列表页,您可以使用
{{ item.Description }}来显示文章的摘要。Description字段通常由系统在发布文章时自动从文章内容中提取前N个字符或由编辑手动填写。如果需要自定义摘要的长度,可以使用truncatechars或truncatewords等过滤器进行截断处理。如果我有一个文章ID,但不在文章详情页,如何调用这篇特定文章的标题和内容? 您可以使用
archiveDetail标签并传入id参数来指定文章ID,例如{% archiveDetail articleData with name="Title" id="文章ID" %}{{ articleData }}来获取标题,或者{% archiveDetail articleContent with name="Content" id="文章ID" %}{{ articleContent|safe }}来获取并显示内容。