如何在AnQiCMS模板中获取并展示指定分类下的所有文章列表?

📅 👁️ 78

在AnQiCMS中构建网站时,我们经常需要根据特定的内容分类来展示文章列表,无论是博客的文章分类、产品分类,还是新闻分类。这不仅有助于网站内容的组织,也能提升用户浏览体验和搜索引擎的友好度。AnQiCMS提供了强大且灵活的模板标签,让这一需求变得简单直观。

AnQiCMS的模板系统采用了类似Django模板引擎的语法,以Go语言为底层支持,保证了模板解析的高效性。在模板文件中,我们通常会使用双花括号{{变量}}来输出变量内容,而使用单花括号和百分号{% 标签 %}来调用功能性标签,例如条件判断和循环控制。所有模板文件都统一存放在/template目录下,并使用UTF-8编码,确保内容正确显示。

核心标签:archiveList深度解析

要获取并展示指定分类下的所有文章列表,AnQiCMS的核心是archiveList标签。这个标签专门用于查询和输出不同内容模型下的文档列表。理解其参数是成功实现目标的关键。

archiveList标签的基本使用方式是这样的: {% archiveList 变量名称 with 参数1="值1" 参数2="值2" %}...{% endarchiveList %} 其中,“变量名称”是我们为获取到的文章列表定义的一个临时变量,通常命名为archives,方便在for循环中遍历。

以下是一些在使用archiveList时常用的关键参数:

  1. moduleId (模型ID): 在AnQiCMS中,文章、产品等都属于不同的“内容模型”。每个模型都有一个唯一的ID。例如,如果我们要获取“文章”模型下的文章,可能需要指定moduleId="1"(具体ID可在后台“内容管理”->“内容模型”中查看)。这是因为分类是依附于特定内容模型的。
  2. categoryId (分类ID): 这是指定要获取哪个分类文章的核心参数。你可以传入一个具体的分类ID,例如categoryId="10"。如果需要获取多个分类的文章,可以使用逗号分隔多个ID,如categoryId="10,11,12"。值得注意的是,如果你在分类列表页面(即URL中已包含分类ID)不指定此参数,archiveList会自动尝试读取当前页面的分类ID。如果你想避免这种自动读取行为,可以明确设置categoryId="0"
  3. type (列表类型): 这个参数决定了文章列表的展示方式。
    • type="list":用于获取固定数量的文章列表,配合limit参数使用。
    • type="page":用于获取支持分页的文章列表,通常与pagination标签结合使用,以显示页码导航。
  4. limit (显示数量):type="list"时,此参数指定要显示的文章数量,例如limit="10"表示显示10篇文章。它还支持offset,count的模式,例如limit="2,10"表示从第3篇文章开始显示10篇文章(跳过前2篇)。
  5. order (排序方式): 我们可以根据不同的需求对文章进行排序。常用的排序值有:
    • id desc:按照文章ID降序排列(最新发布的文章在前)。
    • views desc:按照浏览量降序排列(最热门的文章在前)。
    • sort desc:按照后台设置的自定义排序值降序排列。
  6. child (是否包含子分类): 默认情况下,child参数为true,表示获取指定分类及其所有子分类下的文章。如果只想显示当前指定分类下的文章,而不包括子分类的,可以设置为child=false
  7. siteId (站点ID): 如果您的AnQiCMS部署了多站点,并且希望获取其他站点的数据,可以通过此参数指定。一般情况下,无需设置。

archiveList标签获取到文章列表后,它会赋值给您定义的变量(例如archives),这个变量是一个数组对象。在模板中,您可以使用{% for item in archives %}循环遍历这个数组,item就代表了数组中的每一篇文章。

每篇文章(item)对象包含以下常用字段:

  • Id:文章ID
  • Title:文章标题
  • Link:文章详情页链接
  • Description:文章简介
  • Content:文章内容(通常在详情页使用,列表页一般只显示简介)
  • CategoryId:文章所属分类ID
  • Views:文章浏览量
  • CreatedTime:文章发布时间(时间戳格式,需要用stampToDate标签格式化)
  • Thumb:文章缩略图地址
  • Logo:文章封面首图地址
  • 以及在“内容模型”中自定义的其他字段。

实战演练:获取并展示文章列表

了解了archiveList标签的各项参数后,我们来看几个实际应用场景。

场景一:展示固定分类下的最新文章列表(不分页)

假设我们要在首页的一个区块中显示“公司新闻”分类(分类ID为5,属于文章模型,模型ID为1)的最新5篇文章。

<div class="news-section">
    <h2>公司新闻</h2>
    <ul>
        {% archiveList archives with moduleId="1" categoryId="5" order="id desc" limit="5" %}
            {% for item in archives %}
            <li>
                <a href="{{ item.Link }}">
                    <img src="{{ item.Thumb }}" alt="{{ item.Title }}" {% if not item.Thumb %}style="display:none;"{% endif %}>
                    <h3>{{ item.Title }}</h3>
                    <p>{{ item.Description|truncatechars:80 }}</p> {# 截取80个字符并添加... #}
                    <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    <span>阅读量:{{ item.Views }}</span>
                </a>
            </li>
            {% empty %}
            <li>暂无新闻文章。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
</div>

代码解析:

  • moduleId="1":指定我们要获取的是文章模型下的内容。
  • categoryId="5":明确指定只获取分类ID为5的文章。
  • order="id desc":确保按文章ID降序排列,即最新发布的在前。
  • limit="5":限制只显示最新的5篇文章。
  • {% for item in archives %}:循环遍历获取到的每篇文章。
  • {{ item.Thumb }}:输出文章的缩略图。{% if not item.Thumb %}style="display:none;"{% endif %}是一个小技巧,当没有缩略图时隐藏图片标签。
  • {{ item.Title }}{{ item.Link }}{{ item.Description }}{{ item.Views }}:分别输出文章标题、链接、简介和浏览量。
  • {{ stampToDate(item.CreatedTime, "2006-01-02") }}CreatedTime是时间戳,我们使用stampToDate标签将其格式化为“年-月-日”的日期格式。
  • {{ item.Description|truncatechars:80 }}:使用过滤器将文章简介截取为80个字符,并自动添加省略号。
  • {% empty %}:如果archives为空(即没有文章),则显示“暂无新闻文章。”。

场景二:在分类列表页展示文章列表并支持分页

在访问一个分类页面时,我们希望展示该分类下的所有文章,并提供分页功能。在这种情况下,通常无需手动指定categoryIdarchiveList会智能地识别当前页面的分类ID。

<div class="article-list-container">
    <h1>{% categoryDetail with name="Title" %}</h1> {# 显示当前分类的标题 #}

    <ul class="article-list">
        {% archiveList archives with type="page" moduleId="1" order="id desc" limit="10" %}
            {% for item in archives %}
            <li>
                <a href="{{ item.Link }}">
                    <img src="{{ item.Thumb }}" alt="{{ item.Title }}" {% if not item.Thumb %}style="display:none;"{% endif %}>
                    <h2>{{ item.Title }}</h2>
                    <p>{{ item.Description }}</p>
                    <div class="meta-info">
                        <span>发布于:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                        <span>阅读:{{ item.Views }}</span>
                    </div>
                </a>
            </li>
            {% empty %}
            <li>当前分类暂无文章。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>

    {# 分页导航 #}
    <div class="pagination-nav">
        {% pagination pages with show="5" %}
            <ul>
                <li {% if pages.FirstPage.IsCurrent %}class="active"{% endif %}><a href="{{ pages.FirstPage.Link }}">首页</a></li>
                {% if pages.PrevPage %}<li class="prev"><a href="{{ pages.PrevPage.Link }}">上一页</a></li>{% endif %}
                {% for page_item in pages.Pages %}
                    <li {% if page_item.IsCurrent %}class="active"{% endif %}><a href="{{ page_item.Link }}">{{ page_item.Name }}</a></li>
                {% endfor %}
                {% if pages.NextPage %}<li class="next"><a href="{{ pages.NextPage.Link }}">下一页</a></li>{% endif %}
                <li {% if pages.LastPage.IsCurrent %}class="active"{% endif %}><a href="{{ pages.LastPage.Link }}">末页</a></li>
            </ul>
        {% endpagination %}
    </div>
</div>

代码解析:

  • <h1>{% categoryDetail with name="Title" %}</h1>:使用categoryDetail标签获取并显示当前分类的标题,让用户知道他们正在浏览哪个分类。
  • type="page":激活分页功能。
  • limit="10":每页显示10篇文章。
  • {% pagination pages with show="5" %}:这是分页的核心。它会生成一个pages对象,其中包含了分页所需的所有信息(总页数、当前页、首页、末页、上一页、下一页以及中间页码列表)。show="5"表示中间页码最多显示5个。
  • 通过遍历pages.Pages,我们构建了页码链接,并使用IsCurrent属性来判断当前页码,以便添加active样式。

总结与**实践

在AnQiCMS中获取并展示指定分类下的文章列表,主要是围绕archiveList标签展开。通过灵活运用moduleIdcategoryIdtypelimitorder等参数,您可以轻松实现各种内容展示需求。结合stampToDate进行时间格式化,以及pagination标签实现分页,能够构建出功能完善、用户体验良好的动态内容区域。

几点**实践建议:

  • 明确moduleIdcategoryId 在设计模板时,首先确定您要操作的内容模型ID和分类ID。
  • 注意大小写: AnQiCMS的模板标签和参数是大小写敏感的,务必确保拼写正确。
  • 处理空数据: 使用{% empty %}子句或{% if %}条件来优雅地处理没有文章的情况,避免页面显示空白或报错。
  • 善用过滤器: 页面中展示文章简介时,使用truncatecharstruncatewords等过滤器可以有效控制文本长度,保持页面整洁。
  • 图片处理: 在显示文章缩略图时,判断item.Thumb是否存在可以避免src属性为空导致的浏览器错误或样式问题。

通过这些技巧,您可以充分利用AnQiCMS的模板功能,打造出丰富多样的内容展示页面。


常见问题解答(FAQ)

Q1: 我想在一个页面上显示不同内容模型的文章列表,应该怎么操作? A1: 您可以通过多次调用archiveList标签,并在每次调用时指定不同的moduleId参数来实现。例如,您可以调用一次`archiveList

相关文章

AnQiCMS支持哪些内容模型,以及它们如何影响前端内容展示?

AnQiCMS 在内容管理方面的一大亮点在于其灵活的内容模型支持,这使得网站能够根据自身业务的独特需求,对不同类型的信息进行结构化定义与展示。理解内容模型如何运作,以及它们如何影响前端内容的呈现,是高效利用AnQiCMS进行网站运营的关键。 ### AnQiCMS 中的内容模型:定制化的信息蓝图 内容模型可以被形象地理解为网站上各类信息的“数据结构蓝图”。它定义了每种内容类型应包含哪些字段

2025-11-08

如何自定义AnQiCMS网站的URL伪静态规则,以优化搜索引擎显示效果?

在网站运营中,网址(URL)的结构对搜索引擎优化(SEO)和用户体验有着举足轻重的影响。一个清晰、有意义的网址不仅能帮助搜索引擎更好地理解页面内容,也能让用户在点击前对页面内容有所预期,提升信任感。AnQiCMS作为一个专注于企业内容管理的系统,深知这一点,因此提供了灵活的伪静态规则自定义功能。 本文将引导您了解如何在AnQiCMS中自定义伪静态规则,从而优化您的网站在搜索引擎中的表现

2025-11-08

AnQiCMS中,如何在文章列表页实现动态分页并控制每页显示数量?

在安企CMS中管理网站内容,文章列表页通常是用户浏览信息的主要入口之一。为了提供更流畅的用户体验并优化页面加载性能,实现动态分页和灵活控制每页显示数量显得尤为重要。安企CMS提供了强大且易于使用的模板标签,让我们可以轻松实现这些功能。 ### 核心概念:动态分页与每页数量控制的基石 在安企CMS中,实现文章列表的动态分页主要依赖于两个核心模板标签: 1. **`archiveList`

2025-11-08

如何利用AnQiCMS模板标签精准控制文章详情页的显示内容?

网站运营中,文章详情页是用户与内容深度互动、了解产品或服务的关键环节。一个设计精良、信息呈现精准的详情页,不仅能显著提升用户体验,还能有效助力SEO优化。在安企CMS(AnQiCMS)这样灵活高效的内容管理系统中,我们可以通过巧妙运用其模板标签,实现对文章详情页内容的精细化控制。 AnQiCMS基于Go语言开发,以其简洁高效的架构,提供了类似Django模板引擎的强大功能

2025-11-08

AnQiCMS如何设置网站首页的Title、Keywords和Description,以提升搜索排名?

在当今的数字世界中,网站的可见度对于吸引潜在客户至关重要。而要提升网站在搜索引擎中的排名,网站首页的Title(标题)、Keywords(关键词)和Description(描述)——我们常称之为TDK——是不可忽视的基石。安企CMS(AnQiCMS)作为一款专为中小企业和内容运营团队设计的内容管理系统,深知TDK的重要性,并提供了直观便捷的设置方式,帮助您轻松优化网站的搜索表现

2025-11-08

如何在AnQiCMS中启用Markdown编辑器,并正确显示数学公式和流程图?

在AnQiCMS中进行内容创作,不仅可以依靠传统的富文本编辑器,新版更是引入了Markdown编辑器,为习惯使用Markdown语法的用户提供了极大的便利。Markdown以其简洁高效的特点,让内容撰写变得更加专注和快速。更令人欣喜的是,通过一些简单的配置,我们还能在网站上优雅地展示复杂的数学公式和直观的流程图。 接下来,我们将详细了解如何在AnQiCMS中启用Markdown编辑器

2025-11-08

AnQiCMS的多语言功能是如何在前端实现内容切换和显示的?

在全球化日益紧密的今天,网站要触达更广泛的用户群体,提供多语言内容几乎成为了一项标配。对于中小企业和内容运营团队来说,如何高效、灵活地实现多语言内容的切换与显示,是选择内容管理系统时考量的关键因素。AnQiCMS作为一个基于Go语言开发的系统,在这方面提供了清晰且实用的解决方案。 ### 理解AnQiCMS的多语言机制

2025-11-08

如何为AnQiCMS文章内容中的图片添加水印和防采集干扰码,保护原创?

在数字内容日益丰富的今天,原创内容的价值愈发凸显,但也面临着被盗用、抄袭的风险。尤其是精心制作的图片和撰写的文章,往往成为不法分子采集的目标,这不仅侵犯了创作者的劳动成果,也可能稀释品牌影响力。幸好,AnQiCMS作为一款注重用户体验和内容安全的管理系统,内置了强大的图片水印和防采集干扰码功能,旨在帮助您轻松保护自己的数字资产。 ###

2025-11-08