如何在AnQiCMS中获取并显示单篇文章的详细信息?

在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>
    
  • 文章缩略图 (LogoThumb):文章的封面图片或缩略图。
    
    <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>
    

指定特定文章

如果您不在文章详情页,或者需要获取其他文章的详细信息,可以通过idtoken参数来指定:

{# 获取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 %} <