AnQiCMS 内容模型深度指南:如何用 archiveList 精准筛选文档列表
作为一位深耕网站运营多年的老兵,我深知一个灵活高效的内容管理系统对企业网站的重要性。AnQiCMS 凭借其基于 Go 语言的高效架构和高度可定制化的特性,在内容管理领域为我们提供了强大的支持。其中,内容模型功能无疑是 AnQiCMS 的一大亮点,它允许我们根据业务需求,创建并管理不同类型的内容结构,比如文章、产品、案例、新闻、活动等等。
今天,我们就来深入探讨 AnQiCMS 中一个极其常用且强大的模板标签——archiveList,并聚焦于如何结合 moduleId 参数,实现对特定内容模型文档列表的精准筛选和展示。这不仅能让您的网站内容井然有序,更能为用户提供更清晰、更有针对性的浏览体验。
灵活的内容模型:精细化管理的基石
在 AnQiCMS 中,内容模型是定义内容类型和其字段结构的核心。系统默认内置了“文章模型”和“产品模型”,但真正的力量在于您可以根据实际业务需求创建无限多的自定义模型。例如,如果您运营一个房地产网站,您可以创建“房源模型”;如果是美食博客,则可以创建“食谱模型”。每个模型都有一个唯一的标识符,我们称之为 moduleId。
这个 moduleId 就像是内容世界的“身份证号”。当您发布一篇“文章”时,它就被赋予了文章模型的 moduleId;发布一件“产品”时,它又有了产品模型的 moduleId。正是这个小小的 moduleId,让我们能够在大海般的内容中,精准地捞取我们想要的信息。
archiveList 标签:内容展示的核心驱动
archiveList 是 AnQiCMS 模板中最常用的标签之一,它负责从数据库中获取并展示文档(即我们创建的各种内容)列表。无论是首页的最新动态、侧边栏的热门推荐,还是分类页的详细列表,archiveList 都扮演着关键角色。
它的基本用法是循环遍历内容,并取出每个内容的属性进行展示。而要让这个标签变得“聪明”,能够识别和筛选不同模型的内容,moduleId 参数就显得尤为重要。
牵手 moduleId:精准筛选你的内容列表
当我们需要在一个页面上,或者网站的某个特定区域,只展示某一类内容模型下的文档时,moduleId 参数就是我们的不二选择。通过在 archiveList 标签中明确指定 moduleId,系统就能准确地过滤出属于该内容模型的文档列表。
例如,假设您的“文章模型”的 moduleId 是 1,而“产品模型”的 moduleId 是 2。如果您想在首页的一个区域展示最新的文章列表,在另一个区域展示推荐的产品列表,您就需要分别使用两个 archiveList 标签,并通过 moduleId 进行区分。
{# 获取文章模型的文档列表,假设文章模型的 moduleId 为 1 #}
{% archiveList latestArticles with moduleId="1" type="list" limit="5" order="id desc" %}
{% for item in latestArticles %}
<div class="news-item">
<a href="{{ item.Link }}">
<h4>{{ item.Title }}</h4>
<p>{{ item.Description|truncatechars:100 }}</p> {# 截取描述,保持简洁 #}
<span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
</a>
</div>
{% empty %}
<p>暂无最新文章。</p>
{% endfor %}
{% endarchiveList %}
{# 获取产品模型的文档列表,假设产品模型的 moduleId 为 2 #}
{% archiveList featuredProducts with moduleId="2" type="list" limit="3" order="views desc" %}
{% for item in featuredProducts %}
<div class="product-card">
<a href="{{ item.Link }}">
{% if item.Thumb %}
<img src="{{ item.Thumb }}" alt="{{ item.Title }}">
{% endif %}
<h5>{{ item.Title }}</h5>
<p>浏览量:{{ item.Views }}</p>
</a>
</div>
{% empty %}
<p>暂无推荐产品。</p>
{% endfor %}
{% endarchiveList %}
在上面的例子中,我们清晰地看到了 moduleId="1" 和 moduleId="2" 是如何将两个 archiveList 标签拉开了距离,让它们分别只负责展示各自内容模型下的文档。
除了 moduleId,您还可以结合其他参数来进一步优化您的内容列表:
type:列表类型type="list":用于获取固定数量的列表,例如首页的“最新文章”区块,只显示前 5 篇。type="page":用于需要分页的列表,例如文章列表页或产品展示页,配合pagination标签使用。
limit:显示数量- 控制列表返回的文档数量,如
limit="10"表示获取 10 篇文档。
- 控制列表返回的文档数量,如
order:排序方式order="id desc":按文档 ID 倒序,通常用于显示最新发布的文档。order="views desc":按浏览量倒序,适用于热门排行等。order="sort desc":按后台自定义排序,提供运营上的灵活性。
categoryId:分类 ID- 在特定模型下,您可以进一步通过
categoryId筛选属于某个分类的文档。例如,moduleId="1" categoryId="10"将只获取“文章模型”下,且分类 ID 为 10 的文章。
- 在特定模型下,您可以进一步通过
实战演练:构建多模型内容列表
让我们通过一个更完整的例子,来展示如何在 AnQiCMS 模板中,利用 archiveList 和 moduleId 参数,优雅地展示不同内容模型的文档列表。假设我们有一个网站首页,需要展示“最新新闻”和“特色服务”两个区域。新闻属于“文章模型”(moduleId=1),特色服务属于“服务模型”(moduleId=3,这是一个自定义模型)。
”`twig
{# 最新新闻区 - 假设新闻对应文章模型 moduleId 为 1 #}
<section class="latest-news">
<h2>最新新闻</h2>
<div class="news-list">
{% archiveList newsItems with moduleId="1" type="list" limit="4" order="id desc" %}
{% for item in newsItems %}
<article class="news-card">
{% if item.Thumb %}
<img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="news-thumbnail">
{% endif %}
<div class="news-content">
<h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
<p>{{ item.Description|truncatechars:120 }}</p>
<time datetime="{{ stampToDate(item.CreatedTime, "2006-01-02T15:04:05") }}">
{{ stampToDate(item.CreatedTime, "2006年01月02日") }}
</time>
<span class="news-views">浏览:{{ item.Views }}</span>
</div>
</article>
{% empty %}
<p>目前还没有新闻发布,敬请期待!</p>
{% endfor %}
{% endarchiveList %}
</div>
</section>
<hr>
{# 特色服务区 - 假设服务模型 moduleId 为 3 #}