Hello,
We use the CA-menu in our Emagic.NET CMS-system.
Is it possible to create a menu from which each mainitem has a different color? When collapsing, the color of the subitems must be equal to the mainitem-color.
Is this possible with CA? If so, can someone give me a detailed example?
This is our current applied vb-code
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Xml
Imports emagiCdotNet.Core
Namespace emagiCdotNet.Modules.emagiC_DynamicMenu
Partial Public Class AutolandMenu_ComponentArt
Inherits emagiCdotNet.Modules.BaseModule
#Region " Methods "
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LoadWithDataSet()
DataBind()
End Sub
Private Sub LoadWithXML()
Dim _xmlDocument As New XmlDocument()
_xmlDocument = DynamicMenuUtility.GetMenuItemsAsXML(Me.emagiCdotNet_CommunityInfo.Id, Me.emagiCdotNet_DataPartId, Me.emagiCdotNet_VersionId, Me.emagiCdotNet_NodeId, Me.emagiCdotNet_Mode)
If Not GenUtility.IsEmpty(_xmlDocument) Then
' get html as string and adjust the names
Dim _stringXML As String = _xmlDocument.InnerXml
_stringXML = _stringXML.Replace("<menu>", "<SiteMap>")
_stringXML = _stringXML.Replace("</menu>", "</SiteMap>")
_stringXML = _stringXML.Replace("pageId=""", " ID=""")
_stringXML = _stringXML.Replace("title=""", " Text=""")
_stringXML = _stringXML.Replace("navigateUrl=""", " NavigateUrl=""")
emagiC_DynamicMenu.LoadXml(_stringXML)
End If
End Sub
Private Sub LoadWithDataSet()
Dim _ds As New Data.DataSet
_ds = DynamicMenuUtility.GetMenuItemsAsDataset(Me.emagiCdotNet_CommunityInfo.Id, Me.emagiCdotNet_DataPartId, Me.emagiCdotNet_VersionId, Me.emagiCdotNet_NodeId, Me.emagiCdotNet_Mode)
If Not GenUtility.IsEmpty(_ds) Then
BuildMenu(_ds)
End If
End Sub
Private Sub BuildMenu(ByRef _ds As DataSet)
Dim _row As DataRow
For Each _row In _ds.Tables("MenuItems").Rows
If (_row.IsNull("parentPageId")) Then
Dim _item As ComponentArt.Web.UI.MenuItem
_item = CreateItem(_row, 1)
emagiC_DynamicMenu.Items.Add(_item)
PopulateSubItem(_row, _item, 2)
End If
Next _row
End Sub
Private Sub PopulateSubItem(ByVal row As DataRow, ByVal item As ComponentArt.Web.UI.MenuItem, ByVal level As Integer)
Dim _childRow As DataRow
Dim _numberElements As Integer
_numberElements = row.GetChildRows("ParentChildRelation").Length
Dim _counter As Integer = 1
For Each _childRow In row.GetChildRows("ParentChildRelation")
Dim _childItem As ComponentArt.Web.UI.MenuItem
_childItem = CreateItem(_childRow, level)
item.Items.Add(_childItem)
PopulateSubItem(_childRow, _childItem, level + 1)
_counter += 1
Next _childRow
End Sub
Private Function CreateItem(ByVal row As DataRow, ByVal level As Integer) As ComponentArt.Web.UI.MenuItem
Dim _item As New ComponentArt.Web.UI.MenuItem()
_item.ID = row("pageId").ToString()
_item.Text = Server.HtmlEncode(row("title").ToString())
_item.ToolTip = Server.HtmlEncode(row("title").ToString())
_item.NavigateUrl = row("navigateUrl").ToString()
Dim _look As New ComponentArt.Web.UI.ItemLook
If level = 1 Then
If row("nodeId").ToString() = Left(Me.emagiCdotNet_NodeId, 11) Then
_look.CssClass = "topLevel" & level & "active"
Else
_look.CssClass = "topLevel" & level
End If
Else
_look.CssClass = "topLevel" & level
End If
_look.HoverCssClass = "topLevel" & level & "over"
_look.LabelPaddingLeft = CType("10", Unit)
_look.LabelPaddingRight = CType("10", Unit)
_look.LabelPaddingTop = CType("1", Unit)
_look.LabelPaddingBottom = CType("1", Unit)
_item.Look = _look
_item.TextAlign = ComponentArt.Web.UI.TextAlign.Left
Return _item
End Function
#End Region
End Class
End Namespace
Thank you in advance!
William.