快捷搜索:

无限级分类的实现教程

在我们做网站的时刻,不管是新闻系统照样产品系统,或者是博客,论坛等等,都少不了与分类打交道。无意偶尔候我们常常说分几级分类,一样平常分2-3级,详细视环境而定,然则这样的做法异常古板,不敷机动,由于不是任何种别下的分类都有子类,孙类……,为了能够使分类机动,我们常常采纳的是无限级分类。

无限级分类主要思路有两种:一是应用递归;二便长短递归,我对照爱好这种,终究效率是关键。

表布局设计:

首先建立一个分类表Category:

设计如下:

--ParentID 父节点的ID

--CategoryPath 节点路径

--CategoryName 类又名称

--CategoryLevel 种别级别(主要为了操作方便才设置此字段)

--CategoryDescn 这个是种别描述,没啥好说的了,主要做搜索优化的时刻用到,添补mata关键字

数据显示如下(仅仅是个例子,现实中可能不这么分):

生果--包括苹果,橘子;

苹果又分为红富士和乔纳金两个品种;

乔纳金又分为山东和北京的乔纳金;

山东乔纳金又分为济南乔纳金……

  图片看不清楚?请点击这里查看原图(大年夜图)。

[图2]

产品表Product:

--CategoryID没啥好说的,主如果作为Category表的外键,留意有Categorypath这个字段的用意。

想实现的功能:

1.某一个种别下的子类

比方说生果这个类下,苹果,橘子着两个类。

select CategoryID,CategoryName from Category where ParentID=生果的CategoryID//由图2可以看到,ParentID为1的有苹果和橘子。

2.生因素类所在的路径,比方说 生果》苹果》乔纳金》山东乔纳金》济南乔纳金

主要思惟是先获得当前类所对应的CategoryPath,然后把着末一个“,”去掉落,foreach获得全路径

categoryPath = categoryPath.Substring(0, categoryPath.LastIndexOf(','));//获得CategoryPath

string[] arrCategory = categoryPath.Split(',');//以逗号瓜分

foreach (string s in arrCategory)

{

string classID = s.ToString();

if (classID == "0")//假如是0,代表这便是最高类

{

// 增添首页连接

HtmlAnchor lnkHome = new HtmlAnchor();

lnkHome.InnerText = "首页";

lnkHome.HRef = "~/Default.aspx";

plhControl.Controls.Add(lnkHome);

}

else

{

Category cg = new Category();

Xft.Model.Category cc = cg.GetModel(int.Parse(classID));

string categoryName = cc.CategoryName;

plhControl.Controls.Add(GetDivider());//增添一个瓜分线“》”

HtmlAnchor lnkCategory = new HtmlAnchor();//增添一个元素

lnkCategory.InnerText = categoryName;

lnkCategory.HRef = string.Format(PRODUCTS_URL, classID);

plhControl.Controls.Add(lnkCategory);

}

}

3.获得随意率性分类下的所有产品信息:

获得该种别对应的CategoryPath,然后用下面sql语句查询即可

select * from Product where CategoryPath like '" + cpath + "%'

未办理的问题:若何判断一个类是否是这个分支的最末级类?比方说生果》橘子,橘子下面没有器械了,那么橘子这个类便是最末级分类,而苹果的末级分类是生果》苹果》乔纳金》山东乔纳金》济南乔纳金,有明白的大年夜侠解说一下,不胜谢谢!

您可能还会对下面的文章感兴趣: