Ako schovať selektívne item v sitemap

V prípade, že použijeme ako datasource obyčajný SiteMapDataSource a pre zobrazovanie Menu a v tomto menu zavesíme na MenuItemDataBound zavesíme nasledujúci eventhandler :

    protected void subMenu_MenuItemDataBound(object sender, MenuEventArgs e)
    {
        System.Web.UI.WebControls.Menu menu = (System.Web.UI.WebControls.Menu)sender;
        SiteMapNode mapNode = (SiteMapNode)e.Item.DataItem;

        System.Web.UI.WebControls.MenuItem itemToRemove = menu.FindItem(mapNode.Title);

        if (mapNode["type"] == "hidden")
        {
            System.Web.UI.WebControls.MenuItem parent = e.Item.Parent;
            if (parent != null)
            {
                parent.ChildItems.Remove(e.Item);
            }
        }
    }

 Môžeme v sitemap súbore použiť pre menuitem, ktorý má predka (Parenta) nasledujúci atribút : type="hidden".

Prečo píšem predka? Pretože ak nezobrazíme root node, parent v našom kóde bude null. Tým pádom môžeme skryť len položky ktoré niesú v zobrazovanom roote.

No a možno sa pýtajú podaktorí, k čomu je toto celé dobré? Napr : máte masterpage a v ňom menu. Chcete, aby sa zobrazovalo na všetkých stránkach. Dáta v DB zobrazujete napr. spôsobom, ktorý najprv. zobrazí všetky položky a pre detail položky sa presmeruje na iný page, ktorý vytiahne k položke doplňujúce informácie. Ak chcete menu, musí byť aj táto podstránka v sitemap, no nechcete dovoliť užívateľom sa na ňu dostať z menu, teda má aj nemá byť v sitemap. Viem, je to schiza. Smile

Bookmark and Share
Publikované Thursday, October 01, 2009 3:00 PM dudok

Komentáre

# re: Ako schovať selektívne item v sitemap

Wednesday, October 14, 2009 12:45 AM T

co tak si napisat vlastny site map provider, resp urobit override IsAccesibleToUser(tusim) metody...a pripadne si dorobit dalsi atribut do sitemapy, ktory bude hovorit o tom, ci sa zobrazuje dany node v ramci navigacie alebo nie ;-)