1. Hàm lấy tên miền của ứng dụng
Bạn cần viết một hàm lấy thông tin domain của bạn để tiện cho việc viết các Store proceduce
-- ================================
-- Author: webmaster@hmweb.com.vn
-- ================================
CREATE FUNCTION dbo.ufDomainName()
RETURNS VarChar(100)
AS
BEGIN
RETURN 'http://www.hmweb.com.vn'
END
2. Thủ tục hiển thị menu đa cấp Thủ tục sau sẽ thực hiện việc hiển thị menu đa cấp, tất cả sẽ được thực hiện bằng Store, Trong code khi muốn hiển thị menu đa cấp bạn chỉ cần dùng Gridview để hiển thị.-- Trong thủ tục này mình chỉ viết đến cấp 3. Nếu website của bạn có nhiều hơn 3 cấp bạn có thể sửa lại cho phù hợp (website của mình hmweb.com.vn cũng đến cấp 3)-- ================================-- Author: webmaster@hmweb.com.vn-- ================================CREATE PROCEDURE [dbo].[spTB_Category_LeftMenu]@TabID int, @CateID intAS-- Nếu @TabID=0 thì Menu chỉ gồm cấp 1IF @TabID=0BEGIN SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' >'+ CateName +'</A>' ASCateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link, TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=0 ORDER BY TB_Category.DepthENDELSE-- Nếu @TabID>0 thì hiển thị các cấp phụ thuộc vào @CateIDBEGIN -- Nếu @CateID=0 thì hiển thị đến Menu cấp 2 IF @CateID=0 BEGIN SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=0 AND ParentID=@TabID UNION SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=1 AND TB_Category.ParentID=@TabID UNION SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=0 AND TB_Category.CateID<>@TabID ORDER BY TB_Category.Depth END ELSE -- Ngược lại @CateID>0 hiển thị đến Menu cấp 3 BEGIN SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=0 AND TB_Category.CateID=@TabID UNION SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=1 AND TB_Category.ParentID=@TabID UNION SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=2 AND TB_Category.ParentID=@CateID UNION SELECT TB_Category.CateID, TB_Category.ParentID, '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category WHERE TB_Category.Decen=0 AND TB_Category.CateID<>@TabID ORDER BY TB_Category.Depth ENDEND Bạn hãy chạy thử với câu lệnh sau EXEC spTB_Category_LeftMenu 5,9 --> khi đó kết quả sẽ được hiển thị như bảng sau
Trong kết quả trên bạn thấy trong trường CateName có đầy đủ cả liên kết và class đã được định nghĩa trong Bảng TB_Category như những bài trước đã viết (Trường ClassName theo cấp menu được sinh tự động bằng spTB_Categoey_Edit). Trong code bạn chỉ cần viết các ClassName trong css để hiển thị cho phù hợp. Trường Link của bạn nếu có sẽ hiển thị trong trường CateName ví dụ với CateID=5 có Link=?Tab=5 khi đó trường CateName trong store trên sẽ như sau:
<A href='http://www.hmweb.com.vn?Tab=5' class='MenuLevel_1'>Thể thao</A>
3. Thủ tục GetSubTreeTiếp theo là thủ tục để hiển thị tất cả các phần tử là con của một cấp menu. Bạn viết Procedure như sau:-- =============================================
-- Author: webmaster@hmweb.com.vn
-- Description: <GetSubTree>
-- =============================================
CREATE PROCEDURE [dbo].[spTB_Category_GetSubTree]
@CateID int
AS
BEGIN
SELECT CateID,
ParentID,
CASE Decen
WHEN 0 THEN CateName
WHEN 1 THEN '* '+ CateName
WHEN 2 THEN '* * '+ CateName
WHEN 3 THEN '* * :: ' + CateName
WHEN 4 THEN '* * :: -- ' +CateName
WHEN 5 THEN '* * :: -- --' +CateName
END AS CateName,
Decen,
Depth,
Link,
Target,
CssClass,
Active
FROM TB_Category WHERE ParentID=@CateID
ORDER BY Depth
END
Vậy là đã có các thủ tục cơ bản của bảng Category. Website của bạn có thể có những yêu cầu khác, bạn có thể viết thêm các thủ tục theo yêu cầu. Tiếp theo chúng ta sẽ viết các hàm và procedure cho bảng TB_News