分类列表标签`categoryList`如何获取并显示文章、产品分类信息?

📅 👁️ 78

在AnQiCMS中管理和展示网站内容,分类信息扮演着至关重要的角色。无论是组织产品目录,还是整理文章专题,清晰的分类结构都能极大提升用户体验和网站的导航效率。而categoryList标签正是AnQiCMS提供的一把利器,帮助我们灵活地获取并展示这些分类信息。

categoryList标签的主要作用是检索并循环显示您网站中的分类数据。它能根据您的需求,获取特定内容模型(如文章或产品)下的顶级分类、子分类,甚至所有分类,并将这些数据呈现在网站页面上。

如何使用categoryList获取分类信息

要使用categoryList标签,您首先需要在模板文件中指定它,并通常会搭配一个循环结构来遍历获取到的分类数据。它的基本结构如下:

{% categoryList 变量名称 with 参数 %}
    {% for item in 变量名称 %}
        {# 在这里显示每个分类的详细信息 #}
    {% endfor %}
{% endcategoryList %}

其中,变量名称是您为获取到的分类列表自定义的一个名字,例如categoriesproductCategories参数则是您用来筛选和控制获取哪些分类的关键。

接下来,我们来看看几个常用的参数,它们将决定您获取到什么样的分类列表:

  1. moduleId:指定内容模型 这是最核心的参数之一。AnQiCMS支持多种内容模型(例如,默认的文章模型和产品模型),您需要明确告诉系统您想获取哪种模型下的分类。

    • 如果您想获取文章分类,通常将moduleId设置为1
    • 如果您想获取产品分类,通常将moduleId设置为2。 例如:moduleId="1"将只获取文章模型下的所有分类。
  2. parentId:控制层级关系 这个参数用来指定您要获取的分类的父级ID,从而实现多级分类的展示。

    • 要获取所有顶级分类,将parentId设置为0。这是构建主导航菜单的常用方式。
    • 要获取某个特定分类下的子分类,您可以将parentId设置为该父分类的Id(例如parentId=item.Id,这通常在循环中用于显示二级或多级菜单)。
    • 如果您想在当前分类页面显示其兄弟分类(即同级别的其他分类),可以设置parentId="parent"
  3. all:获取所有分类 如果您需要获取某个moduleId下的所有分类,无论层级如何,都可以将all参数设置为true。例如:all=true。如果您同时指定了moduleId,它将获取该模型下的所有分类。

  4. limit:控制显示数量 如果您只想显示固定数量的分类,可以使用limit参数来限制。比如limit="5"将只显示前5个分类。它还支持更高级的offset模式,例如limit="2,10"表示从第2个分类开始,获取10个分类。

  5. siteId:多站点数据调用 在多站点管理场景下,如果您需要调用其他站点的数据,可以通过siteId来指定。一般情况下,无需设置此参数。

您可以显示哪些分类信息?

在循环遍历categoryList获取到的每一个item(即每个分类)时,您可以访问多种属性来展示分类的详细信息,例如:

  • Id:分类的唯一ID。
  • Title:分类的名称,通常用于显示在导航或列表中。
  • Link:分类的URL链接,直接点击可跳转到该分类页面。
  • Description:分类的简短描述。
  • Content:分类的详细内容,可能包含HTML格式,显示时可能需要|safe过滤器。
  • ParentId:该分类的父级ID。
  • Logo:分类的缩略图大图地址。
  • Thumb:分类的缩略图地址。
  • HasChildren:一个布尔值,表示该分类是否有下级分类,非常适合动态菜单的展开/收起判断。
  • IsCurrent:一个布尔值,表示当前分类是否为当前访问页面所处的分类,常用于高亮显示当前导航项。
  • ArchiveCount:该分类下(包含子分类)的文章或产品数量。

实际应用示例

示例1:获取并显示文章模型的顶级分类列表

假设您想在网站顶部导航显示文章模型的几个主要分类:

<nav>
    <ul class="main-nav">
        {% categoryList articleCategories with moduleId="1" parentId="0" limit="5" %}
            {% for item in articleCategories %}
                <li class="nav-item {% if item.IsCurrent %}active{% endif %}">
                    <a href="{{ item.Link }}">{{ item.Title }}</a>
                </li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</nav>

这段代码会获取文章模型下ID为0(即顶级)的最多5个分类,并为当前页面的分类添加active样式。

示例2:显示产品模型的两级分类菜单

如果您有一个产品中心,需要显示主分类及其下的二级分类:

<div class="product-menu">
    {% categoryList mainProductCategories with moduleId="2" parentId="0" %}
        {% for mainCat in mainProductCategories %}
            <div class="main-category">
                <h3><a href="{{ mainCat.Link }}">{{ mainCat.Title }}</a></h3>
                {% if mainCat.HasChildren %}
                    <ul class="sub-categories">
                        {% categoryList subProductCategories with parentId=mainCat.Id %}
                            {% for subCat in subProductCategories %}
                                <li class="sub-item">
                                    <a href="{{ subCat.Link }}">{{ subCat.Title }} ({{ subCat.ArchiveCount }})</a>
                                </li>
                            {% endfor %}
                        {% endcategoryList %}
                    </ul>
                {% endif %}
            </div>
        {% endfor %}
    {% endcategoryList %}
</div>

这里,我们首先获取产品模型下的所有顶级分类。在循环中,通过mainCat.HasChildren判断是否有子分类,如果有,则再次使用categoryList并传入mainCat.Id来获取二级分类,并显示每个子分类下的产品数量。

示例3:在分类页面显示当前分类下的文章列表

在一个文章分类列表页(例如/category/news/),您可能想在页面上方显示当前分类的描述,然后列出该分类下的文章。

<article>
    <h1 class="category-title">{% categoryDetail with name="Title" %}</h1>
    <div class="category-description">{% categoryDetail with name="Description" %}</div>

    <ul class="article-list">
        {% archiveList articles with type="page" limit="10" %} {# categoryId参数会智能读取当前页面分类ID #}
            {% for article in articles %}
                <li>
                    <a href="{{ article.Link }}">
                        <h2>{{ article.Title }}</h2>
                        <p>{{ article.Description }}</p>
                        <span class="date">{{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
                    </a>
                </li>
            {% empty %}
                <li>当前分类下没有文章。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
    {# 如果是分页列表,别忘了加上分页标签 #}
    {% pagination pages with show="5" %}
        {# 分页HTML结构 #}
    {% endpagination %}
</article>

在这个例子中,{% categoryDetail with name="Title" %}{% categoryDetail with name="Description" %}会智能地获取当前页面的分类标题和描述。而archiveList标签在type="page"模式下,会根据当前页面的分类ID自动获取文章列表。

总结

categoryList标签是AnQiCMS模板开发中不可或缺的一部分,它让您能够以高度灵活的方式展示网站的分类结构。通过合理运用moduleIdparentId等参数,并结合各个分类属性,您可以构建出用户友好且功能强大的导航和内容组织体系。


常见问题 (FAQ)

1. 我想在模板中获取所有文章分类和产品分类,不区分层级,应该怎么做?

您可以使用两个独立的categoryList标签,分别指定文章和产品模型的moduleId,并将all参数设置为true。例如:

{# 获取所有文章分类 #}
{% categoryList allArticleCategories with moduleId="1" all=true %}
    {% for cat in allArticleCategories %}
        <a href="{{ cat.Link }}">{{ cat.Title }}</a>
    {% endfor %}
{% endcategoryList %}

{# 获取所有产品分类 #}
{% categoryList allProductCategories with moduleId="2" all=true %}
    {% for cat in allProductCategories %}
        <a href="{{ cat.Link }}">{{ cat.Title }}</a>
    {% endfor %}
{% endcategoryList %}

2. 在一个分类详情页,如何只显示当前分类的子分类,而不是该模型的所有子分类?

在分类详情页面,AnQiCMS会自动识别当前页面的分类ID。您可以使用这个特性,将parentId参数设置为当前分类的ID来获取其直接子分类。

{# 假设当前页面是某个父分类的详情页 #}
<ul class="sub-category-list">
    {% categoryList subCategories with parentId=category.Id %} {# 这里的 category.Id 会自动指向当前分类的ID #}
        {% for subCat in subCategories %}
            <li><a href="{{ subCat.Link }}">{{ subCat.Title }}</a></li>
        {% endfor %}
    {% empty %}
        <li>当前分类没有子分类。</li>
    {% endcategoryList %}
</ul>

请注意,当您在categoryList标签外部调用{{category.Id}}时,category通常是指当前页面上下文中的分类对象。如果当前上下文没有明确的category对象,您可能需要先使用categoryDetail来获取当前分类信息。

3. 如何为分类设置自定义字段并在模板中显示?

在AnQiCMS后台,您可以为内容模型(例如文章模型或产品模型)的分类添加自定义字段。一旦添加并填写了数据,这些自定义字段在模板中可以直接通过分类item对象来访问,或者通过categoryDetail标签来获取。

例如,如果您为分类添加了一个名为banner_image的自定义字段:

{# 在 categoryList 循环中直接访问 #}
{% categoryList categories with moduleId="1" parentId="0" %}
    {% for item in categories %}
        <a href="{{ item.Link }}">
            {{ item.Title }}
            {% if item.banner_image %}
                <img src="{{ item.banner_image }}" alt="{{ item.Title }} Banner">
            {% endif %}
        </a>
    {% endfor %}
{% endcategoryList %}

{# 或者在分类详情页通过 categoryDetail 标签访问 #}
{% categoryDetail currentCategory with name="banner_image" %}
{% if currentCategory %}
    <img src="{{ currentCategory }}" alt="Current Category Banner">
{% endif %}

请确保自定义字段的名称(例如banner_image)与您在后台设置的“调用字段”名称一致。

相关文章

面包屑导航标签`breadcrumb`如何动态生成并显示当前页面的导航路径?

在网站运营中,清晰的导航路径对于用户体验和搜索引擎优化都至关重要。想象一下,用户在您的网站上浏览,就像在陌生城市中探索一样,如果能随时看到自己身处何处,以及来时的路,那将极大提升他们的信心和浏览效率。这就是面包屑导航(Breadcrumb Navigation)的价值所在。它就像您手中的一串指路面包屑,为用户提供了从首页到当前页面的明确路径。 AnQiCMS 作为一款高效的内容管理系统

2025-11-07

导航列表标签`navList`如何构建和显示网站的层级导航菜单?

在网站运营中,清晰、便捷的导航菜单是用户体验的关键,也是搜索引擎理解网站结构的重要依据。安企CMS(AnQiCMS)提供了强大的导航管理功能,而其模板标签`navList`则是前端构建这些层级导航菜单的核心工具。 ### `navList`标签的核心作用与工作原理 `navList`标签的主要职责是从安企CMS的后端获取你预先配置好的导航链接数据,并将其呈现在网站前端

2025-11-07

万能TDK标签`tdk`如何为不同页面生成并显示个性化的SEO标题、关键词和描述?

在网站运营中,优化搜索引擎(SEO)是获取自然流量的关键环节。而TDK(Title、Description、Keywords)作为页面呈现在搜索引擎结果中的第一印象,其重要性不言而喻。它不仅影响着网站在搜索结果页的排名,更直接决定了用户是否会点击进入您的网站。 AnQiCMS深知TDK对SEO的价值,因此提供了一个极为灵活且强大的“万能TDK标签”——`tdk`。这个标签的“万能”之处在于

2025-11-07

联系方式标签`contact`如何动态展示企业联系信息?

在网站运营中,清晰、准确且易于更新的企业联系信息是至关重要的一环。想象一下,如果您的联系电话或邮箱需要更新,您是否需要手动修改网站上每一个包含这些信息的页面?这不仅费时费力,还可能因为遗漏而导致信息不一致,影响用户体验和品牌形象。 安企CMS(AnQiCMS)深谙此道,为解决这一痛点,专门提供了 **联系方式标签 `contact`**。这个标签的巧妙之处在于

2025-11-07

分类详情标签`categoryDetail`如何获取并显示特定分类的详细信息?

在安企CMS的网站内容运营中,我们经常需要精确地获取并展示特定分类的详细信息。无论是展示分类的名称、描述,还是其关联的图片、内容,`categoryDetail`标签都能提供灵活且强大的支持,帮助我们构建动态丰富的分类页面。 ### `categoryDetail`标签的核心功能与基本用法 `categoryDetail`标签旨在获取单个分类的详尽数据。它的基本结构简洁明了

2025-11-07

单页面列表标签`pageList`和单页面详情标签`pageDetail`如何管理和显示静态页面内容?

在网站运营中,静态页面扮演着不可或缺的角色,它们通常承载着如“关于我们”、“联系方式”、“隐私政策”、“服务介绍”等相对固定且不常更新的核心内容。安企CMS为这些页面的管理与展示提供了两大利器:单页面列表标签`pageList`和单页面详情标签`pageDetail`。这两者协同工作,让您能够轻松驾驭网站的静态内容,无论是构建导航、展示服务列表,还是呈现详细的企业介绍,都能得心应手。 ###

2025-11-07

文档列表标签`archiveList`如何按条件筛选和分页显示文章或产品?

在安企CMS中,当我们希望在网站页面上展示一系列文章、产品或其他内容时,`archiveList` 标签是我们不可或缺的强大工具。它不仅能帮助我们灵活地提取和展示各类内容,还能根据多种条件进行精细筛选,并优雅地实现内容的分页显示,从而极大提升用户浏览体验和网站的信息组织效率。 ### 灵活获取内容:`archiveList` 的基础用法 `archiveList`

2025-11-07

文档详情标签`archiveDetail`如何获取并显示单篇文档的完整内容?

在安企CMS中,展示单篇文档的完整内容是网站运营的基础。无论您是发布一篇新闻文章、一个产品详情,还是一项服务介绍,核心都在于如何高效且准确地将后台录入的数据呈现在用户面前。这正是`archiveDetail`标签及其相关机制发挥作用的地方。 ### 理解`archiveDetail`:获取单篇文档的核心 当我们谈论获取单篇文档的完整内容时,首先要明确一点

2025-11-07