无限极分类
无限极分类
无限极分类的概念
在CMS网站中需要进行信息的分类,无限极分类就可以用来实现这种分类效果。 利用无限极分类可以实现网站的网站地图和面包屑导航等重要内容。
无限极分类的应用
-WordPress:WordPress作为一个博客网站,具有和CMS网站类似的分类管理机制。
无限极分类的原理及实现
:无限极分类有许多种类似的原理和实现方式,我这里叙述的是我在beego+MySQL环境下的实现 无限极分类作为动态CMS网站的一个特征,其内容存储在一章SQL表中。每张表包含一个自身Id和他父类的Id(FatherId),以及一些额外的项用来存放节点的特征信息。
如何在这样的数据结构下实现网站地图的绘制
网站地图绘制的本质在寻找一个节点(可以是根节点或者任意一个节点)的所有子孙节点。在我们提供的数据结构的基础上,可以通过一个递归函数来完成对所有子孙节点的搜索。 伪代码如下:
1
2
3
4
5
6
7
8
9
func 递归函数(节点Id, 所有项目集合slist, 一个空项目集合dlist) {
for 所有项目集合slist {
if slist[i].Id == 子节点Id {
把slist[i]加入到dlist中
func 递归函数(slist[i].Id, slist, dlist)
}
}
return dlist
}
如此可以将Id节点的所有元素都加入到dlist中,完成对子孙节点的查找。
如何在这样的数据结构下实现面包屑的绘制
面包屑绘制的本质在寻找一个节点(可以是任意一个叶节点或枝节点)的父节点结合。在我们提供的数据结构的基础上,可以通过一个递归函数来完成搜索。
如何添加一个节点(文章节点或者下载节点)
整个数据结构的涉及遵循的基本原则是子孙找父亲,即子孙节点里存放了父亲节点的信息,父亲节点里则没有关于子孙的任何信息。 这样我们在创建一篇文章(或者下载链接时,它们存放在与链接不同的MySQL表中)时可以在文章里添加一个FatherId项,来表明这篇文章从属于某一个链接节点。这样设计的好处在于不会出现添加到一个错误类型的父节点的问题,比较灵活
额外的关注点
- 数据逻辑的部分还是尽量在后端完成,不要太过依赖js
本文由作者按照
CC BY 4.0
进行授权