在网站运营中,我们经常会遇到这样的需求:在首页或某个专题页面,集中展示来自不同分类的“精选”文章,既能丰富页面内容,又能引导用户发现更多感兴趣的信息。安企CMS(AnQiCMS)提供了非常灵活且强大的功能,让我们能够轻松实现这一目标,而无需复杂的编程知识。
要在一个页面中聚合显示多个分类下的精选文章列表,我们主要会用到安企CMS的“推荐属性”功能以及“文档列表标签”(archiveList)。
理解安企CMS的“精选”机制与内容组织
在安企CMS中,内容的“精选”状态是通过文章的“推荐属性”(Flag)来定义的。当我们编辑一篇文章时,在“推荐属性”选项中,可以选择多种属性,例如“头条[h]”、“推荐[c]”、“幻灯[f]”等。这里,“推荐[c]”就是一个非常适合用来标记“精选”文章的属性。您只需在后台发布或编辑文章时,勾选相应的“推荐”属性即可将其标记为精选内容。
同时,文章都会归属于特定的分类和内容模型。要聚合显示多个分类下的文章,我们需要了解这些分类的ID。您可以在安企CMS后台的“内容管理”->“文档分类”中查看和管理您的分类,每个分类都会有一个唯一的ID。
方案一:逐个分类展示其下的精选文章列表
如果您希望页面结构清晰,例如“分类A精选”、“分类B精选”,每个分类下的精选文章独立展示,那么可以采用以下方法。这种方式有助于用户快速定位特定分类的优质内容。
首先,我们通过categoryList标签获取需要展示的分类列表,然后在每个分类的循环内部,再使用archiveList标签来获取该分类下的精选文章。
{# 假设我们要获取ID为1、2、3的分类,并逐个展示其下的精选文章 #}
{# 您可以在后台“内容管理”->“文档分类”中查看分类ID #}
{% categoryList targetCategories with moduleId="1" parentId="0" %} {# 获取所有顶级文章分类,moduleId=1通常代表文章模型 #}
{% for category in targetCategories %}
{# 仅展示您感兴趣的分类,例如ID为1,2,3的分类 #}
{% if category.Id == 1 or category.Id == 2 or category.Id == 3 %}
<div class="category-featured-section">
<h3><a href="{{ category.Link }}">{{ category.Title }}</a> 下的精选文章</h3>
<ul>
{# 使用archiveList获取当前分类(category.Id)下,推荐属性为'c'(精选)的文章,限制显示5篇,并按浏览量倒序排序 #}
{% archiveList featuredArticles with categoryId=category.Id flag="c" limit="5" order="views desc" %}
{% for article in featuredArticles %}
<li>
<a href="{{ article.Link }}">{{ article.Title }}</a>
<p>{{ article.Description|truncatechars:80 }}</p> {# 截取文章描述前80个字符 #}
<span>发布日期: {{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
</li>
{% else %}
{# 如果当前分类下没有找到精选文章,显示此提示 #}
<li>当前分类暂无精选文章可供展示。</li>
{% endfor %}
{% endarchiveList %}
</ul>
<a href="{{ category.Link }}" class="view-more">查看更多 {{ category.Title }} 文章</a>
</div>
{% endif %}
{% endfor %}
{% endcategoryList %}
在这段代码中,我们首先通过categoryList获取了顶级的文章分类。在遍历这些分类时,我们通过if条件判断只处理那些我们希望展示的特定分类(例如ID为1、2、3)。接着,在每个目标分类内部,再次使用archiveList,这次的关键在于categoryId=category.Id(确保获取当前分类的文章)和flag="c"(筛选出精选文章)。limit和order参数可以帮助我们控制显示数量和排序方式。
方案二:聚合显示所有指定分类的精选文章列表
如果您希望将来自不同分类的精选文章统一在一个列表中展示,不区分分类归属,更强调内容的“精选”属性,那么可以采用这种更直接的聚合方式。
这种方式的实现更为简洁,直接使用一个archiveList标签即可。archiveList的categoryId参数支持传入多个分类ID,用逗号分隔,这正是我们聚合文章的关键。
<div class="all-featured-articles-list">
<h2>全站精选文章聚合</h2>
<ul>
{# 获取ID为1、2、3的分类下,推荐属性为'c'(精选)的文章,限制显示10篇,并按ID倒序(最新发布) #}
{% archiveList aggregatedFeaturedArticles with categoryId="1,2,3" flag="c" limit="10" order="id desc" %}
{% for article in aggregatedFeaturedArticles %}
<li>
<a href="{{ article.Link }}">{{ article.Title }}</a>
<p class="article-meta">
{# 使用categoryDetail获取文章所属分类的名称,增强上下文信息 #}
<span class="article-category">所属分类: {% categoryDetail with name="Title" id=article.CategoryId %}</span>
<span class="article-date">发布日期: {{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
</p>
<p>{{ article.Description|truncatechars:120 }}</p> {# 截取文章描述前120个字符 #}
</li>
{% else %}
{# 如果没有找到任何精选文章,显示此提示 #}
<li>目前暂无精选文章可供展示。</li>
{% endfor %}
{% endarchiveList %}
</ul>
</div>
在这个示例中,categoryId="1,2,3"让archiveList标签一次性从这三个分类中获取文章,而flag="c"则确保只有被标记为“推荐”的文章才会被列出。我们还额外加入了categoryDetail标签来显示每篇文章的所属分类,这在聚合列表中非常有用,能让用户了解内容的来源。
优化与注意事项
- 模板路径: 请确保您的模板文件放置在
/template目录下,并按照您选择的模板组织模式(文件夹组织或扁平化)创建相应的文件。例如,如果您在首页聚合显示,通常在index/index.html或index.html中添加上述代码。 - 样式美化: 上述代码只提供了基本的HTML结构。为了让页面看起来更美观,您需要结合CSS进行样式设计。安企CMS的模板设计非常灵活,您可以自由添加样式文件。
- “精选”的定义: 务必在后台管理中,对您希望展示为“精选”的文章正确设置“推荐属性(Flag)”为
c。如果文章未设置此属性,将不会被