如何在网站首页或分类页展示分类列表?

在安企CMS中管理和展示分类列表是网站内容组织的核心。无论是为了优化用户导航体验,还是为了提升搜索引擎的抓取效率,清晰地展示分类结构都至关重要。安企CMS提供了简洁而强大的模板标签,让您能够轻松在网站的首页、分类页或任何需要的地方,灵活地展示您的内容分类。

理解核心:categoryList 标签

安企CMS 模板系统中,用于获取分类列表的主要标签是 categoryList。这个标签能够帮助您按需提取网站的分类数据,并将其呈现在页面上。它的使用方式非常直观,通常以 {% categoryList 变量名称 with 参数 %} 开始,并以 {% endcategoryList %} 结束,中间则通过循环来遍历分类数据。

在使用 categoryList 标签时,有几个关键参数能帮助您精确控制要显示哪些分类:

  • moduleId: 这是最重要的参数之一,用于指定您想要获取哪个内容模型(如文章模型、产品模型等)下的分类。例如,moduleId="1" 可能代表文章模型,而 moduleId="2" 可能代表产品模型。在后台创建分类时,每个分类都会归属于一个特定的内容模型,所以在这里指定模型ID是确保获取正确分类的基础。
  • parentId: 这个参数用于控制分类的层级关系。
    • 当设置为 parentId="0" 时,您将获取到顶级分类。这在网站首页展示主要内容版块时非常有用。
    • 当设置为 parentId=item.Id 时(在循环内部),您可以获取当前分类下的子分类。这对于构建多级导航菜单或在父分类页显示其下属分类非常方便。
  • limit: 用于限制显示的分类数量,例如 limit="10" 会只显示前10个分类。
  • all=true: 如果您想获取指定模型下的所有分类,无论层级,可以使用此参数。

在网站首页展示顶级分类列表

网站首页通常需要展示网站的主要内容分类,引导用户进入不同的内容区域。这通常是网站导航或内容区块的一部分。

以下是一个在首页展示顶级分类列表的示例:

<nav class="main-nav">
    <ul>
        {% categoryList topCategories with moduleId="1" parentId="0" %}
            {% for item in topCategories %}
                <li class="nav-item {% if forloop.Counter == 1 %}first-item{% endif %}">
                    <a href="{{ item.Link }}" title="{{ item.Title }}">
                        {{ item.Title }}
                    </a>
                </li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</nav>

在这个例子中:

  • 我们定义了一个变量 topCategories 来存储获取到的分类数据。
  • moduleId="1" 假设是文章模型,确保我们获取的是文章分类。
  • parentId="0" 明确指示我们只获取最顶级的分类。
  • for 循环遍历 topCategories 中的每个 itemitem.Link 提供分类的链接地址,item.Title 提供分类的名称。
  • forloop.Counter 可以用来给第一个分类添加特殊的样式,例如 first-item

在分类页展示子分类列表或同级分类

当用户进入一个特定的分类页面时,您可能希望展示该分类的子分类,以便用户进一步细化浏览范围;或者显示与当前分类同级的其他分类,方便用户切换。

展示子分类列表:

假设您正在访问一个父分类页面,并希望在其下方显示其所有子分类。

{# 假设当前页面是一个分类页面,可以直接获取到当前分类的ID #}
<div class="sub-categories">
    <h3>探索更多分类</h3>
    <ul>
        {% categoryList subCategories with parentId=category.Id %} {# category.Id 动态获取当前分类的ID #}
            {% for item in subCategories %}
                <li>
                    <a href="{{ item.Link }}" title="{{ item.Title }}">
                        {{ item.Title }}
                        {% if item.HasChildren %} ({{ item.ArchiveCount }}) {% endif %} {# 如果有子分类,显示其下文档数量 #}
                    </a>
                </li>
            {% empty %}
                <li>当前分类下没有子分类。</li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</div>

这里:

  • parentId=category.Id 会动态地获取当前访问分类的ID,并以此为父级来获取其子分类。
  • item.HasChildren 是一个布尔值,可以用来判断当前分类是否有下级分类,从而进行一些条件展示或交互设计。
  • item.ArchiveCount 会显示该分类下直接包含的文档数量,帮助用户了解分类内容量。

结合文档列表展示分类:

一个更常见的需求是在首页或某个特定页面,遍历主要分类,并在每个分类下显示几篇最新的文章或产品。

<section class="featured-content">
    {% categoryList mainSections with moduleId="1" parentId="0" limit="4" %} {# 获取前4个顶级文章分类 #}
        {% for category in mainSections %}
            <article class="content-block">
                <h3><a href="{{ category.Link }}">{{ category.Title }}</a></h3>
                <ul class="article-list">
                    {% archiveList articlesInCategory with categoryId=category.Id type="list" limit="5" %} {# 获取当前分类下最新的5篇文章 #}
                        {% for article in articlesInCategory %}
                            <li>
                                <a href="{{ article.Link }}" title="{{ article.Title }}">
                                    <img src="{{ article.Thumb }}" alt="{{ article.Title }}" />
                                    <h4>{{ article.Title }}</h4>
                                    <p>{{ article.Description|truncatechars:80 }}</p>
                                </a>
                            </li>
                        {% empty %}
                            <li>该分类下暂无文章。</li>
                        {% endfor %}
                    {% endarchiveList %}
                </ul>
                <div class="view-more">
                    <a href="{{ category.Link }}">查看更多 &raquo;</a>
                </div>
            </article>
        {% endfor %}
    {% endcategoryList %}
</section>

此示例展示了如何将 categoryListarchiveList 标签结合使用:

  • 首先,使用 categoryList 获取顶级分类(mainSections)。
  • mainSections 的循环内部,再次使用 archiveList 标签,通过 categoryId=category.Id 参数,将当前分类的ID传递给 archiveList,从而获取该分类下的文档。
  • type="list"limit="5" 控制显示最新5篇文章。
  • article.Thumb 显示文章缩略图,article.Description|truncatechars:80 则对文章简介进行截断显示,保持页面整洁。

灵活的模板定制

安企CMS支持模板的自定义命名,这意味着您可以为特定的分类设计专属的模板。在后台的“文档分类”设置中,您可以为某个分类指定一个“分类模板”,例如 download.html。当用户访问该分类时,系统会自动应用您指定的模板。

此外,如果您在模板设计时希望对分类列表进行更精细的控制,可以利用 item.Logoitem.Thumb 来显示分类的自定义图片,或者使用 item.Description 来展示分类的简介。

通过这些灵活的标签和参数,您可以在安企CMS中构建出符合各种业务需求和设计风格的分类展示效果,极大地提升网站的内容可发现性和用户体验。


常见问题 (FAQ)

  1. 问:如何让分类列表只显示特定内容模型(如文章或产品)下的分类,而不显示其他模型的分类?
    • 答: 您可以使用 categoryList 标签的 moduleId 参数来指定要获取的分类所属的内容模型ID。例如,`{% categoryList categories with moduleId=“1