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;
 }
Example #2
0
 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);
        }