快速业务通道

ASP.NET实现无限级分类

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

在我们做网站的时候,不管是新闻系统还是产品系统,或者是博客,论坛等等,都少不了与分类打交道。有时候我们经常说分几级分类,一般分2-3级,具体视情况而定,但是这样的做法非常死板,不够灵活,因为不是任何类别下的分类都有子类,孙类……,为了能够使分类灵活,我们经常采用的是无限级分类。

无限级分类主要思路有两种:一是使用递归;二就是非递归,我比较喜欢这种,毕竟效率是关键。

表结构设计:

首先建立一个分类表Category:

设计如下:

--ParentID 父节点的ID

--CategoryPath 节点路径

--CategoryName 类别名称

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

--CategoryDescn 这个是类别描述,没啥好说的了,主要做搜索优化的时候用到,填充mata关键字

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

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

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

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

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

[图2]

产品表Product:

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

??êμ??μ?1|?ü£o

1.?3ò???àà±e??μ?×óàà

±è·??μ??1??a??àà??£???1?£?éù×ó×?á???àà?£

select CategoryID,CategoryName from Category where ParentID=??1?μ?CategoryID//óéí?2?éò??′μ?£?ParentID?a1μ?óD??1?oíéù×ó?£

2.éú3é·?àà?ù?úμ??·??,±è·??μ ??1??·??1??·???é?e?·é??????é?e?·???????é?e

?÷òa????ê??èμ?μ?μ±?°àà?ù??ó|μ?CategoryPath£?è?oó°?×?oóò???“£?”è¥μ?£?foreachμ?μ?è??·??

categoryPath??=??categoryPath.Substring(0,??categoryPath.LastIndexOf('',''));//μ?μ?CategoryPath
????????????????????????string[]??arrCategory??=??categoryPath.Split('','');//ò??oo?·???
????????????????????????foreach??(string??s??in??arrCategory)
????????????????????????{
????????????????????????????????string??classID??=??s.ToString();
????????????????????????????????if??(classID??==??"0")//è?1?ê?0£?′ú±í?a?íê?×???àà
????????????????????????????????{
????????????????????????????????????????//?????óê×ò3á??ó
????????????????????????????????????????HtmlAnchor??lnkHome??=??new??HtmlAnchor();
????????????????????????????????????????lnkHome.InnerText??=??"ê×ò3";
????????????????????????????????????????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();//???óò???<a></a>?a??
????????????????????????????????????????lnkCategory.InnerText??=??categoryName;
????????????????????????????????????????lnkCat

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号