在内容管理日益成为企业网站核心竞争力的今天,安企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 标签的 categoryId 和 moduleId 参数就显得尤为重要。
按内容模型筛选 (
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):对于多作者网站或具有层级关系的文档(如下属文档),您还可以通过userId或parentId参数来筛选特定作者发布的文档,或特定上级文档的下级内容。
实现关键词搜索与高级动态筛选
在许多场景下,访问者需要通过输入关键词来查找内容,或者根据多个自定义条件进行筛选。
关键词搜索 (
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标签捕获并应用。
内容展示与分页控制
筛选出合适的文档后,如何美观地展示它们,并提供友好的分页体验,同样重要。
遍历与显示内容详情:在
archiveList的for循环中,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>