如何在内容管理中筛选并显示特定标题或分类的文档列表?

在内容管理日益成为企业网站核心竞争力的今天,安企CMS(AnQiCMS)以其灵活高效的特性,帮助我们轻松驾驭海量内容。当您需要精准地筛选并展示特定标题、分类或具备特定属性的文档列表时,AnQiCMS 提供了直观且强大的模板标签,让这一过程变得简单而高效。

核心利器:archiveList 标签总览

要在网站前端显示文档列表,我们主要会用到 AnQiCMS 的核心模板标签 archiveList。这个标签功能强大,能够根据多种条件过滤内容,并以列表或分页的形式展示出来。它支持多种参数,让您可以精细控制内容的呈现。

通常,您会看到这样的基本结构来调用文档列表:

{% archiveList archives with type="list" limit="10" %}
    {% for item in archives %}
        {# 在这里展示每个文档的详细信息 #}
    {% empty %}
        <p>该列表没有任何内容。</p>
    {% endfor %}
{% endarchiveList %}

在这段代码中,archives 是我们为文档列表指定的一个变量名,您可以根据自己的喜好来命名。for 循环则会遍历这个列表中的每一个文档(我们称之为 item),并在循环体内展示其内容。如果列表为空,empty 标签里的内容就会显示出来。

依据分类与内容模型筛选

安企CMS 灵活的内容模型设计,允许我们为不同类型的内容(如文章、产品、活动等)创建独立的模型,并为每个模型建立分类体系。当您需要筛选特定分类下的文档时,archiveList 标签的 categoryIdmoduleId 参数就显得尤为重要。

  • 按内容模型筛选 (moduleId):如果您想只显示“文章模型”下的所有文档,而忽略“产品模型”的内容,可以设置 moduleId="1"(假设文章模型的ID为1)。这对于跨模型展示内容时进行区分非常有用。

  • 按分类筛选 (categoryId):当您需要展示某个具体分类下的文档时,只需提供该分类的 ID。例如,categoryId="10" 将显示 ID 为 10 的分类下的所有文档。如果您想同时展示多个分类的内容,可以传入多个 ID,用逗号隔开,例如 categoryId="10,12,15"

  • 排除特定分类 (excludeCategoryId):反之,如果您想显示某个模型下除特定分类之外的所有文档,可以使用 excludeCategoryId="10" 来排除 ID 为 10 的分类。

  • 包含子分类 (child):默认情况下,当您指定一个分类 ID 时,archiveList 会自动包含其所有子分类下的文档。如果您只想显示当前指定分类本身的文档,而不包含其子分类,可以将 child 参数设置为 false,即 child=false

依据文档属性进行内容筛选

除了分类,AnQiCMS 还允许您给文档设置各种“推荐属性”(Flag),这些属性就像给文档打上特殊标签,比如“头条”、“推荐”、“幻灯”等。利用 flag 参数,您可以轻松筛选出具有特定属性的文档:

  • 指定推荐属性 (flag):例如,要筛选出所有被标记为“头条”的文档,可以使用 flag="h"。文档支持的属性值包括:h (头条)、c (推荐)、f (幻灯)、a (特荐)、s (滚动)、p (图片)、j (跳转)。您可以根据需求灵活组合。

  • 排除推荐属性 (excludeFlag):如果您不希望在列表中显示某些特定属性的文档,可以使用 excludeFlag 参数,例如 excludeFlag="s" 将排除所有被标记为“滚动”的文档。

  • 指定作者或上级文档 (userId, parentId):对于多作者网站或具有层级关系的文档(如下属文档),您还可以通过 userIdparentId 参数来筛选特定作者发布的文档,或特定上级文档的下级内容。

实现关键词搜索与高级动态筛选

在许多场景下,访问者需要通过输入关键词来查找内容,或者根据多个自定义条件进行筛选。

  • 关键词搜索 (q):当您需要创建一个搜索结果页面时,archiveList 标签的 q 参数非常实用。通常,我们会将列表类型 type 设置为 page,这样用户在搜索框中输入的关键词(通过 URL 中的 q 参数传递)就会自动被 archiveList 捕获并用于搜索。例如,一个搜索表单提交后,URL 可能是 /search?q=安企CMS,您的模板中的 archiveList 就会自动根据“安企CMS”进行筛选。

  • 高级动态筛选 (archiveFilters):想象一下房产网站,用户可能需要同时根据“房屋类型”、“面积”、“价格区间”等多个条件来筛选房源。这时,archiveFilters 标签就能派上用场。它会根据您在后台为内容模型配置的自定义字段,自动生成一系列筛选条件及其对应的链接。您只需将 archiveFilters 标签与 archiveList 标签(设置为 type="page")结合使用,即可为用户提供强大的动态筛选体验。

    在模板中,您可以这样使用 archiveFilters

    {% archiveFilters filters with moduleId="1" allText="不限" %}
        {% for item in filters %}
        <ul>
            <li>{{ item.Name }}: </li>
            {% for val in item.Items %}
            <li class="{% if val.IsCurrent %}active{% endif %}"><a href="{{ val.Link }}">{{ val.Label }}</a></li>
            {% endfor %}
        </ul>
        {% endfor %}
    {% endarchiveFilters %}
    

    这段代码会循环显示所有可筛选的参数(如“房屋类型”),以及每个参数下的具体选项(如“住宅”、“商铺”)。当用户点击某个选项时,页面 URL 会自动带上相应的筛选参数,并由 archiveList 标签捕获并应用。

内容展示与分页控制

筛选出合适的文档后,如何美观地展示它们,并提供友好的分页体验,同样重要。

  • 遍历与显示内容详情:在 archiveListfor 循环中,item 变量代表了当前正在处理的文档。您可以通过 item.Title 获取文档标题,item.Link 获取文档链接,item.Description 获取文档简介,item.Thumb 获取文档缩略图等。对于时间,可以使用 {{ stampToDate(item.CreatedTime, "2006-01-02") }} 来格式化显示。如果文档简介或内容包含 HTML 标签,记得加上 |safe 过滤器以避免转义。

    例如: “`twig {% for item in archives %}

    <h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
    {% if item.Thumb %}
        <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
    {% endif %}
    <p>{{ item.Description|safe }}</p>
    <footer>
        <span>发布日期:{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</span>
        <span>浏览量:{{ item.Views }}</span>
        {% if item.CategoryId %}
            <span>分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
        {% endif %}
    </footer>