public SiteMapNode FindSiteMapNode( string rawUrl, CatalogItemMenuType mType ) { SiteMapNode res; if (!_menuHashes[mType].HashUrl.TryGetValue(rawUrl.ToLower(), out res)) { if( rawUrl == HttpContext.Current.Request.RawUrl && CmsContext.Current.CatalogItem != null ) { _menuHashes[ mType ].CatalogItemRevHash.TryGetValue( CmsContext.Current.CatalogItem, out res ); } } return res; }
public MenuItemContainer(SiteMapNode node, CatalogItemMenuType mType) { if (node == null) { throw new ArgumentNullException("node"); } Node = node; CatalogItemMenuType = mType; }
//public CatalogItem GetCatalogItemByCatalogItemName( string catalogItemName) //{ // return _catalogItems.Where(c => c.CatalogItemName == catalogItemName).FirstOrDefault(); //} /// <summary> /// Возвращает видимые дочерние разделы (кроме служебных) /// </summary> public IEnumerable<CatalogItem> GetCatalogItems(int parentItemId, CatalogItemMenuType mType) { return _catalogItems.Where(c => c.ParentItemID == parentItemId && c.CatalogItemMenuType == mType && c.CatalogItemVisible && !c.IsServicePage).OrderBy(c => c.CatalogItemPriority); }
public SiteMapNode GetParentNode(SiteMapNode node, CatalogItemMenuType mType) { return _menuHashes[mType].HashParent[node]; }
public SiteMapNodeCollection GetChildNodes( SiteMapNode node, CatalogItemMenuType mType ) { return _menuHashes[mType].HashChilds[node]; }
public CatalogItem GetCatalogItem(SiteMapNode node, CatalogItemMenuType mType) { CatalogItem res; _menuHashes[mType].CatalogItemHash.TryGetValue( node, out res ); return res; }
public OneMenuTypeHashHelper(CatalogItemMenuType mType) { HashUrl = new Dictionary<string, SiteMapNode>(); HashChilds = new Dictionary<SiteMapNode, SiteMapNodeCollection>(); HashParent = new Dictionary<SiteMapNode, SiteMapNode>(); CatalogItemHash = new Dictionary<SiteMapNode, CatalogItem>(); CatalogItemRevHash = new Dictionary<CatalogItem, SiteMapNode>(); MenuType = mType; }
private void FillOneMenuType(string rootUrl, CatalogItemMenuType _mit) { var curMenuTypeHelper = new OneMenuTypeHashHelper(_mit); curMenuTypeHelper.HashUrl.Add(rootUrl.ToLower(), _root); curMenuTypeHelper.HashUrl.Add(rootUrl.ToLower() + "/", _root); curMenuTypeHelper.HashUrl.Add((rootUrl + "/default.aspx").ToLower(), _root); curMenuTypeHelper.HashParent.Add(_root, null); Stack<KeyValuePair<SiteMapNode, int?>> stack = new Stack<KeyValuePair<SiteMapNode, int?>>(); stack.Push(new KeyValuePair<SiteMapNode, int?>(_root, null)); while (stack.Count != 0) { KeyValuePair<SiteMapNode, int?> pair = stack.Pop(); SiteMapNodeCollection childs = new SiteMapNodeCollection(); curMenuTypeHelper.HashChilds[pair.Key] = childs; IEnumerable<CatalogItem> catalogItems = UrlManager.CatalogItems.GetCatalogItems(pair.Value??UrlManager.CatalogItems.RootCatalogItem.CatalogItemID, _mit); foreach (CatalogItem catalogItem in catalogItems) { string url = UrlManager.GetCatalogUrl(catalogItem.CatalogItemID); SiteMapNode node = new SiteMapNode( this, url, url, catalogItem.CatalogItemName, string.IsNullOrEmpty(catalogItem.CssClass) ? "" : catalogItem.CssClass /*прокидываем название css-ника через св-во узла Description*/); try { curMenuTypeHelper.HashParent.Add(node, pair.Key); } catch { continue; } childs.Add(node); curMenuTypeHelper.HashUrl.Add(node.Url.ToLower(), node); curMenuTypeHelper.CatalogItemHash.Add(node, catalogItem); curMenuTypeHelper.CatalogItemRevHash.Add(catalogItem, node); stack.Push(new KeyValuePair<SiteMapNode, int?>(node, catalogItem.CatalogItemID)); } } _menuHashes.Add(_mit, curMenuTypeHelper); }