如何根据特定分类ID在AnQiCMS网站上展示文档列表?

在AnQiCMS中,根据特定分类ID来展示文档列表是一项非常基础且常用的功能,它允许我们灵活地组织和呈现网站内容。AnQiCMS强大的模板标签系统让这项操作变得直观而高效。无论您希望在页面的特定位置手动插入某个分类的文档,还是想让整个分类页面自动展示其下的文档,系统都提供了相应的解决方案。

灵活运用archiveList标签展示文档

AnQiCMS的核心优势之一就是其丰富的模板标签。要根据分类ID来展示文档列表,我们主要会用到archiveList这个标签。这个标签允许您高度定制需要展示的文档类型、数量、排序方式,以及最重要的——来自哪个分类。

基础用法:指定分类ID

在您的AnQiCMS模板文件中,比如在首页或者某个侧边栏,您可以通过archiveList标签来指定需要展示的分类ID。例如,如果您有一个ID为10的“新闻动态”分类,并想在页面中列出该分类下的文档,可以这样编写模板代码:

{% archiveList newsArchives with categoryId="10" limit="5" %}
    {% for item in newsArchives %}
    <li>
        <a href="{{ item.Link }}">{{ item.Title }}</a>
        <span>发布日期: {{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
    </li>
    {% empty %}
    <li>暂无新闻动态。</li>
    {% endfor %}
{% endarchiveList %}

在这段代码中,categoryId="10"明确告诉AnQiCMS只获取ID为10的分类下的文档。limit="5"则限制了只显示最新的5篇文章。newsArchives是我们为获取到的文档列表指定的变量名,您可以在随后的for循环中遍历这个变量,通过item.Link获取文档链接,item.Title获取文档标题,item.CreatedTime获取发布时间(并使用stampToDate过滤器进行格式化)。{% empty %}标签则用于在列表为空时显示备用内容。

拓展用法:指定文档模型与更多信息

除了分类ID,您还可以进一步细化筛选条件。例如,如果您想展示特定分类下“产品模型”的文档,就需要加上moduleId参数。同时,您可以轻松地展示更多文档信息,如缩略图、简介和浏览量:

{% archiveList productItems with categoryId="15" moduleId="2" limit="8" order="views desc" %}
    {% for item in productItems %}
    <div class="product-card">
        <a href="{{ item.Link }}">
            {% if item.Thumb %}<img src="{{ item.Thumb }}" alt="{{ item.Title }}" />{% endif %}
            <h3>{{ item.Title }}</h3>
            <p>{{ item.Description|truncatechars:100 }}</p> {# 截取简介前100字 #}
            <span>浏览量: {{ item.Views }}</span>
        </a>
    </div>
    {% endfor %}
{% endarchiveList %}

这里,categoryId="15"指定分类,moduleId="2"表示获取产品模型的文档,order="views desc"则将产品按浏览量从高到低排序。item.Thumb用于显示缩略图,item.Description展示文档简介,并使用truncatechars过滤器进行截断。

处理分页列表

当一个分类下的文档数量较多时,分页显示是必不可少的。要实现分页,您需要将archiveList标签的type参数设置为"page",并结合pagination标签:

{% archiveList documents with categoryId="20" type="page" limit="10" %}
    {% for item in documents %}
    {# 展示文档详情,如标题、链接、简介等 #}
    <article>
        <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
        <p>{{ item.Description }}</p>
    </article>
    {% endfor %}
{% endarchiveList %}

{# 分页控制区域 #}
<div class="pagination-controls">
    {% pagination pages with show="5" %} {# 最多显示5个页码按钮 #}
        {% if pages.PrevPage %}<a href="{{ pages.PrevPage.Link }}">上一页</a>{% endif %}
        {% for pageItem in pages.Pages %}
            <a class="{% if pageItem.IsCurrent %}active{% endif %}" href="{{ pageItem.Link }}">{{ pageItem.Name }}</a>
        {% endfor %}
        {% if pages.NextPage %}<a href="{{ pages.NextPage.Link }}">下一页</a>{% endif %}
    {% endpagination %}
</div>

通过type="page"archiveList会返回当前页的文档和分页信息。pagination标签则负责渲染“上一页”、“下一页”以及具体的页码按钮。pages.Pages是一个数组,包含了所有可用的页码信息,可以在循环中显示出来。

利用分类模板机制实现自动化展示

AnQiCMS还提供了一种更加自动化的方式来处理分类文档列表的显示,这对于维护大量分类的网站来说尤其方便:分类模板机制

当您访问一个分类页面时,AnQiCMS会根据一定的规则自动查找并应用对应的模板文件。其中一种规则就是根据分类ID和内容模型来匹配。

自动匹配模板: 您可以在模板目录中创建形如{模型table}/list-{分类ID}.html的模板文件。例如,如果您的文章模型表格名为article,分类ID为10,那么您可以创建一个名为article/list-10.html的模板文件。当访问ID为10的文章分类页面时,AnQiCMS会自动加载并使用这个模板文件。

后台指定模板: 您也可以在AnQiCMS后台对每个分类进行编辑,在“分类模板”选项中手动指定一个模板文件。例如,您可以为某个分类指定使用custom/my-category-list.html作为其文档列表模板。这种方式让您能够为不同的分类设计完全独立的布局和样式,而无需在每个模板中重复编写archiveList标签的categoryId参数。在这些自定义的分类模板中,archiveList标签通常无需再指定categoryId,因为它会自动识别当前分类ID。

示例:article/list-10.html模板内容

假设您已经创建了article/list-10.html这个模板文件,其内容可以这样编写:

<h1>{{ categoryDetail with name="Title" }}</h1> {# 显示当前分类标题 #}
<p>{{ categoryDetail with name="Description" }}</p> {# 显示当前分类描述 #}

<div class="document-list">
    {% archiveList categoryDocuments with type="page" limit="10" %} {# 自动获取当前分类ID下的文档 #}
        {% for item in categoryDocuments %}
        <article>
            <h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
            <time datetime="{{ stampToDate(item.CreatedTime, "2006-01-02T15:04:05Z07:00") }}">{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</time>
            <p>{{ item.Description|truncatechars:150 }}</p>
        </article>
        {% endfor %}
    {% endarchiveList %}

    <div class="pagination-area">
        {% pagination pages with show="5" %}
            {# 分页代码同上 #}
        {% endpagination %}
    </div>
</div>

在这个list-10.html模板中,archiveList标签没有显式地写categoryId="10",它会智能地识别出当前页面所属的分类ID,从而自动展示该分类下的文档。这种方式极大地提高了模板的可维护性和复用性。

总而言之,无论是通过在任意模板中精确指定categoryId,还是利用AnQiCMS智能的分类模板机制,展示特定分类ID下的文档列表都变得简单高效。了解并熟练运用这些方法,将帮助您更好地管理和呈现您的网站内容。


常见问题 (FAQ)

1. 为什么我的文档列表没有显示分页? 如果您的文档列表没有显示分页,请检查archiveList标签中是否设置了type="page"参数。只有将type设置为"page"archiveList标签才会生成分页所需的数据。同时,您还需要在archiveList标签