在AnQiCMS中,灵活地获取并展示指定内容模型的分类列表,是构建清晰网站结构和良好用户体验的关键。无论是产品展示、文章归档还是服务介绍,分类列表都扮演着重要的导航角色。AnQiCMS强大的模板标签系统,让这一过程变得直观且高效。
核心标签:categoryList的妙用
在AnQiCMS的模板设计中,我们主要依靠categoryList这个强大的标签来获取分类数据。它允许我们根据不同的需求,比如指定内容模型、父级分类、显示数量等,来筛选和组织要展示的分类信息。
categoryList标签的基本结构通常是这样的:
{% categoryList categories with moduleId="1" parentId="0" %}
{# 在这里循环显示分类数据 #}
{% endcategoryList %}
其中,categories是我们为获取到的分类列表指定的一个变量名,你可以根据自己的习惯来命名。with后面跟着的是一系列参数,用于精细控制我们想要获取的分类数据。
精准定位:关键参数详解
要获取“指定内容模型”的分类列表,moduleId参数是不可或缺的。
moduleId:指定内容模型 每个在AnQiCMS后台创建的内容模型(例如文章模型、产品模型、自定义模型)都有一个唯一的ID。通过将moduleId设置为对应模型的ID,我们可以确保只获取到该模型下的分类。比如,文章模型通常ID为1,产品模型ID为2。如果你想获取产品模型的分类,就可以写成moduleId="2"。parentId:构建层级结构 分类往往不是扁平的,而是具有层级关系的。parentId参数就是用来控制获取哪个层级的分类的:parentId="0":这会获取指定模型下的所有顶级分类。这是最常用的一种设置,通常用于主导航或侧边栏的主分类显示。parentId=item.Id:当你在一个循环中获取了父级分类后,可以将当前循环到的父级分类的Id传递给子级的categoryList,从而获取该父级分类下的所有子分类。这对于构建多级下拉菜单或树形分类结构非常有用。parentId="parent":这个参数在特定情况下,比如在某个分类的页面中,用于获取当前分类的同级(兄弟)分类。
limit:控制显示数量 如果你只想显示一部分分类,例如首页只显示最热门的5个分类,可以使用limit="5"来限制返回的数量。siteId:多站点下的数据调用 在多站点管理的环境中,如果你想调用其他站点的数据,可以通过siteId参数来指定目标站点。对于大多数单站点用户而言,这个参数通常无需设置。all=true:获取所有分类 虽然本主题聚焦于“指定内容模型”,但了解all=true这个参数也很有帮助。它会获取所有内容模型下的所有分类。然而,为了避免数据混乱,通常建议结合moduleId来精确筛选。
循环展现:将数据呈现在页面上
获取到分类列表后,我们通常需要通过{% for %}循环标签来逐一展示它们。categoryList标签会返回一个包含多个分类对象的数组,每个对象都带有丰富的属性,供我们在模板中使用:
item.Title:分类的名称。item.Link:分类的访问链接。item.Description:分类的简介。item.Thumb或item.Logo:分类的缩略图或大图地址,如果后台有设置的话。item.Id:分类的唯一ID。item.HasChildren:一个布尔值,表示该分类是否拥有子分类,这在构建动态导航时非常实用。item.IsCurrent:表示当前分类是否是正在访问的页面对应的分类,可以用于高亮显示导航。
实战演练:构建分类列表
让我们通过几个实用的例子,看看如何在页面上获取并显示指定内容模型的分类列表。
场景一:显示“文章模型”下的所有顶级分类
假设你的文章模型ID是1,你需要在网站首页或文章列表页显示所有文章的顶级分类,作为主要导航。
<nav class="main-category-nav">
<ul>
{% categoryList categories with moduleId="1" parentId="0" %}
{% for item in categories %}
<li {% if item.IsCurrent %}class="active"{% endif %}>
<a href="{{ item.Link }}">{{ item.Title }}</a>
</li>
{% endfor %}
{% endcategoryList %}
</ul>
</nav>
这段代码会获取文章模型下的所有一级分类,并为当前访问的分类添加active样式。
场景二:构建“产品模型”的多级导航菜单
如果你的网站有复杂的“产品模型”(ID为2),需要展示多级分类菜单,并且希望只有有子分类的菜单才展开。
<ul class="product-menu">
{% categoryList topCategories with moduleId="2" parentId="0" %}
{% for topItem in topCategories %}
<li {% if topItem.IsCurrent %}class="active"{% endif %}>
<a href="{{ topItem.Link }}">{{ topItem.Title }}</a>
{# 判断当前分类是否有子分类 #}
{% if topItem.HasChildren %}
<ul class="sub-menu">
{% categoryList subCategories with parentId=topItem.Id %}
{% for subItem in subCategories %}
<li {% if subItem.IsCurrent %}class="active"{% endif %}>
<a href="{{ subItem.Link }}">{{ subItem.Title }}</a>
</li>
{% endfor %}
{% endcategoryList %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% endcategoryList %}
这里,我们首先获取顶级产品分类,然后在每个顶级分类的循环中,通过topItem.HasChildren判断是否有子分类。如果有,再嵌套一个categoryList标签,将父级分类的ID (topItem.Id) 传入parentId参数,以获取并显示其子分类。
**场景三