如何在AnQiCMS中获取并显示特定分类(或多个分类)下的文章列表?

在AnQiCMS中,灵活地展示网站内容是提升用户体验和网站功能性的关键。无论您是运营一个企业官网、个人博客还是营销型站点,经常会遇到需要在特定页面显示某个分类下最新文章、热门产品或者多个相关分类的内容列表的需求。AnQiCMS强大的模板标签系统,特别是archiveList标签,能够帮助您轻松实现这一目标。

AnQiCMS以其基于Go语言的高效架构和丰富的功能集,为内容管理提供了坚实的支撑。它的模板引擎语法简洁高效,类似Django的风格,让您即使不具备深厚的开发背景,也能通过简单的标签组合,实现复杂的内容展示逻辑。

接下来,我们就一起探索如何在您的AnQiCMS站点中,获取并精巧地展示特定分类或多个分类下的文章列表。

认识核心工具:archiveList 标签

要获取文章列表,archiveList是您首先需要掌握的标签。它非常灵活,能根据多种条件筛选和排序文章。它的基本使用形式是在{% archiveList 变量名 with 参数 %}{% endarchiveList %}之间,通过for循环来遍历获取到的文章数据。

例如,您想获取一个分类下的文章列表,最核心的参数就是categoryId。这个参数允许您指定一个或多个分类的ID,从而精确控制显示哪些分类下的文章。

获取单个分类下的文章列表

假设您有一个“公司新闻”分类,其ID为1。要在页面上显示这个分类下的最新文章,您可以这样编写模板代码:

<section class="latest-news">
    <h2>公司新闻</h2>
    <ul>
        {% archiveList articles with categoryId="1" limit="5" order="id desc" %}
            {% for item in articles %}
                <li>
                    <a href="{{ item.Link }}" title="{{ item.Title }}">
                        <h3>{{ item.Title }}</h3>
                        <p>{{ item.Description|truncatechars:100 }}</p>
                        <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    </a>
                </li>
            {% empty %}
                <li>当前分类下没有找到任何文章。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
</section>

这段代码首先声明了一个名为articles的变量来存储查询结果。categoryId="1"明确指定了要获取ID为1的分类下的文章,limit="5"限制只显示最新的5篇文章,而order="id desc"则确保这些文章是按ID降序(即最新发布)排列的。for循环会逐一遍历articles中的每篇文章,item.Linkitem.Titleitem.Description等可以帮助您展示文章的基本信息。如果该分类下没有文章,{% empty %}标签内的内容则会显示。

获取多个分类下的文章列表

如果您需要在一个页面上混合显示来自“公司新闻”(ID: 1)、“行业动态”(ID: 2)和“技术分享”(ID: 3)这三个分类的文章,categoryId参数也同样支持。您只需要将多个分类ID用英文逗号,隔开即可。

<section class="mixed-articles">
    <h2>精选文章</h2>
    <ul>
        {% archiveList articles with categoryId="1,2,3" limit="10" order="views desc" %}
            {% for item in articles %}
                <li>
                    <a href="{{ item.Link }}" title="{{ item.Title }}">
                        <h4>{{ item.Title }}</h4>
                        <!-- 在这里,我们可以获取并显示文章所属分类的名称 -->
                        <span class="category-name">分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
                        <span>浏览量:{{ item.Views }}</span>
                    </a>
                </li>
            {% empty %}
                <li>没有找到任何精选文章。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
</section>

在这个例子中,categoryId="1,2,3"告诉系统去这三个分类中查找文章。我们还将order参数改为了views desc,这样列表会按照文章的浏览量从高到低排序,帮助您展示热门内容。

值得一提的是,在for循环内部,我们还使用了{% categoryDetail with name="Title" id=item.CategoryId %}。这个小技巧允许您在每一篇文章旁边,显示其所属分类的名称,极大地提升了内容的导航性和用户体验。item.CategoryId会动态地提供当前文章的分类ID,categoryDetail标签则根据这个ID获取分类的名称。

深入定制与分页显示

除了基本的分类筛选,archiveList标签还提供了更多灵活的参数,让您的文章列表更具动态性。

  • moduleId:如果您在AnQiCMS后台定义了多种内容模型(例如“文章模型”和“产品模型”),可以通过moduleId="1"(通常1代表文章模型)来明确您想获取的是哪种模型下的内容。
  • limit:控制显示的文章数量。例如limit="10"显示10篇,也可以使用偏移量模式,如limit="2,10"表示从第3篇文章开始,显示10篇文章。
  • order:定义文章的排序方式,除了id desc(最新)和views desc(最热),您还可以使用order="sort desc"(后台自定义排序)等。
  • flag:根据文章在后台设置的推荐属性(如头条[h]、推荐[c]等)来筛选文章。例如flag="c"只显示被标记为“推荐”的文章。
  • type="page"pagination标签结合使用:当文章数量较多,需要分页显示时,将archiveListtype参数设置为page。随后,您可以使用pagination标签来生成分页导航。

这是一个结合了分页功能的文章列表示例:

<section class="paginated-articles">
    <h3>最新动态(分页)</h3>
    {% archiveList articles with categoryId="4" moduleId="1" type="page" limit="8" order="id desc" %}
        {% for item in articles %}
            <article>
                <a href="{{ item.Link }}">
                    <img src="{{ item.Thumb }}" alt="{{ item.Title }}" onerror="this.style.display='none';">
                    <h5>{{ item.Title }}</h5>
                    <p>{{ item.Description|truncatechars:120 }}</p>
                    <small>发布于:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</small>
                </a>
            </article>
        {% empty %}
            <p>这个分类下暂时没有可显示的文章。</p>
        {% endfor %}

        {# 分页导航 #}
        <div class="pagination-nav">
            {% pagination pages with show="5" %}
                {% if pages.PrevPage %}
                    <a href="{{ pages.PrevPage.Link }}" class="page-link">上一页</a>
                {% endif %}
                {% for pageItem in pages.Pages %}
                    <a href="{{ pageItem.Link }}" class="page-link {% if pageItem.IsCurrent %}active{% endif %}">{{ pageItem.Name }}</a>
                {% endfor %}
                {% if pages.NextPage %}
                    <a href="{{ pages.NextPage.Link }}" class="page-link">下一页</a>
                {% endif %}
            {% endpagination %}
        </div>
    {% endarchiveList %}
</section>

在这个例子中,type="page"表明我们需要分页显示,limit="8"表示每页显示8篇文章。pagination pages with show="5"则会生成一个最多显示5个页码的分页导航条,并提供了“上一页”、“下一页”以及各个页码的链接。您可以根据pageItem.IsCurrent来判断当前页并为其添加样式。

总结

AnQiCMS的模板标签系统为内容运营者提供了极大的便利。通过灵活运用archiveListcategoryDetailpagination等标签,您可以轻松地在网站的任何位置获取并展示特定分类(或多个分类)下的文章列表,并根据您的需求进行排序、数量控制和分页显示。这些功能不仅能帮助您更好地组织网站内容,提升SEO效果,也能为访问者带来更流畅、更个性化的浏览体验。


常见问题解答(FAQ)

Q1: 我设置了categoryIdlimit参数,但文章列表没有显示或显示的文章数量不对,这是为什么? A1: 请检查几个方面:

  • 分类ID是否正确? 确保您在后台查看到的分类ID与模板中使用的ID完全一致。
  • 文章是否已发布? 只有状态为“已发布”的文章才会在前端显示。草稿或定时发布但时间未到的文章不会显示。
  • 文章数量是否足够? 如果您设置limit="5"但该分类下只有3篇文章,自然只会显示3篇。
  • 内容模型是否匹配? 如果您同时使用了moduleId参数,请确保该ID与您的