在安企CMS中管理网站内容时,我们经常需要灵活地控制文章列表的展示,例如,在某个页面上只显示特定分类下的文章。这不仅有助于网站内容的精准组织,也能极大地提升访客的浏览体验,帮助他们更快找到感兴趣的信息。安企CMS提供了强大的模板标签功能,让这一需求变得简单而直观。

实现这一目标的核心在于安企CMS的 archiveList 模板标签。这个标签是用来从数据库中获取文章列表的“万能钥匙”,通过为其配置不同的参数,我们可以精确地筛选出所需的内容。

了解 archiveList 的关键参数

archiveList 标签中,有两个至关重要的参数用于筛选特定分类的文章:

  • moduleId:这个参数用于指定您要获取文章的内容模型。在安企CMS中,文章、产品等都属于不同的内容模型。通常,“文章模型”的ID是1,“产品模型”的ID是2,您可以在后台的“内容管理”->“内容模型”中查看或自定义。确保指定正确的 moduleId 是获取正确文章列表的第一步。
  • categoryId:这是直接指定文章所属分类的关键参数。通过提供一个或多个分类的ID,您可以让 archiveList 标签只返回这些分类下的文章。

如何获取分类ID?

在运用 categoryId 参数之前,您需要知道目标分类的ID。获取分类ID有几种常用方法:

  1. 从后台管理界面获取: 最直接的方式是登录安企CMS后台,进入“内容管理”->“文档分类”。在这里,每个分类都会清晰地列出其对应的ID。
  2. 通过模板标签动态获取: 如果您正在一个分类详情页或其子页面上,并且希望显示当前分类的文章,您可以使用 categoryDetail 标签来获取当前分类的ID,然后将其传递给 archiveList。例如,{% categoryDetail with name="Id" %} 可以直接输出当前分类的ID。

实战场景:精准控制文章列表

掌握了 moduleIdcategoryId 参数以及如何获取分类ID后,我们就可以应对各种文章列表的展示需求了。

首先,假设您希望在网站的某个区块中,只展示“公司新闻”这个特定分类下的最新文章。您需要先在后台找到“公司新闻”分类的ID(例如,假设其ID为10),并且文章模型ID通常为1。那么,您可以在模板中这样使用 archiveList 标签:

{% archiveList newsArticles with moduleId="1" categoryId="10" limit="5" %}
    {% for article in newsArticles %}
        <div class="news-item">
            <h4><a href="{{ article.Link }}">{{ article.Title }}</a></h4>
            <p>{{ article.Description }}</p>
            <span>发布日期:{{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
        </div>
    {% else %}
        <p>暂无公司新闻。</p>
    {% endfor %}
{% endarchiveList %}

这段代码会获取文章模型(moduleId="1")下,ID为10的分类(categoryId="10")中的最新5篇文章。

其次,如果您需要在一个列表中同时展示来自多个特定分类的文章,比如“公司新闻”(ID: 10)和“行业动态”(ID: 12)的文章,您只需在 categoryId 参数中用逗号将这些分类ID分隔开即可:

{% archiveList mixedArticles with moduleId="1" categoryId="10,12" limit="10" order="CreatedTime desc" %}
    {% for article in mixedArticles %}
        <div class="article-card">
            <h5><a href="{{ article.Link }}">{{ article.Title }}</a></h5>
            <small>分类: {% categoryDetail with name="Title" id=article.CategoryId %}</small>
            <span> | 日期: {{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
        </div>
    {% else %}
        <p>暂无相关文章。</p>
    {% endfor %}
{% endarchiveList %}

这里,order="CreatedTime desc" 参数用于按发布时间倒序排列文章,确保显示最新内容。

再者,很多时候我们会构建一种按分类分组展示内容的页面布局,例如,页面上显示几个分类的标题,每个标题下再列出该分类的几篇文章。这可以通过结合 categoryListarchiveList 标签来实现:

{% categoryList mainCategories with moduleId="1" parentId="0" %} {# 获取文章模型下的所有顶级分类 #}
    {% for category in mainCategories %}
        <section class="category-block">
            <h2><a href="{{ category.Link }}">{{ category.Title }}</a></h2>
            <ul class="article-list">
                {% archiveList articlesInCategory with moduleId="1" categoryId=category.Id limit="3" %} {# 显示当前分类下的3篇文章 #}
                    {% for article in articlesInCategory %}
                        <li><a href="{{ article.Link }}">{{ article.Title }}</a></li>
                    {% endfor %}
                {% else %}
                    <li>该分类暂无文章。</li>
                {% endarchiveList %}
            </ul>
        </section>
    {% endfor %}
{% endcategoryList %}

在这个例子中,categoryList 遍历了所有的顶级文章分类,然后对于每一个分类,嵌套的 archiveList 使用 category.Id 参数,动态地获取并显示该分类下的文章。

最后,如果您希望显示某个内容模型下的所有文章,但需要排除一个或几个特定的分类,比如不显示“内部公告”(ID: 15)这类分类的文章,安企CMS也提供了 excludeCategoryId 参数来满足这种需求:

{% archiveList allButInternal with moduleId="1" excludeCategoryId="15" limit="10" %}
    {% for article in allButInternal %}
        <div class="general-article-item">
            <h3><a href="{{ article.Link }}">{{ article.Title }}</a></h3>
            <span>分类:{% categoryDetail with name="Title" id=article.CategoryId %}</span>
        </div>
    {% else %}
        <p>暂无文章可显示。</p>
    {% endfor %}
{% endarchiveList %}

这行代码会获取除ID为15的分类之外的所有文章模型内容。

小贴士与注意事项

在实际操作中,请确保您的模板文件符合安企CMS的模板命名和目录结构约定,例如,分类列表通常会使用 {模型table}/list.html 这样的命名格式。同时,archiveList 标签还有 limit(限制文章数量)、order(排序方式,如按发布时间、浏览量等)以及 type(列表类型,如 list 用于简单列表,page 用于分页列表)等更多参数,可以帮助您进一步细化文章列表的展示逻辑。合理利用这些参数,能让您的网站内容展示更具条理性和专业性。

通过这些灵活的标签组合和参数配置,安企CMS让您能够轻松驾驭网站的文章内容,无论是创建专题页面、展示推荐内容,还是构建复杂的分类导航,都能得心应手。


常见问题 (FAQ)

  1. 如何确定文章模型的 moduleId 是多少? 通常情况下,安企CMS内置的“文章模型”的ID是1,“产品模型”的ID是2。您可以通过登录后台管理界面,进入“内容管理”->“内容模型”,在那里可以清晰地看到每个内容模型及其对应的ID。如果您自定义了新的内容模型,其ID也会在此处显示。

  2. 如果我希望在文章列表中显示当前分类及其所有子分类的文章,需要额外设置吗? 不需要额外设置。archiveList 标签在默认情况下就支持获取指定分类及其所有子分类的文章。也就是说,当您为 categoryId 参数传入一个分类ID时,它会自动包含该分类下的所有子分类中的文章。只有当您明确不希望包含子分类文章时,才需要使用 child="false" 参数。

  3. 为什么我设置了 categoryId 后,文章列表仍然为空或显示不正确? 这可能是由几个原因造成的。首先,请检查 moduleIdcategoryId 是否正确,确保它们与后台实际的内容模型和分类ID匹配。其次,确认该分类下确实存在已发布(非草稿或回收站)的文章。另外,检查 limit 参数是否设置得