在网站运营中,如何高效地组织和展示海量内容,是提升用户体验和网站可用性的关键。对于使用安企CMS(AnQiCMS)的朋友们来说,系统提供了强大的内容模型和模板标签功能,能够帮助我们轻松实现多层级的文档分类列表,并清晰地展示每个分类下关联的文档。
接下来,我们就一起探索如何在安企CMS中,利用这些功能,构建一个既有层次感又内容丰富的网站导航。
理解安企CMS的内容结构
在安企CMS中,内容主要围绕“内容模型”和“分类”两个核心概念构建。内容模型(如文章模型、产品模型)定义了内容的类型和其特有的字段,而分类则是这些内容模型下的组织结构。每一个文档(无论是文章还是产品)都会归属于一个特定的分类。
要显示不同层级的文档分类及其关联文档,我们主要会用到安企CMS的两个关键模板标签:categoryList 用于获取分类信息,以及 archiveList 用于获取文档列表。
获取顶层文档分类列表
首先,我们需要在模板中展示最顶级的分类。这通常是网站主导航的基础。我们可以使用 categoryList 标签,并通过 parentId="0" 来指定获取所有没有上级分类的顶级分类。同时,别忘了通过 moduleId 参数指定是获取文章模型(通常是 1)还是产品模型(通常是 2)的分类。
一个简单的例子,用来展示文章模型的顶级分类列表:
{% categoryList categories with moduleId="1" parentId="0" %}
<ul>
{% for item in categories %}
<li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
{% endfor %}
</ul>
{% endcategoryList %}
在这段代码中,categories 是我们为顶级分类列表定义的变量名,item 则是循环中每个分类的实例。item.Link 会自动输出该分类的访问链接,item.Title 则显示分类名称。
展示多层级的子分类
网站结构往往不止一层。安企CMS的 categoryList 标签支持嵌套使用,允许我们在顶级分类下进一步展示其子分类。这得益于 item 对象中的 HasChildren 字段,它可以判断当前分类是否有子分类。
如果一个分类有子分类,我们就可以在其内部再次调用 categoryList,并将当前分类的 Id 作为 parentId 传递给子分类的查询,这样就能逐层展开。
考虑一个两级分类的展示:
{% categoryList topCategories with moduleId="1" parentId="0" %}
<ul class="main-nav">
{% for category in topCategories %}
<li>
<a href="{{ category.Link }}">{{ category.Title }}</a>
{% if category.HasChildren %} {# 判断当前分类是否有子分类 #}
<ul class="sub-nav">
{% categoryList subCategories with parentId=category.Id %} {# 获取当前分类的子分类 #}
{% for subCategory in subCategories %}
<li><a href="{{ subCategory.Link }}">{{ subCategory.Title }}</a></li>
{% endfor %}
{% endcategoryList %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% endcategoryList %}
这样,我们就能在网站上看到清晰的二级分类导航结构了。如果需要更多层级,可以依照这个模式继续嵌套 categoryList。
关联并显示每个分类下的文档
仅仅展示分类名称还不够,用户更希望看到每个分类下具体的内容。这时,archiveList 标签就派上用场了。我们可以在循环展示分类的同时,调用 archiveList 来显示该分类下的文档。
关键在于将当前分类的 Id 传递给 archiveList 的 categoryId 参数,这样 archiveList 就会只获取属于当前分类的文档。为了页面整洁,通常我们会限制显示文档的数量,使用 limit 参数可以轻松实现。
例如,在每个分类下显示最新的5篇文档:
{% categoryList categories with moduleId="1" parentId="0" %}
<div class="category-section">
{% for cat in categories %}
<h3><a href="{{ cat.Link }}">{{ cat.Title }}</a></h3>
<ul class="document-list">
{% archiveList docs with type="list" categoryId=cat.Id limit="5" %} {# 获取当前分类下的5篇文档 #}
{% for doc in docs %}
<li><a href="{{ doc.Link }}">{{ doc.Title }}</a></li>
{% empty %} {# 如果当前分类下没有文档 #}
<li>暂无相关文档。</li>
{% endfor %}
{% endarchiveList %}
</ul>
{% endfor %}
</div>
{% endcategoryList %}
综合示例:构建完整的层级导航与内容列表
现在,让我们把上述概念结合起来,构建一个既能显示多级分类,又能显示每个分类下关联文档的完整示例。一个常见的需求是,如果分类有子分类,就显示子分类列表;如果没有子分类,就直接显示该分类下的文档。
”`twig {# 假设我们正在制作一个产品列表页面,产品模型的ID是2 #}