在安企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)

  1. 为什么我在模板中直接输出 {{ archive.Content }},文章内容中的HTML标签没有被解析,而是原样显示了? 这是因为AnQiCMS模板引擎为了安全考虑,默认会对所有输出内容进行HTML实体转义。如果您确认内容是安全的HTML代码,需要使用 |safe 过滤器来指示模板引擎跳过转义,例如 {{ archive.Content|safe }}

  2. 如何在文章列表页只显示文章的简短摘要,而不是完整的文章内容? 在文章列表页,您可以使用 {{ item.Description }} 来显示文章的摘要。Description 字段通常由系统在发布文章时自动从文章内容中提取前N个字符或由编辑手动填写。如果需要自定义摘要的长度,可以使用 truncatecharstruncatewords 等过滤器进行截断处理。

  3. 如果我有一个文章ID,但不在文章详情页,如何调用这篇特定文章的标题和内容? 您可以使用 archiveDetail 标签并传入 id 参数来指定文章ID,例如 {% archiveDetail articleData with name="Title" id="文章ID" %}{{ articleData }} 来获取标题,或者 {% archiveDetail articleContent with name="Content" id="文章ID" %}{{ articleContent|safe }} 来获取并显示内容。