1. 后台设置:确保你的分类模型中包含了“子分类”。
  2. 模板调用:在文章列表页或内容页模板中使用相应的标签来调用和显示子分类。

下面是详细的步骤和代码示例。

phpcms v9 模板文章添加子分类
(图片来源网络,侵删)

第一步:后台设置(确保数据结构正确)

在 PHPCMS V9 中,分类的层级关系是系统内置的,你不需要为“子分类”创建一个特殊的字段,只需要在添加分类时正确地设置“上级分类”即可。

  1. 登录后台:使用管理员账号登录你的 PHPCMS V9 后台。
  2. 进入分类管理
    • 在顶部菜单栏找到 -> 分类管理
    • 选择你要操作的文章模型("文章")。
  3. 检查分类结构
    • 在分类管理页面,你应该能看到一个树状结构的分类列表。
    • 如果你希望某个分类(科技”)有子分类(人工智能”、“前端开发”),那么在添加“人工智能”和“前端开发”时,必须将它们的“上级分类”选择为“科技”。
    • 顶级分类的“上级分类”为空。

至此,后台的数据结构已经准备就绪。


第二步:模板调用(核心步骤)

我们将在模板文件中使用 PHPCMS 的 get_child_category 标签来获取并显示子分类,最常见的需求是在文章列表页显示当前分类的子分类。

在文章列表页(list_*.html)显示当前分类的子分类

假设你的文章列表模板文件是 phpcms/templates/default/content/list_1.html1 是你的文章模型ID)。

phpcms v9 模板文章添加子分类
(图片来源网络,侵删)
  1. 打开模板文件:使用 FTP 或主机后台文件管理器,打开 list_1.html 文件。
  2. 添加调用代码:在你希望显示子分类的位置(文章列表的上方或侧边栏),添加以下 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}

    phpcms v9 模板文章添加子分类
    (图片来源网络,侵删)
    • 这是一个循环标签,用于遍历 $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': 指定只获取 parentid0 的分类,也就是顶级分类
    • '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]}: 输出子分类的名称和链接。

总结与常见问题

  1. 找不到 get_child_category 函数? 这个函数是 PHPCMS V9 内置的,如果提示未定义,请检查你的模板文件是否正确,或者是否在自定义函数文件中错误地覆盖了它,通常直接使用即可。

  2. 分类不显示?

    • 首要检查:回到后台“分类管理”,确认子分类的“上级分类”是否设置正确。
    • 缓存问题:PHPCMS 有强大的缓存机制,修改模板或后台数据后,务必去后台 “更新缓存” -> “更新全站缓存”,否则可能看不到效果。
    • 变量问题:确认模板中使用的变量是 $catid,而不是其他变量名。
  3. 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 的文章模板中添加并显示子分类了。