在安企CMS中管理网站内容,有时我们需要在首页或侧边栏等关键位置,清晰地展示特定内容模型的顶级分类列表。这不仅能有效引导访客浏览网站内容,提升用户体验,也是网站内容架构优化和搜索引擎友好的重要一环。借助AnQiCMS灵活的模板系统和强大的标签功能,实现这一需求既直接又高效。

理解核心:内容模型与分类

在安企CMS中,内容管理的核心在于“内容模型”。您可以根据业务需求创建不同的内容模型,例如“文章模型”用于发布博客、新闻,而“产品模型”则用于展示商品信息。每个内容模型都可以拥有独立的分类体系。要显示特定内容模型的顶级分类列表,首先要明确我们希望展示的是哪个内容模型的分类。

其次是“分类”概念,它是组织内容的基石。顶级分类指的是没有上级分类的分类,通常作为内容体系的最高层级。

关键工具:categoryList 模板标签

安企CMS的模板系统采用类似Django的语法,通过各种模板标签来获取和展示数据。对于获取分类列表,我们需要用到 categoryList 标签。这个标签专门设计用于获取分类数据,并提供了丰富的参数来精细控制输出结果。

其中,最关键的两个参数是:

  • moduleId:用于指定您要获取哪个内容模型下的分类。不同的内容模型在后台有唯一的ID。
  • parentId="0":这是一个非常重要的参数,它告诉系统我们只需要获取那些没有上级分类的,也就是“顶级分类”。

步骤详解:在首页或侧边栏展示顶级分类

第一步:确定内容模型ID

首先,我们需要知道目标内容模型的唯一ID。这通常在安企CMS的后台管理界面中查看。

  1. 登录安企CMS后台。
  2. 导航至“内容管理” -> “内容模型”。
  3. 在这里,您会看到所有已创建的内容模型列表,例如“文章模型”、“产品模型”等。每个模型都会有一个对应的ID(通常是数字)。例如,默认情况下,“文章模型”的ID可能为1,“产品模型”的ID可能为2。请记住您想要显示分类的模型ID。

第二步:选择合适的展示位置

您可以选择在首页主内容区域(index.html)、网站通用侧边栏(partial/aside.html 或类似名称的文件,具体取决于您的模板结构),或者页头、页脚等位置显示分类列表。如果列表是通用性的,且需要在多个页面复用,建议将其放在一个独立的模板片段文件中(例如 partial/top_categories.html),然后通过 {% include "partial/top_categories.html" %} 标签将其引入到需要显示的页面。这种模块化的做法能让您的模板代码更加整洁和易于维护。

第三步:编写模板代码

现在,我们来编写实际的模板代码。以下是一个通用的代码示例,演示如何获取“文章模型”的顶级分类,并将其展示为一个带链接的列表。

假设我们要在侧边栏显示“文章模型”(其ID假设为1)的顶级分类列表:

<div class="sidebar-block">
    <h3>文章分类</h3>
    <ul>
        {% categoryList categories with moduleId="1" parentId="0" %}
            {% for item in categories %}
                <li class="category-item">
                    <a href="{{ item.Link }}">{{ item.Title }}</a>
                    {# 如果需要,可以判断当前分类是否有子分类,并显示一个指示符 #}
                    {% if item.HasChildren %}
                        <span class="has-children-indicator">›</span>
                    {% endif %}
                </li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</div>

代码解析:

  • {% categoryList categories with moduleId="1" parentId="0" %}:这是核心标签,它会从ID为1的内容模型中,获取所有顶级分类,并将结果存储在名为 categories 的变量中。
  • {% for item in categories %}:遍历 categories 变量中的每一个分类数据。
  • item.Link:输出当前分类的URL链接。
  • item.Title:输出当前分类的名称。
  • item.HasChildren:这是一个布尔值,如果当前分类下有子分类,它会返回 true。您可以利用这个特性,为有子分类的项添加不同的样式或图标。
  • {% endcategoryList %}categoryList 标签的结束符,包裹在其中的是列表的循环内容。

如果您希望在每个顶级分类下方,再显示该分类下的几篇最新文章,您可以这样扩展代码(假设您想显示3篇文章):

<div class="sidebar-block">
    <h3>文章分类</h3>
    <ul>
        {% categoryList categories with moduleId="1" parentId="0" %}
            {% for item in categories %}
                <li class="top-category-item">
                    <a href="{{ item.Link }}">{{ item.Title }}</a>
                    {% if item.HasChildren %}
                        <span class="has-children-indicator">›</span>
                    {% endif %}
                    {# 显示该顶级分类下的最新文章 #}
                    <ul class="sub-articles">
                        {% archiveList articles with categoryId=item.Id type="list" limit="3" %}
                            {% for article in articles %}
                                <li><a href="{{ article.Link }}">{{ article.Title }}</a></li>
                            {% empty %}
                                <li>暂无文章</li>
                            {% endfor %}
                        {% endarchiveList %}
                    </ul>
                </li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</div>

扩展代码解析:

  • {% archiveList articles with categoryId=item.Id type="list" limit="3" %}:这是一个嵌套的 archiveList 标签,它会在当前分类(由 item.Id 决定)下,获取最新的3篇文章,并存储在 articles 变量中。
  • type="list":表示获取一个普通的列表,而不是分页列表。
  • limit="3":限制只显示3篇文章。
  • {% empty %} ... {% endarchiveList %}:如果 archiveList 没有获取到任何文章,则会显示“暂无文章”。

通过这样的代码组织,您就可以轻松地在网站的任何位置显示特定内容模型的顶级分类及其关联内容,极大地丰富了网站的内容展示形式。

实用建议

  • 样式控制:上述代码仅展示了结构,您需要结合CSS样式来美化分类列表的显示,使其符合您的网站设计。
  • 缓存更新:在修改模板代码后,如果前台页面没有立即生效,请尝试清理安企CMS的系统缓存,以确保最新代码被加载。
  • 模块化引用:如果您的网站有多个侧边栏或不同页面需要显示类似的分类列表,可以考虑将上述代码保存为单独的模板文件(例如partial/top_categories.html),然后通过{% include "partial/top_categories.html" %}在需要的地方引用,提高代码复用性和维护效率。

安企CMS的模板标签系统提供了极大的灵活性,让您能够根据具体需求,随心所欲地组织和展示网站内容。掌握这些基本方法,您将能更好地发挥AnQiCMS的潜力。


常见问题 (FAQ)

Q1: 如何在顶级分类下进一步显示其子分类列表? A1: 若要在顶级分类下显示其子分类,您可以在 {% for item in categories %} 循环内部,再次使用 `category