- 后台设置:确保你的分类模型中包含了“子分类”。
- 模板调用:在文章列表页或内容页模板中使用相应的标签来调用和显示子分类。
下面是详细的步骤和代码示例。

第一步:后台设置(确保数据结构正确)
在 PHPCMS V9 中,分类的层级关系是系统内置的,你不需要为“子分类”创建一个特殊的字段,只需要在添加分类时正确地设置“上级分类”即可。
- 登录后台:使用管理员账号登录你的 PHPCMS V9 后台。
- 进入分类管理:
- 在顶部菜单栏找到 -> 分类管理。
- 选择你要操作的文章模型("文章")。
- 检查分类结构:
- 在分类管理页面,你应该能看到一个树状结构的分类列表。
- 如果你希望某个分类(科技”)有子分类(人工智能”、“前端开发”),那么在添加“人工智能”和“前端开发”时,必须将它们的“上级分类”选择为“科技”。
- 顶级分类的“上级分类”为空。
至此,后台的数据结构已经准备就绪。
第二步:模板调用(核心步骤)
我们将在模板文件中使用 PHPCMS 的 get_child_category 标签来获取并显示子分类,最常见的需求是在文章列表页显示当前分类的子分类。
在文章列表页(list_*.html)显示当前分类的子分类
假设你的文章列表模板文件是 phpcms/templates/default/content/list_1.html(1 是你的文章模型ID)。

- 打开模板文件:使用 FTP 或主机后台文件管理器,打开
list_1.html文件。 - 添加调用代码:在你希望显示子分类的位置(文章列表的上方或侧边栏),添加以下 PHP 代码。
{php $child_category = get_child_category($catid, $modelid);}
{if $child_category}
<div class="sub-category-list">
<h3>子分类</h3>
<ul>
{loop $child_category $cat}
<li>
<a href="{$cat[url]}">{$cat[catname]}</a>
<!-- 如果想显示每个子分类下的文章数量,可以这样写 -->
({$cat[items]})
</li>
{/loop}
</ul>
</div>
{/if}
代码解析:
-
{php $child_category = get_child_category($catid, $modelid);}- 这是一句 PHP 代码。
get_child_category()是 PHPCMS 的一个核心函数,用于获取指定分类的子分类。$catid:这是一个 PHPCMS 模板变量,代表当前页面的分类 ID,在列表页,系统会自动传递这个变量。$modelid模型的 ID。- 这行代码执行后,会将当前分类的所有子分类信息存储在
$child_category变量中,它是一个数组。
-
{if $child_category}- 这是一个条件判断。
$child_category数组不为空(即当前分类有子分类),则执行{/if}之间的代码,这样可以避免在没有子分类时显示空的列表。
- 这是一个条件判断。
-
{loop $child_category $cat}
(图片来源网络,侵删)- 这是一个循环标签,用于遍历
$child_category数组。 - 在每次循环中,当前子分类的信息会被赋值给变量
$cat。
- 这是一个循环标签,用于遍历
-
<a href="{$cat[url]}">{$cat[catname]}</a>{$cat[url]}:获取该子分类的链接地址。{$cat[catname]}:获取该子分类的名称。- 这行代码会生成一个指向子分类列表页的链接。
-
({$cat[items]}){$cat[items]}:获取该子分类下的文章数量。- 用括号括起来,使其作为附属信息显示。
页(show_*.html)显示当前文章分类的子分类
这个需求相对少见,但原理是一样的,在文章内容页模板(show_1.html)中,你同样可以使用上述代码。
页,$catid 变量同样代表当前文章所属的分类 ID,直接复制场景一的代码到 show_1.html 的相应位置即可。
{php $child_category = get_child_category($catid, $modelid);}
{if $child_category}
<div class="sub-category-list">
<h3>相关子分类</h3>
<ul>
{loop $child_category $cat}
<li><a href="{$cat[url]}">{$cat[catname]}</a> ({$cat[items]})</li>
{/loop}
</ul>
</div>
{/if}
获取所有顶级分类及其子分类
如果你想在一个页面上(比如网站首页的侧边栏)同时显示所有顶级分类和它们各自的子分类,可以使用 get_categorys 函数。
{php $top_categorys = get_categorys($modelid, '0', 'childid', 'DESC');}
{loop $top_categorys $cat}
<div class="category-block">
<h3><a href="{$cat[url]}">{$cat[catname]}</a></h3>
{if $cat[childid]}
<ul class="child-category">
{php $child_ids = explode(',', $cat[childid]);}
{loop $child_ids $child_id}
{php $child_cat = get_category($child_id);}
<li><a href="{$child_cat[url]}">{$child_cat[catname]}</a></li>
{/loop}
</ul>
{/if}
</div>
{/loop}
代码解析:
{php $top_categorys = get_categorys($modelid, '0', 'childid', 'DESC');}get_categorys()是获取分类列表的函数。$modelid: 指定模型。'0': 指定只获取parentid为0的分类,也就是顶级分类。'childid': 按子分类ID数量排序,让有子分类的分类排在前面。
{loop $top_categorys $cat}: 循环所有顶级分类。{if $cat[childid]}:$cat[childid]字段存储了该顶级分类下所有子分类ID的逗号分隔字符串,如果这个字段不为空,说明有子分类。{php $child_ids = explode(',', $cat[childid]);}: 将子分类ID字符串拆分成一个数组。{loop $child_ids $child_id}: 循环这个子分类ID数组。{php $child_cat = get_category($child_id);}: 根据子分类ID获取该子分类的完整信息。{$child_cat[catname]}和{$child_cat[url]}: 输出子分类的名称和链接。
总结与常见问题
-
找不到
get_child_category函数? 这个函数是 PHPCMS V9 内置的,如果提示未定义,请检查你的模板文件是否正确,或者是否在自定义函数文件中错误地覆盖了它,通常直接使用即可。 -
分类不显示?
- 首要检查:回到后台“分类管理”,确认子分类的“上级分类”是否设置正确。
- 缓存问题:PHPCMS 有强大的缓存机制,修改模板或后台数据后,务必去后台 “更新缓存” -> “更新全站缓存”,否则可能看不到效果。
- 变量问题:确认模板中使用的变量是
$catid,而不是其他变量名。
-
CSS 样式 上述代码只提供了 HTML 结构,你需要根据自己的网站风格添加 CSS 样式,让子分类列表看起来更美观。
.sub-category-list { margin: 20px 0; padding: 10px; border: 1px solid #eee; } .sub-category-list h3 { border-bottom: 1px solid #ccc; padding-bottom: 5px; margin-bottom: 10px; } .sub-category-list ul { list-style: none; padding-left: 0; } .sub-category-list li { display: inline-block; margin-right: 15px; } .sub-category-list a { color: #333; text-decoration: none; } .sub-category-list a:hover { color: #ff6600; text-decoration: underline; }
通过以上步骤,你就可以轻松地在 PHPCMS V9 的文章模板中添加并显示子分类了。
