AnQiCMS的`categoryList`标签如何展示多层级分类结构并显示分类信息?

在安企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.Linkitem.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.IsCurrenttrue时,表示该分类就是当前页面所属的分类。你可以利用这个属性来添加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. 我想展示的分类属于不同的内容模型,例如同时展示文章分类和产品分类,