最近在做个CMS系统,要做无限级 分类 。开始在网上找,希望能有现成的拿来就用,结果没搜到满意的,要吗操作复杂,要吗结构复杂,于是想自己倒腾一个,结果还算满意。 1、表结构: 2、查询所有分类(树型) Select * from Category Order By OrderPath 3、查
最近在做个CMS系统,要做无限级分类。开始在网上找,希望能有现成的拿来就用,结果没搜到满意的,要吗操作复杂,要吗结构复杂,于是想自己倒腾一个,结果还算满意。
1、表结构:
2、查询所有分类(树型)
Select * from Category Order By OrderPath
3、查询某个分类(这里假设该节点ID为 10)下属分类
a、直接下属:Select * From Category Where ParentId=10
b、本身及所有子节点:Select * From Category Where ParentPath Like '10%' Order By OrderPath
c、所有下属子节点(不含本身):Select * From Category Where ParentPath Like '10,%' Order By OrderPath
4:添加分类(存储过程实现):
create proc Proc_InsertCategory(
@CategoryName varchar(50),
@ParentId int,
@Remark varchar(250)
) as
begin
declare @KeyId varchar(40)
declare @OrderId int
declare @CategoryId int
declare @Path varchar(900)
declare @OrderPath varchar(900)
select @KeyId=NewId()
if @ParentId > 0
Select @OrderId=IsNull(Max(OrderId),0) + 1 From Category Where ParentId=@ParentId
else
Select @OrderId=IsNull(Max(OrderId),0) + 1 From Category Where ParentId=CategoryId
Insert Into Category(ChannelId,KeyId,CategoryName,ParentId,OrderId,Child,Remark)
Values(@ChannelId,@KeyId,@CategoryName,@ParentId,@OrderId,0,@Remark)
Select @CategoryId=CategoryId From Category Where KeyId=@KeyId
if @ParentId > 0
begin
select @Path=ParentPath,@OrderPath=OrderPath From Category Where CategoryId=@ParentId
Update Category Set ParentPath=@Path + ',' + Cast(@CategoryId As Varchar(10)),OrderPath=@OrderPath + ',' + Cast(@OrderId As Varchar(10)) Where CategoryId=@CategoryId
Update Category Set Child=Child + 1 Where CategoryId=@ParentId
end
else
Update Category Set ParentId=@CategoryId,Path=Cast(@CategoryId As Varchar(10)),OrderPath=Cast(@OrderId As Varchar(10)) Where CategoryId=@CategoryId
Select @CategoryId
end
5、顺序调整:
--辅助过程
create Proc Proc_ResetCategoryOrder(
@CategoryId int,
@OrderId int
) as
begin
Update Category
Set OrderId=@OrderId,OrderPath=(Select OrderPath From Category Where CategoryId=(Select ParentId From Category Where CategoryId=@CategoryId)) + ',' + cast(@OrderId As varchar(10))
Where CategoryId=@CategoryId
Update Category
Set OrderPath=(Select OrderPath From Category Where CategoryId=@CategoryId) + ',' + cast(OrderId As varchar(10))
Where ParentPath like (Select ParentPath From Category Where CategoryId=@CategoryId) + ',%'
end
--修改分类序号
create Proc Proc_ChangeCategoryOrder(
@CategoryId int,
@NewOrderId int
) as
begin
exec Proc_ResetCategoryOrder @CategoryId,@NewOrderId
declare @OldOrderId int
declare @ParentId int
declare @cid int
declare @oid int
Select @OldOrderId=OrderId,@ParentId=ParentId From Category Where CategoryId=@CategoryId
if @OldOrderId=@NewOrderId
return
declare @Relation_Category cursor
if @ParentId = @CategoryId
begin
if @OldOrderId>@NewOrderId
set @Relation_Category = cursor for select CategoryId,OrderId+1 From Category Where CategoryId=ParentId And OrderId<@OldOrderId And OrderId>@NewOrderId
else
set @Relation_Category = cursor for select CategoryId,OrderId-1 From Category Where CategoryId=ParentId And OrderId>@OldOrderId And OrderId<@NewOrderId
end
else
begin
if @OldOrderId>@NewOrderId
set @Relation_Category = cursor for select CategoryId,OrderId+1 From Category Where CategoryId=@ParentId And OrderId<@OldOrderId And OrderId>@NewOrderId
else
set @Relation_Category = cursor for select CategoryId,OrderId-1 From Category Where CategoryId=@ParentId And OrderId>@OldOrderId And OrderId<@NewOrderId
end
open @Relation_Category
fetch next from @Relation_Category into @cid,@oid
while @@fetch_status=0
begin
exec Proc_ResetCategoryOrder @cid,@oid
fetch next from @Relation_Category into @cid,@oid
end
close @Relation_Category
DEALLOCATE @Relation_Category
end
6、删除分类:
Delete From Category Where ParentPath Like (Select ParentPath From Category Where CategoryId=@CategoryId) + '%'
7、修改:
就只是修改名称和备注,直接更新就可以了
开始的时候觉得好像很难,做出来了才发现,很简单的嘛
欢迎朋友们点评哈~
相关推荐
在IT领域,尤其是在Web开发中,无限级级联菜单是一种常见的交互设计,它允许用户通过逐级下拉的方式来浏览和选择深层次的结构化数据。在本案例中,我们讨论的是一段实现这种功能的源码,它基于ASP.NET和AJAX技术栈。...
标题中的“纯ajax 无限级 树形 菜单 源码”指的是一个使用纯JavaScript(通过AJAX技术)实现的无限级树形菜单的源代码。这个菜单允许用户在不刷新整个页面的情况下,动态加载和展示层级结构的数据,提供了一种高效的...
TreeView控件允许通过数据绑定将数据源(例如,数据库中的分类或用户角色)映射到树形结构。在这个例子中,"坏孩子"可能指的是这个菜单的非传统设计或实现方式。 为了创建无限级树,我们需要一个数据源来存储每个...
这款软件采用纯绿色设计,无需安装任何数据库,极大地降低了用户的使用门槛。用户只需将产品分类以文件夹的形式组织,而每个产品的信息则通过图片来呈现。这种简洁明了的设计使得即使是对技术不太熟悉的用户也能轻松...
内容集合储存,方便全局管理,设有频道、无限级分类方便归类各内容;已有开发频道产品、文章、商城、图片、多媒体(播放影音视频)、介绍、资质、照片、链接等,支持无限复制,并可自行拓展其他功能;加入点击访问数...
3、Angelcms实现了无限级板块分类,方便内容划分;无限级子栏目分类,清晰展现多级内容。采用符合 DIV CSS规范布局。 4、网站采用三种页面处理技术,可以生成纯静态网页模式、在不使用asp.net其余为静态插件的前提...
3、Angelcms实现了无限级板块分类,方便内容划分;无限级子栏目分类,清晰展现多级内容。采用符合 DIV+CSS规范布局。 4、网站采用三种页面处理技术,可以生成纯静态网页模式、在不使用asp.net其余为静态插件的前提...
内容集合储存,方便全局管理,设有频道、无限级分类方便归类各内容; 已有开发频道产品、文章、商城、图片、多媒体(播放影音视频)、介绍、资质、照片、链接等,支持无限复制,并可自行拓展其他功能; 加入点击...
实现您要求的所有常用功能,基于ASP+ACCESS或MSSQL动静(可生成HTML)双态自由切换的终极企业建站系统,提供文章、产品、商品交易、下载、图片、视频、介绍、资质证书、招聘、友情链接等模块可无限制增减频道、无限级...
实现您要求的所有常用功能,基于ASP+ACCESS或MSSQL动静(可生成HTML)双态自由切换的终极企业建站系统,提供文章、产品、商品交易、下载、图片、视频、介绍、资质证书、招聘、友情链接等模块可无限制增减频道、无限级...