如何设置安企CMS的文章或产品列表按指定条件

在使用安企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 参数则允许你排除某些分类的内容。

  • 控制显示数量与分页(limittype

    • 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 标签

archiveListtype 参数设置为 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 参数可以控制分页导航中显示页码的数量。

实际应用:构建一个产品列表页

假设我们需要一个产品列表页,可以显示所有产品,并允许用户按“颜色”和“材质”进行筛选,同时支持分页和按最新发布排序。

  1. 在后台配置内容模型和筛选字段

    • 确保有一个“产品”内容模型(moduleId 假设为 2)。
    • 在产品模型中添加自定义字段,例如 color (颜色,类型为单项选择,可选值:红, 蓝, 绿) 和 material (材质,类型为单项选择,可选值:金属, 塑料, 木材),并勾选“可筛选”选项。
  2. 在模板文件中(例如 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)

  1. 问:如何在同一个页面上显示多种不同条件(例如,最新文章、热门产品、推荐活动)的列表? 答: 您可以在页面中使用多个 archiveList 标签,每个标签设置不同的参数条件。例如,一个 archiveList 用于获取 moduleId="1"order="id desc" 的文章列表,另一个 archiveList 用于获取 moduleId="2"flag="c" 的产品列表。只要为每个 archiveList 标签指定不同的变量名(如 articles, products, activities),它们就可以互不干扰地同时显示在同一个页面上。

  2. 问:我设置了 archiveList 的条件,但页面上没有显示任何内容,可能是什么原因? 答: 首先,请检查 moduleId