6

這個問題是參考我的previous question。根據我的要求,我對數據庫做了一些修改,但是我不確定如何創建子菜單(需要從其他表創建,而不是主表pg_Pages表。我的問題是我可以很容易地爲「關於我們」和「多媒體」創建子菜單,因爲我將這些頁面存儲在pg_Pages表中,但是我需要爲News創建子菜單從News Category表和它們magazine錶鏈接到正確的頁面處理程序。&問題。網站數據庫設計(CMS)數據庫驅動菜單的考慮和建議

菜單例enter image description here

樣本數據

pg_Pages Table 
PageID PageName LangID PagePositionNo PageURL  PageInheritance 
1 Home  1 10  Default.aspx 0 
2 About Us 1 20  Page.aspx 0 
3 PageOne  1 10  Page.aspx 2 
4 PageTwo  1 20  Page.aspx 2 
5 Multimedia 1 30  Page.aspx 0 
6 Video  1 10  Videos.aspx 5 
7 PhotoGallery 1 20  Gallery.aspx 5 
8 News  1 40  News.aspx 0 
9 Issues  1 50  #  0 
10 Publication 1 60  Page.aspx 0 
11 SpanishHome 2 10  Default.aspx 0 
12 SpanisAbout Us 2 20  Page.aspx 0 
------------------------------------------------------------------------------ 
Magazine 
MagazineID MagazineIssueCode LangID MagazineTitle MagazineLiveIssue(CurrentIssue) 
1  101   1 Mag Title  0 
2  102   1 Mag Title  1 
3  101   2 SpanisgMag Title 0 
4  102   2 Mag Title  1 
------------------------------------------------------------------------------ 

art_Article Table 
ArticleID ArticleTitle ArticleCatID MagazineID Language TYPE 
1  Article one 100  1  1 Artile 
2  Article two 100  1  1 Artile 
3  Article three 200  1  1 Artile 
4  Article four 300  1  1 Artile 
5  Article Five 100  2  1 Artile 
6  EditorMessage 300  2  1 EditorMessage 
7  Article seven 200  2  2 Somthing 
------------------------------------------------------------------------------ 

我希望我的設計有足夠的靈活性來讀取不同的表菜單。我應該採取哪些方法/改變來正確完成它,而不是爲所有菜單創建單獨的表格將它們鏈接到頁面?請爲此場景建議最佳方法。

我希望系統非常靈活,並直接從數據庫中讀取菜單信息,而不是根據IssueID或某個其他ID創建靜態鏈接和觸發查詢。

News Menu基本上顯示文章的類別,進一步我需要一個查詢,它只會顯示News菜單中的類別,該菜單包含針對該特定問題的文章。假設如果問題102沒有任何與文化相關的文章那麼文化子菜單不應該顯示在新聞下。

+0

我不會試圖在一個數據模型來模擬一個 「菜單」。你唯一能做的就是顯示菜單。如果你只是序列化菜單對象(例如使用json.net)並存儲它們,你會讓生活變得更容易。 –

+0

@Filip,你的意思是我應該創建一個單獨的'菜單'表,字段類似於MenuID,MenuName,PageID等等。如果我錯了,請給我一個例子 – Learning

+1

我會在你的web應用程序中創建一個文件menu.json並在那裏轉儲整個結構。 –

回答

3

您的任務是將您的站點實例映射到菜單實例。這可以通過View輕鬆完成。

因此,例如,創建viewMenu有以下欄目:MenuItemIdMenuItemNameMenuItemLevelMenuItemParentMenuItemUrl。您可以操縱這些屬性以在您的代碼中創建菜單。您也可以使用SQL查詢創建初始視圖來處理當前數據庫結構或任何未來結構中的數據。

至於現在,您可能會將三個不同查詢的結果聯合到您的三個表中。將來你可以添加功能到你的菜單改變視圖。將新表添加到數據庫時,還可以將新項目添加到菜單中。

4

對於通用CMS應該有一個單獨的菜單表和一個相關的MenuItems表。

可以有各種不同的菜單 - 頂部/主菜單內左側的菜單網站頁腳等等......你應該在菜單表中定義它們。

應該比你有一個遞歸的MenuItems表,可以有子菜單項無限多。

菜單表至少應該有這些列:

  • 菜單ID(INT)
  • 說明(爲nvarchar(...))
  • CREATEDATE,CreatedBy,ModifyDate .... - 記錄列...

的MenuItems表應該至少有這些列:

  • MenuItemID(int)
  • MenuID(int) - 與哪個菜單有關???
  • 標題(爲nvarchar(...))
  • LanguageID(int或其他)
  • ParentMenuItemID(INT)遞歸
  • 鏈接(爲nvarchar(...)),不管它是鏈接到(頁面,外部網站,沒有,...)。在結束一切都歸結爲一個鏈接...
  • IsExternalLink(通常是外部鏈接,您可能會禁用另一個選項卡上的搜索引擎優化抓取和開放 - 所以知道這會是個不錯)
  • SortOrder的(INT)排序
  • CREATEDATE,CreatedBy,ModifyDate .... - 記錄列...

希望它可以幫助...