在安企CMS中,高效地管理和展示网站内容是提升用户体验和搜索引擎排名的关键。为了实现这一目标,我们经常需要根据特定的分类或内容模型来组织和显示文档列表。这时,archiveList标签就成为了我们手中强大的工具。它能帮助我们灵活地从数据库中提取所需内容,并以多样化的方式呈现。
archiveList标签:内容列表的指挥家
archiveList标签是安企CMS模板中用于获取和展示文档列表的核心标签。无论是博客文章、产品介绍、新闻资讯,还是任何自定义内容模型下的文档,它都能根据我们设定的条件进行精确筛选、排序和展示。这个标签的强大之处在于它的灵活性和丰富的参数选项,让我们能够像指挥家一样,调度网站上的所有内容。
让我们深入了解如何利用archiveList标签来获取并显示指定分类和模型下的文档列表。
精准定位:通过模型和分类筛选内容
在安企CMS中,内容模型(Module)就像是一个内容的“模具”,定义了不同类型内容的结构和字段(例如,“文章”模型可能有“作者”、“发布日期”字段,“产品”模型可能有“价格”、“库存”字段)。而分类(Category)则是内容的“档案柜”,用于对同类型或跨类型的内容进行归类整理。archiveList标签通过moduleId和categoryId这两个关键参数,让我们可以精准地锁定目标内容。
指定内容模型(
moduleId) 首先,如果您的网站有多种内容类型,比如文章和产品,您可以通过moduleId参数来指定要获取哪个内容模型下的文档。每个内容模型在后台都有一个唯一的ID。例如,如果您想获取所有“文章”模型的文档,通常会设置moduleId="1"(具体ID请根据您的后台实际配置为准)。这样,archiveList就只会拉取文章相关的数据,忽略其他模型的内容。筛选文档分类(
categoryId) 在确定了内容模型之后,我们往往还需要进一步细化到某个或某几个特定的分类。categoryId参数允许您指定一个或多个分类的ID。您可以传入单个ID,如categoryId="5",获取ID为5的分类下的所有文档。如果您需要获取多个分类的文档,可以用逗号将它们隔开,例如categoryId="5,8,12"。一个非常实用的技巧是,当您希望archiveList不要自动读取当前页面的分类ID,而是获取所有分类的文档时,可以明确指定categoryId="0"。反之,如果您正在一个分类页面,希望获取该分类及其子分类下的文档,通常无需指定categoryId,archiveList会智能地读取当前页面的分类信息。
灵活展示:列表类型与显示数量
archiveList标签提供了多种列表展示类型,以适应不同的页面需求:
非分页列表(
type="list") 当您只需要在一个页面上展示少量内容,例如首页的新闻头条、侧边栏的热门产品等,可以使用type="list"。这种模式下,结合limit参数来控制显示文档的数量,例如limit="10"将显示最近的10条文档。limit还支持偏移量模式,如limit="2,10",表示从第2条文档开始获取,总共获取10条。分页列表(
type="page") 对于需要展示大量内容且需要分页导航的页面,例如文章列表页、产品展示页,type="page"是理想的选择。在这种模式下,archiveList会根据当前页码和limit参数(同样用来定义每页显示数量)自动处理分页逻辑。当使用type="page"时,通常会搭配pagination标签来生成分页导航条,让用户能够轻松地浏览不同页的文档。相关文档(
type="related") 在文档详情页,您可能希望展示一些与当前文档相关的推荐内容。这时,type="related"就派上用场了。它会智能地根据当前文档的关键词或关联设置,推荐相似或关联的文档。
排序与更多控制
除了上述核心参数,archiveList还提供了一系列参数来进一步精细化您的内容列表:
排序方式(
order) 您可以根据自己的需求对文档进行排序。常用的排序方式包括按ID倒序(最新发布),如order="id desc";按浏览量倒序(最热门),如order="views desc";以及按后台自定义排序字段,如order="sort desc"。排除特定分类(
excludeCategoryId) 如果您需要获取某个模型或分类下的所有文档,但希望排除其中的一两个分类,可以使用excludeCategoryId参数,例如excludeCategoryId="3,7"。包含子分类内容(
child)child参数默认为true,表示获取指定分类时,会同时包含其子分类下的文档。如果您只想获取当前分类本身(不含子分类)的文档,可以将其设置为child=false。推荐属性(
flag) 安企CMS允许为文档设置多种推荐属性,如头条[h]、推荐[c]等。您可以使用flag="c"来只获取带有“推荐”属性的文档。
实践示例:构建动态文档列表
为了更好地理解这些参数的组合使用,我们来看几个常见的实际应用场景。
场景一:显示特定分类下的最新文章列表
假设您有一个分类ID为8的“公司新闻”分类,并且希望在首页展示最新的5条新闻:
<div>
<h3>最新公司新闻</h3>
<ul>
{% archiveList latestNews with moduleId="1" categoryId="8" type="list" limit="5" order="id desc" %}
{% for item in latestNews %}
<li>
<a href="{{item.Link}}">{{item.Title}}</a>
<span>{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
</li>
{% empty %}
<li>暂无公司新闻。</li>
{% endfor %}
{% endarchiveList %}
</ul>
</div>
这里,moduleId="1"假定为文章模型,categoryId="8"指定了“公司新闻”分类,type="list"和limit="5"控制了显示数量,order="id desc"确保是最新的内容。
场景二:展示带分页的产品列表
在一个产品展示页面,您可能需要按页显示所有产品,并提供分页导航:
<div class="product-list-container">
{% archiveList products with moduleId="2" type="page" limit="12" order="views desc" %}
{% for item in products %}
<div class="product-item">
<a href="{{item.Link}}">
<img src="{{item.Thumb}}" alt="{{item.Title}}">
<h4>{{item.Title}}</h4>
<p>浏览量: {{item.Views}}</p>
</a>
</div>
{% empty %}
<p>暂无产品信息。</p>
{% endfor %}
{% endarchiveList %}
<div class="pagination-area">
{% pagination pages with show="5" %}
<a href="{{pages.FirstPage.Link}}">首页</a>
{% if pages.PrevPage %}<a href="{{pages.PrevPage.Link}}">上一页</a>{% endif %}
{% for item in pages.Pages %}<a class="{% if item.IsCurrent %}active{% endif %}" href="{{item.Link}}">{{item.Name}}</a>{% endfor %}
{% if pages.NextPage %}<a href="{{pages.NextPage.Link}}">下一页</a>{% endif %}
<a href="{{pages.LastPage.Link}}">尾页</a>
{% endpagination %}
</div>
</div>
在这个例子中,moduleId="2"假定为产品模型,type="page"启用了分页,limit="12"定义了每页显示12个产品,order="views desc"则按浏览量降序排列。随后的pagination标签生成了完整的翻页链接。
场景三:复杂的多级分类与文档混合展示
假设您需要在首页展示顶级分类(如“解决方案”)及其下的子分类,并在每个子分类下显示其对应的产品文档,如果没有子分类则直接显示顶级分类下的产品文档。
<div class="category-product-display">
{% categoryList topCategories with moduleId="2" parentId="0" %} {# 获取顶级产品分类 #}
{% for topCat in topCategories %}
<section>
<h2><a href="{{topCat.Link}}">{{topCat.Title}}</a></h2>
<div class="sub-category-or-products">
{% if topCat.HasChildren %} {# 如果有子分类,则显示子分类 #}
{% categoryList subCategories with parentId=topCat.Id %}
{% for subCat in subCategories %}
<div class="sub-category-block">
<h3><a href="{{subCat.Link}}">{{subCat.Title}}</a></h3>
<ul>
{% archiveList subCatProducts with type="list" categoryId=subCat.Id limit="4" %} {# 显示子分类下的产品 #}
{% for product in subCatProducts %}
<li><a href="{{product.Link}}">{{product.Title}}</a></li>
{% empty %}
<li>暂无产品。</li>
{% endfor %}
{% endarchiveList %}
</ul>
</div>
{% endfor %}
{% endcategoryList %}
{% else %} {# 如果没有子分类,直接显示顶级分类下的产品 #}
<ul>
{% archiveList topCatProducts with type="list" categoryId=topCat.Id limit="8" %}
{% for product in topCatProducts %}
<li><a href="{{product.Link}}">{{product.Title}}</a></li>
{% empty %}
<li>暂无产品。</li>
{% endfor %}
{% endarchiveList %}
</ul>
{% endif %}
</div>
</section>
{% endfor %}
{% endcategoryList %}
</div>
这个例子展示了archiveList与categoryList标签的嵌套使用,并结合了if条件判断来处理有无子分类的不同展示逻辑,极大地增强了模板的动态性和灵活性。
总结
archiveList标签是安企CMS内容运营的强大基石。通过熟练掌握其各类参数,并结合其他辅助标签(如categoryDetail、pagination等),您能够轻松地构建出结构清晰、功能强大且内容丰富多样的网站页面。灵活运用这些标签,将有助于提升您网站的内容组织能力和用户浏览体验。
常见问题 (FAQ)
Q1: 我如何知道一个分类的ID或内容模型的ID?
A1: 在安企CMS后台,您可以轻松找到这些ID。
对于分类ID:进入“内容管理” -> “文档分类”,在分类列表中,每条分类的名称旁边通常会显示其ID,或者点击“编辑”进入详情页面也能看到。
对于内容模型ID:进入“内容管理” -> “内容模型”,在模型列表中,每个模型的名称旁边也会显示其ID。这些ID是您在模板中使用moduleId和categoryId参数时的依据。
Q2: type="list"和type="page"在使用archiveList标签时有什么核心区别?
A2: 它们的主要区别在于是否处理分页逻辑。
type="list":主要用于获取一个固定数量的文档列表,不涉及分页。您需要通过limit参数明确指定要显示的文档数量。如果文档数量超出limit,多余的文档将不会被显示,且不会有分页导航。
type="page":用于获取支持分页的文档列表。它会根据当前的URL参数(如页码)自动计算并显示当前页的文档,并提供总页数、当前页