AnQiCMS的模板标签如何实现文档列表、分类列表和单页详情的灵活调用?

作为一名深谙AnQiCMS运作的网站运营人员,我深知内容是网站的基石,而灵活高效的内容调用是提升用户体验、优化运营效率的关键。AnQiCMS强大的模板标签体系,正是我们实现这一目标的核心工具。它允许我们精准地控制文档列表、分类列表以及单页详情的展示方式,从而构建出既美观又具功能性的网站页面。

AnQiCMS 模板标签基础与内容调用概述

AnQiCMS采用类似Django模板引擎的语法,以直观易懂的方式定义模板标签和变量。变量通常以双花括号 {{变量}} 形式出现,而控制结构如条件判断和循环则使用单花括号和百分号 {% 标签 %} 进行定义,并需以相应的结束标签闭合。所有模板文件统一采用UTF-8编码,确保内容正确显示。值得注意的是,AnQiCMS在v2.1.1版本后,模板标签进行了重构,移除了原有的articleproduct标签,统一并入了更通用的archive标签系列,这使得内容模型的调用更加一致和灵活。

在AnQiCMS中,内容调用不仅仅局限于全局配置,我们还可以通过在后台为特定的文档、分类或单页指定独立的模板文件来实现高度定制化。例如,为某个ID为10的文档创建{模型table}/10.html的模板,或者为特定分类创建{模型table}/list-5.html的列表模板,以及为“关于我们”单页创建page/about.html的模板。这种细粒度的模板定义能力,为我们针对不同内容或页面的需求提供独特的展示提供了极大的便利。

灵活调用文档列表 (Archive List)

要实现网站上各种文档(如文章、产品、新闻等)的列表展示,archiveList标签是我们最常用的工具。这个标签功能丰富,能够根据多种条件筛选、排序和限制文档的显示数量,无论是构建简单的最新文章列表,还是复杂的带分页和关联内容的列表,都能轻松应对。

在使用archiveList时,我们可以通过moduleId参数指定要调用的内容模型,例如moduleId="1"表示文章模型。categoryId参数则允许我们获取特定分类下的文档,甚至可以传入逗号分隔的多个分类ID。为了实现更精细的控制,order参数可以定义排序规则(如按ID降序id desc或浏览量降序views desc),limit参数控制显示数量,并支持offset模式(如limit="2,10"表示从第2条开始取10条)。

archiveListtype参数是其灵活性的重要体现,它决定了列表的展现形式。type="list"适用于简单的固定数量列表;type="page"则用于需要分页的场景,配合pagination标签可以构建完整的翻页功能;而type="related"则能智能地获取与当前文档相关的文档,无论是基于关键词还是后台手动设置的关联。此外,我们还可以利用flag参数筛选具有特定推荐属性(如头条、推荐、幻灯等)的文档,或者使用q参数实现关键词搜索。对于结合自定义字段进行的筛选,archiveFilters标签提供了构建复杂筛选条件的便利,使得用户可以根据文章参数进行多维度的内容过滤。

{# 示例:获取文章模型下ID为1的分类中的最新10篇文档 #}
{% archiveList archives with moduleId="1" categoryId="1" order="id desc" limit="10" %}
    {% for item in archives %}
        <a href="{{item.Link}}">{{item.Title}} - {{stampToDate(item.CreatedTime, "2006-01-02")}}</a>
    {% endfor %}
{% endarchiveList %}

{# 示例:带有分页功能的文章列表 #}
{% archiveList articles with type="page" moduleId="1" limit="10" %}
    {% for item in articles %}
        <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
        <p>{{item.Description}}</p>
    {% endfor %}
    {% pagination pages with show="5" %}
        {# 分页链接的渲染 #}
    {% endpagination %}
{% endarchiveList %}

灵活调用分类列表 (Category List)

网站的分类导航是用户浏览内容的重要入口。categoryList标签为我们提供了极其灵活的方式来构建和展示分类结构。我们可以根据moduleId获取特定内容模型(如文章或产品)的分类,通过parentId参数指定获取顶级分类(parentId="0"),或者获取某个父分类下的子分类。甚至,当我们需要在文档详情页显示当前文档所属分类的兄弟分类时,可以设置parentId="parent"

categoryList标签返回的item对象包含了分类的ID、标题、链接、描述、缩略图等丰富信息,以及一个HasChildren布尔值,方便我们判断当前分类是否有下级子分类,从而实现多级分类的嵌套展示。这对于构建复杂的网站导航、侧边栏分类树或产品分类导航至关重要。我们可以将categoryListarchiveList结合使用,在循环显示分类的同时,列出每个分类下的部分文档,形成丰富的内容聚合页面。

{# 示例:显示文章模型的顶级分类 #}
{% categoryList topCategories with moduleId="1" parentId="0" %}
    {% for category in topCategories %}
        <a href="{{category.Link}}">{{category.Title}}</a>
        {# 如果有子分类,可以嵌套调用 #}
        {% if category.HasChildren %}
            {% categoryList subCategories with parentId=category.Id %}
                {% for subCategory in subCategories %}
                    <a href="{{subCategory.Link}}">{{subCategory.Title}}</a>
                {% endfor %}
            {% endcategoryList %}
        {% endif %}
    {% endfor %}
{% endcategoryList %}

{# 示例:同时显示分类和其下的文档 #}
{% categoryList categories with moduleId="2" parentId="0" %}
    {% for cat in categories %}
        <h2>{{cat.Title}}</h2>
        {% archiveList products with categoryId=cat.Id limit="4" %}
            {% for product in products %}
                <p><a href="{{product.Link}}">{{product.Title}}</a></p>
            {% endfor %}
        {% endarchiveList %}
    {% endfor %}
{% endcategoryList %}

灵活调用单页详情 (Page Detail)

对于“关于我们”、“联系我们”、“服务条款”等固定内容页面,AnQiCMS提供了单页功能。pageDetail标签是用来获取这些单页的具体内容的。通过指定单页的idtoken(URL别名),我们可以精确地调用到任何一个单页的详情数据。

pageDetail返回的单页对象包含了页面的标题、链接、描述、内容、缩略图以及轮播图Images等字段。这使得我们不仅可以展示纯文本内容,还能灵活地嵌入图片、轮播图等媒体元素。对于需要特殊布局的单页,我们可以通过在后台为该单页指定独立的模板文件,实现完全自定义的页面设计,例如为“联系我们”页面设计一个带有地图和表单的独特布局。

{# 示例:获取ID为1的单页内容,通常用于“关于我们”页面 #}
{% pageDetail aboutPage with id="1" %}
    <h1>{{aboutPage.Title}}</h1>
    <div>{{aboutPage.Content|safe}}</div>
    {% if aboutPage.Images %}
        {% for img in aboutPage.Images %}
            <img src="{{img}}" alt="{{aboutPage.Title}} Banner">
        {% endfor %}
    {% endif %}
{% endpageDetail %}

灵活调用文档详情 (Archive Detail)

当用户点击进入一篇具体的文章或产品页面时,archiveDetail标签负责展示该文档的所有详细信息。这个标签通常会在文档详情页自动获取当前页面的文档数据,但也可以通过idtoken参数指定获取其他文档的详情。

archiveDetail标签能够获取文档的ID、标题、SEO信息、链接、关键词、描述、内容(支持Markdown转HTML和图片懒加载)、浏览量、分类信息、封面图、创建/更新时间以及所有自定义模型字段。对于内容字段,它甚至能返回内容的标题结构ContentTitles,方便生成目录。网站运营人员可以通过这些丰富的字段,设计出个性化的文档详情页,例如为产品详情页展示多图轮播、参数表格和详细描述,而为博客文章展示作者信息、发布日期和相关推荐。特别是自定义字段的调用,极大地增强了不同内容模型的灵活性,如产品模型可有“价格”、“库存”等字段,文章模型可有“作者”、“来源”等字段,这些都可以通过archiveDetail with name="字段名"来单独获取或循环展示。

{# 示例:在文档详情页显示文章标题、内容、分类和发布时间 #}
<h1>{% archiveDetail with name="Title" %}</h1>
<p>分类:<a href="{% categoryDetail with name="Link" id=archive.CategoryId %}">{% categoryDetail with name="Title" id=archive.CategoryId %}</a></p>
<p>发布时间:{{stampToDate(archive.CreatedTime, "2006-01-02")}}</p>
<div>
    {% archiveDetail articleContent with name="Content" render=true lazy="data-src" %}
    {{articleContent|safe}}
</div>

{# 示例:获取自定义字段,如产品价格 #}
<p>产品价格:{% archiveDetail with name="price" %}元</p>

模板制作约定与高级用法概览

AnQiCMS不仅提供强大的标签,还通过一套清晰的模板制作约定,如/template目录结构、config.json配置文件以及bash.html等公共代码文件,来规范和简化模板开发。这些约定支持自适应、代码适配和PC+手机独立站点等多种模式,确保模板的高兼容性。除了上述内容标签,AnQiCMS还内置了if条件判断、for循环遍历、include模板引用、extends模板继承等通用标签,以及stampToDate时间格式化、pagination分页等辅助标签,共同构成了灵活强大的模板系统。掌握这些,能帮助我们构建出既符合业务需求,又具备良好用户体验和SEO表现的网站。

AnQiCMS的模板标签体系,赋予了网站运营人员高度的自由度和创造力。通过对文档列表、分类列表和单页详情的灵活调用,我们能够轻松实现多样化的内容展示需求,无论是打造内容丰富的资讯门户,还是构建功能完善的产品展示平台,AnQiCMS都提供了坚实的技术支撑。


常见问题解答 (FAQ)

**1. 如何为特定的文档或分类指定