如何获取并显示特定分类下的所有文章?

在网站内容管理中,有效地组织和展示文章是提升用户体验和网站结构清晰度的关键。安企CMS提供了强大且灵活的模板标签功能,让您能够轻松地获取并显示特定分类下的所有文章。

确保内容结构清晰:后台分类设置的基石

在开始模板层面的操作之前,我们首先要确保后台的内容结构是清晰、合理的。安企CMS的分类管理功能位于“内容管理”模块下,您可以在这里创建和管理各种文章分类,例如“公司新闻”、“行业动态”或“技术教程”等。

在发布或编辑文章时,您会发现一个“所属分类”的选项,文章正是通过这个选项被归属到特定的分类之下。当您需要获取某一分类的文章列表时,系统会根据您在后台为文章指定的分类信息来进行筛选。

核心功能:使用 archiveList 标签获取文章列表

archiveList 标签是安企CMS模板中用于获取文章列表的核心工具。它功能强大,可以通过多种参数精确控制要获取的文章范围和显示方式。

要获取特定分类下的文章,关键在于使用 categoryId 这个参数。您可以在后台的“内容管理” -> “文档分类”中找到每个分类对应的ID。

此外,您还需要关注以下几个重要参数:

  • type 这个参数决定了您希望以何种形式展示文章列表。
    • 设置为 listtype="list")时,它会按照您指定的数量(通过 limit 参数)列出文章,常用于侧边栏推荐或首页文章区块。
    • 设置为 pagetype="page")时,它会为文章列表生成分页,这在分类文章页或搜索结果页等需要大量文章展示的场景非常有用。
  • limit 用于控制每页或每次显示的文章数量。例如,limit="10" 将显示10篇文章。它还支持偏移模式,如 limit="2,10" 表示从第2篇文章开始,获取10篇文章。
  • order 文章的显示顺序同样重要。您可以根据需求设置不同的排序规则:
    • order="id desc":按文章ID倒序,通常意味着最新发布的文章在前。
    • order="views desc":按文章浏览量倒序,热门文章在前。
    • order="sort desc":按后台自定义排序,允许您手动调整文章顺序。
  • moduleId 如果您管理着多个内容模型(例如同时有“文章模型”和“产品模型”),确保指定正确的 moduleId 可以避免混淆。文章模型通常默认为1。

archiveList标签内部,您会使用一个for循环来遍历获取到的每一篇文章。循环体内的每一篇文章都由一个item变量表示,您可以通过item.字段名的方式来获取文章的各种信息,例如:item.Title(标题)、item.Link(链接)、item.Description(简介)、item.Thumb(缩略图)、item.CreatedTime(发布时间)和item.Views(浏览量)等。

构建模板代码:从简单列表到分页展示

了解了这些参数后,我们来看看如何在模板中实际应用它们。

示例一:获取特定分类下的最新5篇文章(不带分页)

如果您希望在首页或侧边栏显示某个分类下的几篇最新文章,可以使用 type="list"。假设我们要获取ID为1的“公司新闻”分类下最新的5篇文章:

{# 获取ID为1的分类(例如“公司新闻”)下最新的5篇文章 #}
<div class="category-articles">
    <h2>公司新闻</h2>
    <ul>
    {% archiveList articles with categoryId="1" type="list" limit="5" order="id desc" %}
        {% for item in articles %}
            <li>
                <a href="{{ item.Link }}" title="{{ item.Title }}">
                    {# 如果有缩略图,则显示 #}
                    {% if item.Thumb %}
                        <img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="article-thumb">
                    {% endif %}
                    <h3>{{ item.Title }}</h3>
                    <p class="article-desc">{{ item.Description|truncatechars:80 }}</p> {# 截取简介,避免过长 #}
                    <span class="article-date">{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                </a>
            </li>
        {% empty %}
            {# 当该分类下没有文章时显示 #}
            <li>该分类下暂无文章。</li>
        {% endfor %}
    {% endarchiveList %}
    </ul>
</div>

在这个例子中,我们还使用了 {{ stampToDate(item.CreatedTime, "2006-01-02") }} 过滤器来将时间戳格式化为易读的日期。truncatechars:80 则用于截取文章简介,使其显示不超过80个字符。

示例二:获取特定分类下的所有文章并带分页

当您需要在分类详情页显示该分类下的所有文章,并提供分页功能时,将 type 参数设置为 page,并配合 pagination 标签使用。

”`twig {# 假设我们正在一个分类详情页,会自动获取当前分类ID #} {# 如果需要指定分类,可以手动添加 categoryId=“您的分类ID” #} {% archiveList articles with type=“page” limit=“10” order=“id desc” %}

{# 列表头部可以显示当前分类的名称和描述 #}
<div class="category-header">
    <h1>{% categoryDetail with name="Title" %}</h1>
    <p>{% categoryDetail with name="Description" %}</p>
</div>

<div class="articles-list">
    {% for item in articles %}
        <div class="article-card">
            <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
            {% if item.Thumb %}
                <a href="{{ item.Link }}"><img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="article-card-thumb"></a>
            {% endif %}
            <p>{{ item.Description }}</p>
            <div class="article-meta">
                <span>发布时间:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                <span>浏览量:{{ item.Views }}</span>
            </div>
        </div>
    {% empty %}
        <p>该分类下暂无文章。</p>
    {%