作为一名资深的安企CMS网站运营人员,我深知高效内容管理和精准内容呈现对于网站成功的关键作用。在AnQiCMS中,灵活运用模板标签是实现这一目标的重要途径。今天,我们将深入探讨如何利用archiveList模板标签,根据指定条件获取并展示文档列表,从而满足多样化的内容展示需求。
掌握archiveList标签:内容展示的强大基石
在AnQiCMS模板开发中,archiveList标签是用于获取文档列表的核心工具。无论您需要展示最新文章、热门产品、特定分类下的内容,甚至是实现复杂的筛选和搜索结果,archiveList都能提供强大的支持。它能够根据您设定的各种条件,从数据库中提取出符合要求的文档数据,并供您在前端模板中进行循环展示。
archiveList标签的基本语法结构简洁明了,通常以{% archiveList 变量名称 with 参数 %}...{% endarchiveList %}的形式出现。其中,“变量名称”是您自定义的一个变量,用于在循环中承载获取到的文档数据集合;with关键字后,您可以添加一系列参数来精确控制文档的筛选和排序。
核心参数详解:精准控制文档获取
要充分发挥archiveList的威力,理解其各项参数至关重要。以下是您在运用archiveList时最常用到的一些核心参数:
moduleId(模型ID) 这个参数允许您指定从哪个内容模型中获取文档。例如,moduleId="1"通常用于获取文章模型的文档,而moduleId="2"可能用于获取产品模型的文档。准确指定模型ID能够避免跨模型数据混淆,确保内容的专业性。categoryId(分类ID) 通过categoryId,您可以指定获取特定分类下的文档。例如,categoryId="1"将获取ID为1的分类下的所有文档。如果您需要获取多个分类的文档,可以使用逗号分隔多个ID,如categoryId="1,2,3"。值得注意的是,如果未指定此参数,archiveList会尝试自动读取当前页面的分类ID。若您希望完全禁用此自动行为,可以明确设置categoryId="0"。excludeCategoryId(排除分类ID) 与categoryId相反,excludeCategoryId用于排除特定分类下的文档。这在您需要展示除某些分类之外的所有内容时非常有用。userId(作者ID) 如果您需要展示特定作者发布的文档,可以使用userId参数,例如userId="1"将获取用户ID为1的作者发布的文档。parentId(上级文档ID) 这个参数在文档之间存在层级关系时非常有用。例如,您可能需要获取某个“父文档”下的所有“子文档”。flag(推荐属性) AnQiCMS为文档提供了多种推荐属性,例如头条[h]、推荐[c]、幻灯[f]等。通过flag="c",您可以轻松筛选出带有“推荐”属性的文档,这对于网站首页或栏目页的推荐内容展示非常有帮助。excludeFlag(排除推荐属性) 与flag类似,excludeFlag允许您排除带有特定推荐属性的文档,例如,在某个区域不显示“头条”内容。showFlag(是否显示文档的flag) 默认情况下,文档的推荐属性(Flag字段)在列表项中是不可见的。如果您需要在前端展示这些属性,例如用图标或文本标记,必须将showFlag设置为true。child(是否显示子分类内容) 当您获取某个分类的文档时,child参数(默认为true)决定是否包含其子分类下的文档。如果只希望显示当前分类本身的文档,而不包含其子分类,请设置child=false。order(排序方式) 文档的排序方式至关重要。order参数支持多种排序规则:order="id desc":按文档ID倒序(最新发布)order="views desc":按浏览量倒序(最热门)order="sort desc":按后台自定义排序(默认行为) 您可以根据需求选择合适的排序方式。
limit(显示数量)limit参数控制一次性获取和显示的文档数量。例如,limit="10"将只显示前10条文档。它还支持“偏移量”模式,例如limit="2,10"表示从第2条文档开始,获取10条数据。type(列表类型) 这是archiveList一个非常重要的参数,它决定了列表的用途和行为:type="list":默认值,只显示指定limit数量的文档,不涉及分页。type="page":用于需要分页的文档列表。当使用此类型时,通常会配合pagination标签来实现分页功能。此外,q参数和自定义筛选参数也只在此类型下生效。type="related":用于获取相关文档列表。它通常在文档详情页使用,可以根据当前文档的关键词或后台手动关联的文档来推荐相关内容。
q(搜索关键词) 当type="page"时,q参数允许您指定搜索关键词来筛选文档列表。例如,q="seo"将只显示标题中包含“seo”关键词的文档。如果URL中已存在q=关键词的查询参数,archiveList也会自动读取并应用。自定义筛选参数 AnQiCMS支持通过URL的query参数对文档进行自定义筛选。如果您在内容模型中定义了可筛选的额外字段(例如“房屋类型”),用户就可以通过
url?房屋类型=住宅这样的方式来筛选文档。siteId(站点ID) 在多站点管理环境下,siteId参数允许您跨站点调用文档数据。combineId/combineFromId(组合文档ID) 这两个特殊参数用于创建复合型文档列表,例如“从A地到B地的旅游线路”。它们允许您将列表中的每条文档与另一个指定的文档进行组合,并在显示标题和链接时体现这种组合关系。
循环体内可用的文档字段
当archiveList获取到文档集合后,您可以使用for循环遍历每一条文档,并访问其各项字段信息。在循环中,item(或您自定义的变量名)代表当前文档对象,您可以这样访问其属性:{{item.Title}}、{{item.Link}}等。
以下是一些常用的文档字段:
Id: 文档的唯一ID。Title: 文档标题。Link: 文档的完整URL链接。Description: 文档的简要描述。Logo: 文档的封面首图URL。Thumb: 文档的封面缩略图URL。Images: 文档的组图(一个URL数组)。CreatedTime: 文档创建时间戳(需要stampToDate进行格式化)。Views: 文档的浏览量。Flag: 文档的推荐属性(需showFlag=true才能显示)。Category: 文档所属的分类对象(可直接访问item.Category.Title等)。- 文档模型设置的其他字段参数: 通过
{% archiveParams params with id=item.Id %}或直接访问{{item.自定义字段名}}来获取。
实践案例:多样化的内容展示
现在,让我们通过几个实际的代码片段来演示archiveList的强大功能。
示例一:展示最新文章列表
{# 显示最新发布的文章,仅限文章模型,前10条 #}
<div class="latest-articles">
<h2>最新文章</h2>
<ul>
{% archiveList articles with moduleId="1" order="id desc" limit="10" %}
{% for article in articles %}
<li>
<a href="{{ article.Link }}">
<img src="{{ article.Thumb }}" alt="{{ article.Title }}">
<h3>{{ article.Title }}</h3>
<p>{{ article.Description }}</p>
<span>发布于: {{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
</a>
</li>
{% empty %}
<li>暂无最新文章。</li>
{% endfor %}
{% endarchiveList %}
</ul>
</div>
示例二:带有分页的特定分类产品列表
假设我们要展示“电子产品”分类(ID为5)下的产品,并支持分页。
{# 显示电子产品分类下的产品,带分页功能 #}
<div class="product-category-list">
<h2>电子产品</h2>
{% archiveList products with moduleId="2" categoryId="5" type="page" limit="12" %}
<div class="product-grid">
{% for product in products %}
<div class="product-item">
<a href="{{ product.Link }}">
<img src="{{ product.Logo }}" alt="{{ product.Title }}">
<h3>{{ product.Title }}</h3>
<p>价格: ¥{{ product.Price }}</p>
</a>
</div>
{% empty %}
<p>该分类下暂无产品。</p>
{% endfor %}
</div>
{# 分页导航 #}
<div class="pagination-controls">
{% pagination pages with show="5" %}
<ul>
<li class="{% if pages.FirstPage.IsCurrent %}active{% endif %}"><a href="{{pages.FirstPage.Link}}">首页</a></li>
{% if pages.PrevPage %}
<li><a href="{{pages.PrevPage.Link}}">上一页</a></li>
{% endif %}
{% for p in pages.Pages %}
<li class="{% if p.IsCurrent %}active{% endif %}"><a href="{{p.Link}}">{{p.Name}}</a></li>
{% endfor %}
{% if pages.NextPage %}
<li><a href="{{pages.NextPage.Link}}">下一页</a></li>
{% endif %}
<li class="{% if pages.LastPage.IsCurrent %}active{% endif %}"><a href="{{pages.LastPage.Link}}">尾页</a></li>
</ul>
{% endpagination %}
</div>
{% endarchiveList %}
</div>
示例三:在文档详情页显示相关文章
在文章详情页,通常会推荐一些与当前文章相关的其他文章,以增加用户停留时间。
{# 在文章详情页显示相关文章,根据关键词推荐 #}
<div class="related-articles">
<h3>相关推荐</h3>
<ul>
{% archiveList relatedDocs with type="related" like="keywords" limit="5" %}
{% for doc in relatedDocs %}
<li>
<a href="{{ doc.Link }}">
<span>{{ doc.Title }}</span>
<span>({{ stampToDate(doc.CreatedTime, "2006-01-02") }})</span>
</a>
</li>
{% empty %}
<li>暂无相关推荐。</li>
{% endfor %}
{% endarchiveList %}
</ul>
</div>
总结
archiveList标签是AnQiCMS模板系统中一个极其强大和灵活的组件。通过熟练掌握其各项参数和循环体内可用的文档字段,您可以实现从简单的内容列表到复杂的筛选、搜索