在AnQiCMS中管理和展示内容是其核心功能之一。当您需要向访问者呈现某一篇特定文章的详细内容时,了解如何在模板中准确获取并显示这些信息至关重要。AnQiCMS提供了一套直观且强大的模板标签系统,让您能够灵活地控制文章详情页的布局和内容。
AnQiCMS模板系统概览
AnQiCMS的模板使用类似Django模板引擎的语法。在模板文件中,您会遇到两种主要标记:
- 双花括号
{{ 变量 }}:用于输出变量的值。 - 单花括号和百分号
{% 标签 %}:用于控制逻辑流程(如条件判断、循环)或调用特定的功能标签。
通常,单篇文章的详情页模板文件会遵循一定的命名约定,比如存放在 {模型table}/detail.html 这样的路径下。例如,如果您的文章属于“文章模型”,那么详情页模板可能就是 article/detail.html。
获取单篇文章核心信息:archiveDetail标签
要获取并显示单篇文章的详细信息,AnQiCMS提供了专门的archiveDetail标签。这个标签是您构建文章详情页的基础。
archiveDetail的基本用法
当您在文章详情页的模板中使用archiveDetail标签时,它会默认获取当前页面的文章数据。您只需指定想要获取的字段名称即可。
例如,要显示文章标题,您可以这样写:
<h1>{% archiveDetail with name="Title" %}</h1>
这里,name="Title"告诉系统您想要获取文章的标题。类似地,您可以获取其他常用字段:
- 文章内容 (
Content):文章的主体内容,通常包含HTML格式。为了确保HTML内容正确渲染而不是被转义显示为纯文本,您需要使用|safe过滤器。如果文章内容在后台使用了Markdown编辑器,AnQiCMS也会自动将其渲染为HTML,但您也可以通过render=true参数强制渲染,或者render=false来取消渲染。<div>{% archiveDetail archiveContent with name="Content" %}{{ archiveContent|safe }}</div> - 文章描述 (
Description):通常是文章的摘要或简介。<p>{% archiveDetail with name="Description" %}</p> - 文章链接 (
Link):文章的访问地址。<a href="{% archiveDetail with name="Link" %}">查看原文</a> - 文章缩略图 (
Logo或Thumb):文章的封面图片或缩略图。<img src="{% archiveDetail with name="Logo" %}" alt="{% archiveDetail with name="Title" %}" /> - 发布时间 (
CreatedTime):AnQiCMS存储的是时间戳,您需要使用stampToDate函数将其格式化为可读的日期和时间。<span>发布日期:{{ stampToDate(archive.CreatedTime, "2006-01-02 15:04") }}</span> - 浏览量 (
Views):文章被访问的次数。<span>阅读量:{% archiveDetail with name="Views" %}</span> - 文章ID (
Id) 和所属分类ID (CategoryId):这些是文章的唯一标识符和分类标识符,常用于进一步获取关联信息。<span>文章ID:{% archiveDetail with name="Id" %}</span>
指定特定文章
如果您不在文章详情页,或者需要获取其他文章的详细信息,可以通过id或token参数来指定:
{# 获取ID为10的文章标题 #}
<h2>{% archiveDetail with name="Title" id="10" %}</h2>
{# 获取URL别名为"my-first-article"的文章内容 #}
<div>{% archiveDetail with name="Content" token="my-first-article" %}{{archiveContent|safe}}</div>
深入获取文章的关联信息
单篇文章往往不仅仅是其自身的内容,还与分类、标签、自定义属性等信息紧密相连。AnQiCMS的模板系统允许您轻松获取这些关联数据。
获取文章所属分类的详细信息
archiveDetail标签虽然能获取CategoryId,但它只提供ID。要获取分类的名称和链接等,我们需要结合categoryDetail标签。
{# 先获取当前文章的完整对象(通常在详情页中,直接用`archive`变量即可,或者通过archiveDetail获取) #}
{% archiveDetail currentArchive with name="Id" %} {# 确保有archive对象,或先获取 #}
<p>所属分类:<a href="{% categoryDetail with name='Link' id=archive.CategoryId %}">{% categoryDetail with name='Title' id=archive.CategoryId %}</a></p>
这里,id=archive.CategoryId会将当前文章的分类ID传递给categoryDetail标签,从而获取到该分类的名称和链接。
获取文章的标签列表
如果您的文章设置了多个标签,可以使用tagList标签来展示它们。
<div class="article-tags">
<strong>标签:</strong>
{% tagList tags with itemId=archive.Id %}
{% for tag in tags %}
<a href="{{ tag.Link }}">{{ tag.Title }}</a>
{% endfor %}
{% endtagList %}
</div>
itemId=archive.Id参数确保tagList获取的是当前文章相关的标签。
显示文章的自定义参数
AnQiCMS允许您为文章模型添加自定义字段。这些字段可以通过archiveParams标签获取,也可以直接通过archiveDetail标签指定name参数来获取。
{# 遍历显示所有自定义参数 #}
<div class="article-params">
{% archiveParams params %}
{% for item in params %}
<p>{{ item.Name }}:{{ item.Value }}</p>
{% endfor %}
{% endarchiveParams %}
</div>
{# 如果您知道自定义字段的名称,可以直接获取,例如一个名为“author”的字段 #}
<p>作者:{% archiveDetail with name="author" %}</p>
上一篇和下一篇文章
在文章详情页底部,通常会显示“上一篇”和“下一篇”文章的链接,方便用户浏览。
<div class="navigation-links">
{% prevArchive prev %}
{% if prev %}
<a href="{{ prev.Link }}">上一篇:{{ prev.Title }}</a>
{% else %}
<span>上一篇:没有了</span>
{% endif %}
{% endprevArchive %}
{% nextArchive next %}
{% if next %}
<a href="{{ next.Link }}">下一篇:{{ next.Title }}</a>
{% else %}
<span>下一篇:没有了</span>
{% endif %}
{% endnextArchive %}
</div>
获取页面的SEO信息
文章详情页的<head>区域需要设置合适的SEO标题、关键词和描述。tdk标签可以帮助您动态获取这些信息。
<head>
<title>{% tdk with name="Title" siteName=true %}</title>
<meta name="keywords" content="{% tdk with name="Keywords" %}">
<meta name="description" content="{% tdk with name="Description" %}">
</head>
siteName=true参数会在文章标题后自动追加网站名称,提高SEO友好度。
综合示例:构建一个基础的文章详情页
下面是一个将上述功能整合在一起的文章详情页模板示例,您可以根据自己的需求进行调整和美化:
”`twig {% extends ‘base.html’ %} {# 继承基础模板,通常包含头部、尾部等公共区域 #}
{% block head_meta %}
{# 动态设置页面SEO信息 #}
<title>{% tdk with name="Title" siteName=true %}</title>
<meta name="keywords" content="{% tdk with name="Keywords" %}">
<meta name="description" content="{% tdk with name="Description" %}">
{# 规范链接 #}
{% tdk canonical with name="CanonicalUrl" %}
{% if canonical %}<link rel="canonical" href="{{canonical}}" />{% endif %}
{% endblock %}
{% block main_content %} <