在安企CMS中,网站分类是组织内容的基石,无论是文章、产品还是其他自定义模型,清晰的分类结构都能极大提升用户体验和网站的SEO效果。安企CMS提供了强大的categoryList标签,让我们可以灵活地展示单层或多层级的分类结构,并轻松获取分类的各项详细信息。
掌握categoryList标签的基础用法
要展示分类列表,我们首先需要用到categoryList标签。它的核心作用是从后台获取分类数据,并以列表形式呈现在前端页面。最基本的用法通常会指定要获取哪个内容模型(moduleId)的分类,以及从哪个层级开始(parentId)。
举个例子,如果我们想展示文章模型(假设moduleId为1)的所有顶级分类,我们可以这样编写模板代码:
{% 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是我们自定义的变量名,它会承载从后台获取到的分类数据列表。parentId="0"表示我们请求的是没有父级、也就是最高层级的分类。item是循环中的每一个分类对象,通过item.Link和item.Title,我们可以分别获取分类的链接和名称。
构建多层级分类结构
安企CMS的categoryList标签非常适合构建嵌套的多层级分类菜单。实现这一点,关键在于在循环内部再次调用categoryList标签,并将当前分类的ID作为子分类的parentId。同时,item.HasChildren这个字段能帮助我们判断当前分类是否有子分类,从而有条件地渲染子菜单。
例如,创建一个三层级的导航菜单可能会像这样:
<nav>
<ul class="main-nav">
{% categoryList topCategories with moduleId="1" parentId="0" %}
{% for item in topCategories %}
<li class="{% if item.HasChildren %}has-dropdown{% endif %}">
<a href="{{ item.Link }}">{{ item.Title }}</a>
{% if item.HasChildren %}
<ul class="sub-nav">
{% categoryList subCategories with parentId=item.Id %} {# 使用当前分类的ID作为父ID #}
{% for inner1 in subCategories %}
<li class="{% if inner1.HasChildren %}has-dropdown{% endif %}">
<a href="{{ inner1.Link }}">{{ inner1.Title }}</a>
{% if inner1.HasChildren %}
<ul class="third-nav">
{% categoryList thirdCategories with parentId=inner1.Id %} {# 再次嵌套获取第三级分类 #}
{% for inner2 in thirdCategories %}
<li>
<a href="{{ inner2.Link }}">{{ inner2.Title }}</a>
</li>
{% endfor %}
{% endcategoryList %}
</ul>
{% endif %}
</li>
{% endfor %}
{% endcategoryList %}
</ul>
{% endif %}
</li>
{% endfor %}
{% endcategoryList %}
</ul>
</nav>
这段代码首先获取所有顶级分类,然后在每个顶级分类的循环内部,如果item.HasChildren为真,就会再调用一次categoryList来获取其子分类。这个过程可以根据实际需求进行多层嵌套,完美呈现网站的层级结构。
值得一提的是,item.Spacer这个字段在后台分类列表页显示时,可能会包含用于视觉缩进的前缀,比如|--。在前端模板中,如果你想保留这种视觉层级感,可以使用{{item.Spacer|safe}}将其输出在分类标题之前。
展示分类的详细信息
除了名称和链接,安企CMS的categoryList标签还能让我们获取分类的许多其他实用信息。在for循环中的item对象,包含了丰富的数据字段,可以帮助我们构建更丰富的分类展示。
一些常用的分类信息包括:
item.Id: 分类ID,是识别分类的唯一标识。item.Description: 分类的简介或描述文字,常用于页面头部或列表详情。item.Content: 分类的详细内容,如果后台有填写的话,需要使用{{ item.Content|safe }}来确保HTML内容正确渲染。item.Logo: 分类的缩略图大图地址,可以用于Banner或醒目位置。item.Thumb: 分类的缩略图地址,通常用于列表展示。item.ArchiveCount: 该分类下的文档数量,有助于提供数据洞察。item.IsCurrent: 判断当前分类是否是当前页面的分类,可用于高亮显示当前导航项。
比如,我们可能需要在分类列表旁边显示分类的简介和缩略图:
{% categoryList categories with moduleId="1" parentId="0" %}
<div class="category-grid">
{% for item in categories %}
<div class="category-card">
<a href="{{ item.Link }}">
{% if item.Thumb %}
<img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="category-thumb">
{% endif %}
<h3 class="category-title">{{ item.Title }}</h3>
</a>
{% if item.Description %}
<p class="category-desc">{{ item.Description }}</p>
{% endif %}
<span class="article-count">文档数量: {{ item.ArchiveCount }}</span>
</div>
{% endfor %}
</div>
{% endcategoryList %}
如果分类有自定义字段,例如后台为分类添加了一个“分类负责人”的字段,其调用字段为manager,那么你同样可以通过{{ item.manager }}来直接获取其值,或者通过循环item.Extra来获取所有自定义字段。
通过灵活运用categoryList标签及其提供的各项字段,我们可以在安企CMS中构建出既美观又实用的多层级分类结构,为网站用户提供直观且高效的导航体验。
常见问题 (FAQ)
1. 如何在分类列表中,判断当前分类是不是正在浏览的页面所属的分类,并进行高亮显示?
在categoryList循环中,每个item对象都包含一个IsCurrent布尔值。当item.IsCurrent为true时,表示该分类就是当前页面所属的分类。你可以利用这个属性来添加CSS类,实现高亮效果。
例如:
{% categoryList categories with moduleId="1" parentId="0" %}
<ul>
{% for item in categories %}
<li class="{% if item.IsCurrent %}active-category{% endif %}">
<a href="{{ item.Link }}">{{item.Title}}</a>
</li>
{% endfor %}
</ul>
{% endcategoryList %}
**2. 我想展示的分类属于不同的内容模型,例如同时展示文章分类和产品分类,