在安企CMS中管理网站内容时,我们经常需要灵活地控制文章列表的展示,例如,在某个页面上只显示特定分类下的文章。这不仅有助于网站内容的精准组织,也能极大地提升访客的浏览体验,帮助他们更快找到感兴趣的信息。安企CMS提供了强大的模板标签功能,让这一需求变得简单而直观。
实现这一目标的核心在于安企CMS的 archiveList 模板标签。这个标签是用来从数据库中获取文章列表的“万能钥匙”,通过为其配置不同的参数,我们可以精确地筛选出所需的内容。
了解 archiveList 的关键参数
在 archiveList 标签中,有两个至关重要的参数用于筛选特定分类的文章:
moduleId:这个参数用于指定您要获取文章的内容模型。在安企CMS中,文章、产品等都属于不同的内容模型。通常,“文章模型”的ID是1,“产品模型”的ID是2,您可以在后台的“内容管理”->“内容模型”中查看或自定义。确保指定正确的moduleId是获取正确文章列表的第一步。categoryId:这是直接指定文章所属分类的关键参数。通过提供一个或多个分类的ID,您可以让archiveList标签只返回这些分类下的文章。
如何获取分类ID?
在运用 categoryId 参数之前,您需要知道目标分类的ID。获取分类ID有几种常用方法:
- 从后台管理界面获取: 最直接的方式是登录安企CMS后台,进入“内容管理”->“文档分类”。在这里,每个分类都会清晰地列出其对应的ID。
- 通过模板标签动态获取: 如果您正在一个分类详情页或其子页面上,并且希望显示当前分类的文章,您可以使用
categoryDetail标签来获取当前分类的ID,然后将其传递给archiveList。例如,{% categoryDetail with name="Id" %}可以直接输出当前分类的ID。
实战场景:精准控制文章列表
掌握了 moduleId 和 categoryId 参数以及如何获取分类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" 参数用于按发布时间倒序排列文章,确保显示最新内容。
再者,很多时候我们会构建一种按分类分组展示内容的页面布局,例如,页面上显示几个分类的标题,每个标题下再列出该分类的几篇文章。这可以通过结合 categoryList 和 archiveList 标签来实现:
{% 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)
如何确定文章模型的
moduleId是多少? 通常情况下,安企CMS内置的“文章模型”的ID是1,“产品模型”的ID是2。您可以通过登录后台管理界面,进入“内容管理”->“内容模型”,在那里可以清晰地看到每个内容模型及其对应的ID。如果您自定义了新的内容模型,其ID也会在此处显示。如果我希望在文章列表中显示当前分类及其所有子分类的文章,需要额外设置吗? 不需要额外设置。
archiveList标签在默认情况下就支持获取指定分类及其所有子分类的文章。也就是说,当您为categoryId参数传入一个分类ID时,它会自动包含该分类下的所有子分类中的文章。只有当您明确不希望包含子分类文章时,才需要使用child="false"参数。为什么我设置了
categoryId后,文章列表仍然为空或显示不正确? 这可能是由几个原因造成的。首先,请检查moduleId和categoryId是否正确,确保它们与后台实际的内容模型和分类ID匹配。其次,确认该分类下确实存在已发布(非草稿或回收站)的文章。另外,检查limit参数是否设置得