在安企CMS中,如何通过模板标签动态获取并显示文章列表?

网站内容的动态展示是现代网站运营的核心之一,它不仅能提升用户体验,让访客轻松找到感兴趣的信息,还能有效助力搜索引擎优化(SEO),使网站更受搜索引擎青睐。在安企CMS中,通过强大的模板标签功能,我们可以非常灵活地获取并显示各种类型的文章列表。

安企CMS的模板系统借鉴了Django模板引擎的语法,整体风格自然流畅,对于熟悉前端开发的你来说,上手会非常快。在模板文件中,我们主要通过两种符号来操作:双花括号 {{ 变量 }} 用于输出变量内容,而单花括号加百分号 {% 标签 %} 则用于执行逻辑判断、循环或者调用特定的功能标签。

核心工具:archiveList 标签

要动态获取并显示文章列表,我们首先要认识安企CMS中的“万能”标签—— archiveList。这个标签是我们构建文章列表的基石,它提供了丰富的参数,可以帮助我们精准地筛选、排序和展示文章。

基本文章列表的获取

如果你只是想在一个页面上展示最新发布的几篇文章,不涉及分页,那么 archiveList 标签会非常简单实用。我们通常会给这个标签一个变量名,比如 articles,然后通过 for 循环遍历这个变量来显示每篇文章的信息。

例如,要在首页展示5篇最新文章的标题和简介:

<div class="latest-articles">
    {% archiveList articles with type="list" limit="5" order="id desc" %}
        {% for item in articles %}
            <article>
                <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
                <p>{{ item.Description }}</p>
                <footer>
                    <span>发布日期:{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</span>
                    <span>浏览量:{{ item.Views }}</span>
                </footer>
            </article>
        {% empty %}
            <p>暂无文章内容。</p>
        {% endfor %}
    {% endarchiveList %}
</div>

在这段代码中:

  • archiveList articles 定义了一个名为 articles 的变量,用来存储获取到的文章列表。
  • type="list" 表示我们获取的是一个固定数量的列表,而不是为分页做准备。
  • limit="5" 限制了只显示最新的5篇文章。
  • order="id desc" 告诉系统按照文章ID倒序排列,通常意味着最新发布的在前。你也可以使用 order="views desc" 按浏览量排序,或者 order="sort desc" 按后台自定义排序。
  • for item in articles 循环遍历 articles 变量中的每一篇文章,将当前文章的数据赋值给 item
  • item.Linkitem.Titleitem.Descriptionitem.Views 都是每篇文章的属性,可以直接通过 . 语法访问。
  • stampToDate(item.CreatedTime, "2006年01月02日") 是一个非常有用的时间格式化函数。安企CMS中的时间戳通常是10位数字,你需要使用 stampToDate 并传入Go语言的时间格式(例如 “2006年01月02日”)才能将其转换为我们熟悉的日期格式。
  • {% empty %} 块会在 articles 列表为空时显示,避免页面空白。

如果你需要显示文章的缩略图,可以利用 item.Thumbitem.Logo 属性。为了确保图片存在时才显示,你可以结合 if 标签使用:

{% if item.Thumb %}
    <img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="article-thumb" />
{% endif %}

结合 moduleId 获取特定内容模型文章

安企CMS支持灵活的内容模型,这意味着你可能不仅有“文章”模型,还有“产品”、“案例”等其他模型。如果你想获取特定模型下的文章列表,就需要使用 moduleId 参数。通常,“文章模型”的 moduleId1,“产品模型”为 2。你可以在后台的内容模型管理中查看具体ID。

例如,获取最新的5个产品列表:

{% archiveList products with type="list" moduleId="2" limit="5" order="id desc" %}
    {% for product in products %}
        <div class="product-item">
            <a href="{{ product.Link }}">
                {% if product.Logo %}
                    <img src="{{ product.Logo }}" alt="{{ product.Title }}" />
                {% endif %}
                <h3>{{ product.Title }}</h3>
            </a>
            <p>{{ product.Description }}</p>
        </div>
    {% endfor %}
{% endarchiveList %}

实现分页:让文章列表更易浏览

当文章数量很多时,分页是必不可少的功能。在安企CMS中,实现分页列表需要 archiveList 标签与 pagination 标签配合使用。

首先,archiveList 需要将 type 设置为 "page",并指定每页显示的数量 limit。然后,在 archiveList 标签的 endarchiveList 之后,我们使用 pagination 标签来生成分页导航。

以下是一个带分页的文章列表示例:

”`twig

{% archiveList articles with type="page" limit="10" %}
    {% for article in articles %}
        <article class="article-item">
            <h2><a href="{{ article.Link }}">{{ article.Title }}</a></h2>
            {% if article.Thumb %}
                <img src="{{ article.Thumb }}" alt="{{ article.Title }}" />
            {% endif %}
            <p class="article-description">{{ article.Description }}</p>
            <div class="article-meta">
                <span>分类: {% categoryDetail with name="Title" id=article.CategoryId %}</span>
                <span>浏览量: {{ article.Views }}</span>
                <span>发布时间: {{ stampToDate(article.CreatedTime, "2006年01月02日") }}</span>
            </div>
        </article>
    {% empty %}
        <p>这里暂时没有文章。</p>
    {% endfor %}

    <div class="pagination-nav">
        {% pagination pages with show="5" %}
            <a href="{{ pages.FirstPage.Link }}" class="page-link">首页</a>
            {% if pages.PrevPage %}<a href="{{ pages.