在使用安企CMS管理网站内容时,高效地展示文章或产品列表是提升用户体验和网站功能性的关键。安企CMS提供了灵活而强大的模板标签,让我们可以根据各种指定条件来精确控制内容的输出。无论是按分类显示最新文章,还是根据特定属性筛选产品,安企CMS都能帮助我们轻松实现。
灵活驾驭内容:文档列表标签 archiveList
安企CMS的核心内容展示能力主要通过 archiveList 标签实现。这个标签允许我们从数据库中提取文章、产品或其他类型的内容,并根据我们设定的条件进行筛选和排序。
要使用 archiveList 标签,基本结构是这样的:
{% archiveList archives with [参数列表] %}
{% for item in archives %}
<!-- 在这里显示每个文章或产品的详细信息 -->
<a href="{{ item.Link }}">{{ item.Title }}</a>
<!-- ...更多内容,如简介、图片等 -->
{% empty %}
<p>暂时没有符合条件的内容。</p>
{% endfor %}
{% endarchiveList %}
这里 archives 是我们为获取到的内容列表定义的变量名,你可以根据自己的喜好命名。item 则代表列表中的每一个单独的内容项。
让我们深入了解一下常用的参数,它们是控制列表显示的关键:
指定内容模型(
moduleId):这是最基本的条件。安企CMS支持文章、产品等多种内容模型。如果你想显示文章列表,通常会指定moduleId="1"(文章模型的ID);如果是产品列表,则可能是moduleId="2"。具体的ID可以在后台的“内容管理” -> “内容模型”中查看。例如:moduleId="1"。按分类筛选(
categoryId):我们常常需要显示某个特定分类下的内容。你可以通过categoryId参数指定一个或多个分类的ID(用逗号隔开),例如categoryId="1,5,8"。如果你想显示当前页面所属分类的内容,而不需要手动指定ID,安企CMS会智能地读取当前分类ID。如果你想获取所有内容,或者不希望它自动读取当前分类ID,可以明确设置为categoryId="0"。此外,excludeCategoryId参数则允许你排除某些分类的内容。控制显示数量与分页(
limit和type):limit参数用于控制单次显示的内容数量,例如limit="10"会显示最新的10条内容。它也支持偏移量模式,比如limit="2,10"表示从第2条内容开始,获取10条数据。type参数非常重要,它决定了列表的展示方式。设置为type="list"时,将只显示limit指定数量的内容;设置为type="page"时,内容列表将支持分页,这需要配合pagination标签一起使用;而type="related"则用于显示与当前文章相关的推荐内容,通常在文章详情页使用。
内容排序(
order):内容的显示顺序同样重要。你可以根据需要选择不同的排序方式,例如order="id desc"表示按ID降序(最新发布),order="views desc"表示按浏览量降序(最热门),order="sort desc"则是按后台自定义的排序值降序。推荐属性筛选(
flag):安企CMS允许为文章或产品设置多种推荐属性,如“头条”、“推荐”、“幻灯”等。你可以通过flag参数来筛选具有特定属性的内容,例如flag="c"仅显示被标记为“推荐”的内容。excludeFlag参数则用于排除具有特定属性的内容。包含子分类内容(
child):默认情况下,archiveList会包含子分类下的内容(child=true)。如果你只想显示当前分类直接管理的内容,而不包含其子分类的内容,可以设置为child=false。模糊搜索(
q):当type="page"时,你可以通过q参数进行关键词搜索,例如q="SEO优化"。如果URL中包含了q=关键词的查询参数,archiveList会自动读取并进行搜索。自定义字段筛选:这是安企CMS的强大之处。如果你在内容模型中自定义了字段,例如为“产品”模型添加了“颜色”或“尺寸”字段,并且在后台将这些字段设置为可筛选,那么你就可以通过URL的查询参数(例如
?color=红色&size=L)来动态筛选内容。
动态交互:文档参数筛选标签 archiveFilters
当我们需要构建一个允许用户自行选择条件来筛选内容(比如房屋类型、商品颜色、价格区间等)的页面时,archiveFilters 标签就派上用场了。它不会直接显示内容,而是生成一系列可点击的筛选链接,这些链接包含了动态变化的筛选参数。
archiveFilters 的基本用法是这样的:
{% archiveFilters filters with moduleId="[模型ID]" allText="[全部文本]" %}
{% for item in filters %}
<div class="filter-group">
<span>{{ item.Name }}:</span>
<ul>
{% for val in item.Items %}
<li class="{% if val.IsCurrent %}active{% endif %}">
<a href="{{ val.Link }}">{{ val.Label }}</a>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
{% endarchiveFilters %}
moduleId:指定你希望为其生成筛选条件的内容模型。allText:设置“全部”或“不限”选项的显示文本,如果设置为false则不显示。
这个标签会生成一个 filters 变量,其中包含了每个可筛选字段(item.Name)及其所有可选值(item.Items)。每个可选值都有一个 Label(显示文本)、Link(点击后带筛选参数的URL)和 IsCurrent(判断当前是否选中)。用户点击这些链接后,页面会刷新,archiveList 标签就能根据URL中的新参数显示筛选后的内容。
分页控制:pagination 标签
当 archiveList 的 type 参数设置为 page 时,就需要配合 pagination 标签来生成分页导航了。
{% pagination pages with show="5" %}
<ul class="pagination-list">
{% if pages.PrevPage %}<li class="prev"><a href="{{ pages.PrevPage.Link }}">上一页</a></li>{% endif %}
{% for item in pages.Pages %}<li class="{% if item.IsCurrent %}active{% endif %}"><a href="{{ item.Link }}">{{ item.Name }}</a></li>{% endfor %}
{% if pages.NextPage %}<li class="next"><a href="{{ pages.NextPage.Link }}">下一页</a></li>{% endif %}
</ul>
{% endpagination %}
show 参数可以控制分页导航中显示页码的数量。
实际应用:构建一个产品列表页
假设我们需要一个产品列表页,可以显示所有产品,并允许用户按“颜色”和“材质”进行筛选,同时支持分页和按最新发布排序。
在后台配置内容模型和筛选字段:
- 确保有一个“产品”内容模型(
moduleId假设为2)。 - 在产品模型中添加自定义字段,例如
color(颜色,类型为单项选择,可选值:红, 蓝, 绿) 和material(材质,类型为单项选择,可选值:金属, 塑料, 木材),并勾选“可筛选”选项。
- 确保有一个“产品”内容模型(
在模板文件中(例如
product/list.html)编写代码:{% extends "base.html" %} {% block content %} <div class="product-filters"> <h3>筛选产品</h3> {% archiveFilters filters with moduleId="2" allText="不限" %} {% for item in filters %} <div class="filter-group"> <span class="filter-name">{{ item.Name }}:</span> <ul class="filter-options"> {% for val in item.Items %} <li class="{% if val.IsCurrent %}active{% endif %}"> <a href="{{ val.Link }}">{{ val.Label }}</a> </li> {% endfor %} </ul> </div> {% endfor %} {% endarchiveFilters %} </div> <div class="product-list-container"> <h2>产品列表</h2> {% archiveList products with moduleId="2" type="page" order="id desc" limit="12" %} {% for item in products %} <div class="product-item"> <a href="{{ item.Link }}"> <img src="{{ item.Thumb }}" alt="{{ item.Title }}"> <h3>{{ item.Title }}</h3> <p>{{ item.Description }}</p> </a> </div> {% empty %} <p>没有找到符合条件的产品。</p> {% endfor %} {% endarchiveList %} <div class="pagination-area"> {% pagination pages with show="5" %} <ul class="pagination-list"> {% if pages.PrevPage %}<li class="prev"><a href="{{ pages.PrevPage.Link }}">上一页</a></li>{% endif %} {% for item in pages.Pages %}<li class="{% if item.IsCurrent %}active{% endif %}"><a href="{{ item.Link }}">{{ item.Name }}</a></li>{% endfor %} {% if pages.NextPage %}<li class="next"><a href="{{ pages.NextPage.Link }}">下一页</a></li>{% endif %} </ul> {% endpagination %} </div> </div> {% endblock %}
通过这样的设置,用户不仅能看到产品的基本列表,还可以根据页面的筛选条件动态地查看不同属性的产品,大大提升了网站的互动性和信息检索效率。安企CMS的模板标签体系灵活且易于理解,稍加实践就能创建出功能丰富的列表页面。
常见问题解答 (FAQ)
问:如何在同一个页面上显示多种不同条件(例如,最新文章、热门产品、推荐活动)的列表? 答: 您可以在页面中使用多个
archiveList标签,每个标签设置不同的参数条件。例如,一个archiveList用于获取moduleId="1"且order="id desc"的文章列表,另一个archiveList用于获取moduleId="2"且flag="c"的产品列表。只要为每个archiveList标签指定不同的变量名(如articles,products,activities),它们就可以互不干扰地同时显示在同一个页面上。问:我设置了
archiveList的条件,但页面上没有显示任何内容,可能是什么原因? 答: 首先,请检查moduleId