在网站运营中,清晰地展示内容分类不仅能帮助用户快速找到所需信息,更是提升网站可用性和搜索引擎优化(SEO)的关键环节。安企CMS(AnQiCMS)凭借其灵活的模板引擎,让我们可以轻松地在网站模板中动态调取并显示各类内容分类的名称、描述和链接。今天,我们就来深入了解如何在模板中实现这一目标,让您的网站内容展示更加生动和高效。
理解安企CMS中的内容分类数据
在安企CMS的后台管理系统中,我们为每篇文章或产品创建了相应的分类。这些分类不仅仅是一个简单的名称,它们还包含了丰富的元数据:比如用户友好的分类名称(Title)、详细的分类描述(Description)、用于SEO优化的关键词和别名,以及系统自动生成的访问链接(Link)。所有这些信息都储存在数据库中,并通过AnQiCMS的模板标签机制,可以被动态地提取和呈现在网站前端。
AnQiCMS的模板系统采用类似Django的语法,使用双花括号 {{变量}} 来输出变量值,以及 {% 标签 %} 结构来调用功能或进行逻辑控制。这使得即使是不具备深厚编程背景的运营者,也能通过学习简单的标签用法,实现高度定制化的内容展示。
核心标签:动态获取单个分类信息
要在模板中显示特定分类的名称、描述和链接,最常用的工具是 categoryDetail 标签。这个标签专门用于获取单个内容分类的详细信息。
基本用法
当您在分类列表页(例如 category/list.html 或 article/list-{分类ID}.html)中使用 categoryDetail 标签时,它会智能地识别当前页面的分类ID,并自动提取该分类的详细信息。您只需指定需要获取的字段名称即可:
{# 动态显示当前分类的名称 #}
<h1>{{% categoryDetail with name="Title" %}}</h1>
{# 动态显示当前分类的描述,注意使用 |safe 过滤器以解析HTML内容 #}
<div class="category-description">{{% categoryDetail with name="Description" %}|safe}}</div>
{# 动态显示当前分类的链接 #}
<a href="{{% categoryDetail with name="Link" %}}">查看更多</a>
这里,name="Title" 会输出分类的名称,name="Description" 会输出分类的描述,而 name="Link" 则会输出分类的访问链接。需要特别注意的是,如果您的分类描述中可能包含HTML富文本内容(比如加粗、图片等),那么在输出 Description 字段时,务必加上 |safe 过滤器。这是为了告诉模板引擎,这段内容是安全的,不需要进行HTML转义,从而能正确地渲染出富文本效果。
获取指定分类的信息
如果您想在网站的任何页面(比如首页、文章详情页或侧边栏)显示某个特定分类的信息,而不是当前页面的分类,您可以通过 id 或 token 参数来明确指定分类。
假设您想显示ID为 10 的分类的名称和链接:
{# 获取ID为10的分类名称 #}
<p>我们的推荐分类:{{% categoryDetail with name="Title" id="10" %}}</p>
{# 获取ID为10的分类链接 #}
<a href="{{% categoryDetail with name="Link" id="10" %}}">进入推荐分类</a>
同样,如果您知道分类的URL别名(例如about-us),也可以使用 token 参数:
{# 通过URL别名获取分类名称 #}
<p>关于我们分类名称:{{% categoryDetail with name="Title" token="about-us" %}}</p>
构建分类列表:循环展示多个分类
除了获取单个分类的详情,在很多场景下,我们需要展示一个分类列表,比如网站的导航菜单、侧边栏的子分类或者首页的分类区块。这时,categoryList 标签就派上了用场。
categoryList 标签通常与 for 循环结合使用,以遍历并显示多个分类。
{# 获取所有顶级分类(moduleId="1"代表文章模型,parentId="0"代表顶级分类) #}
<ul>
{{% categoryList categories with moduleId="1" parentId="0" %}}
{{% for item in categories %}}
<li>
<a href="{{ item.Link }}">{{ item.Title }}</a>
<p>{{ item.Description|truncatechars:50 }}</p> {# 截取描述前50个字符 #}
</li>
{{% endfor %}}
{{% endcategoryList %}}
</ul>
在这个例子中,我们定义了一个名为 categories 的变量来接收所有文章模型下的顶级分类。在 for 循环中,item 代表了当前循环到的每一个分类对象,我们可以通过 item.Link、item.Title 和 item.Description 来动态显示这些信息。这里还使用了 |truncatechars:50 过滤器来限制描述的显示长度,避免过长的文本影响布局。
展示多级分类
安企CMS的 categoryList 标签也支持通过嵌套循环来展示多级分类。这在构建复杂的导航菜单或层级结构时非常有用。
假设您想展示文章模型下的顶级分类,以及它们各自的二级子分类:
<nav>
<ul>
{{% categoryList topCategories with moduleId="1" parentId="0" %}}
{{% for topCat in topCategories %}}
<li>
<a href="{{ topCat.Link }}">{{ topCat.Title }}</a>
{# 判断是否有子分类,然后进行嵌套循环 #}
{{% if topCat.HasChildren %}}
<ul class="sub-category">
{{% categoryList subCategories with parentId=topCat.Id %}}
{{% for subCat in subCategories %}}
<li><a href="{{ subCat.Link }}">{{ subCat.Title }}</a></li>
{{% endfor %}}
{{% endcategoryList %}}
</ul>
{{% endif %}}
</li>
{{% endfor %}}
{{% endcategoryList %}}
</ul>
</nav>
在上面的代码中,topCat.HasChildren 是一个非常有用的布尔值,它会告诉我们当前分类是否拥有下级子分类,从而决定是否需要渲染嵌套的 ul 列表。通过这种方式,您可以构建出任意深度的分类层级结构。
实战应用场景
- 网站主导航菜单: 利用
categoryList标签,您可以轻松地构建出根据后台分类自动更新的主导航栏。当后台新增或修改分类时,前端导航会自动同步更新,无需手动修改代码。 - 分类页面顶部信息: 在
article/list.html或product/list.html等分类列表模板中,使用categoryDetail标签动态显示当前分类的名称作为<h1>标题,并将分类描述置于标题下方,这对于页面SEO和用户理解都非常有帮助。 - 侧边栏分类树: 结合
categoryList的parentId参数,您可以创建一个动态的侧边栏分类树,显示当前分类下的子分类,或者所有顶级分类及其部分子分类,方便用户在不同分类间快速切换。 - 首页内容区块: 在网站首页,您可以使用
categoryList标签循环展示几个核心分类,并在每个分类下通过archiveList标签进一步展示该分类下的最新文章或推荐产品,形成内容聚合区块。
注意事项
- HTML内容转义: 再次强调,当您输出可能包含HTML标签的字段(如
Description、Content)时,请务必使用|safe过滤器,以确保HTML内容能够正确渲染,而非被转义为纯文本。 - **字段