Navigation

This post has 51 Replies | 13 Followers

blankenbush
Not Ranked
Posts 12
Points 180
By: blankenbush
Posted: Wed, Apr 18 2007 2:22 PM

How do you create the drop downs in the navigation bar like that on http://communityserver.org/community/?  The community main item has four sub items; forums, blogs, downloads, photos.

David

 

 
blankenbush
Not Ranked
Posts 12
Points 180
By: blankenbush
Posted: Fri, Apr 27 2007 1:37 PM In reply to

To add the drop-downs to the navigation bar on cs.org, we created a SiteUrls_override.config file including the following text:

<?xml version="1.0" encoding="utf-8" ?>
<Overrides>
  <Override xpath="/SiteUrls/locations" mode="add">
    <location name="cs-learnmore" path="/learnmore/" themeDir="learnmore">
      <url name="cs-learnmore" path="" pattern="default.aspx" physicalPath="##themeDir##" vanity="{2}" page="overview.aspx" />
    </location>
    <location name="cs-community" path="/community/" themeDir="community">
      <url name="cs-community" path="" pattern="default.aspx" physicalPath="##themeDir##" vanity="{2}" page="home.aspx" />
    </location>
    <location name="cs-contact" path="/contact/" themeDir="contact">
      <url name="cs-contact" path="" pattern="default.aspx" physicalPath="##themeDir##" vanity="{2}" page="contactform.aspx" />
    </location>
  </Override>

  <Override xpath="/SiteUrls/navigation" mode="update">
    <navigation>
 <link name="home" text="Home" resourceUrl="home" roles="Everyone" />
 <link name="cs-learnmore" text="Learn More" resourceUrl="cs-learnmore" roles="Everyone" />
 <link name="cs-community" text="Community" resourceUrl="cs-community" roles="Everyone" />
 <link name="cs-showcase" text="Showcase" navigateUrl="/cs.org/blogs/showcase/default.aspx" roles="Everyone" />
 <link name="cs-documentation" text="Documentation" navigateUrl="
http://docs.communityserver.org/" roles="Everyone" />
 <link name="cs-contact" text="Contact Us" resourceUrl="cs-contact" roles="Everyone" />
 <link name="cs-getitnow" text="Get It Now" navigateUrl="
http://get.communityserver.org/" roles="Everyone" />
    </navigation>
  </Override>
</Overrides>

To define the updated top-level menu items (within the <navigation> node).  Then, following markup was used to implement the navigation bar in the Master.master file,

<TWC:PopupMenu ID="CommunityPopup" runat="server" MenuGroupCssClass="CSContextMenuGroup" MenuItemCssClass="CSContextMenuItem" MenuItemSelectedCssClass="CSContextMenuItemHover" MenuItemExpandedCssClass="CSContextMenuItemExpanded" MenuItemIconWidth="0" MenuItemIconHeight="0" MenuDirection="UpDown" />
<script type="text/javascript">
// <![CDATA[
var navigation_popup = null;
function navigation_showPopup(popup, element) { if (popup && !popup.IsOpen()) { navigation_hidePopup(); popup.OpenAtElement(element); navigation_popup = popup; } }
function navigation_hidePopup() { if (navigation_popup) { navigation_popup.Close(); navigation_popup = null; } }
// ]]>
</script>
<div id="CommonNavigation">
<CSControl:NavigationList runat="server">
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
    <CSControl:CSLinkData runat="server" Tag="Li" LinkCssClass="Selected" LinkTo="Link" Property="Text" onmouseover="navigation_hidePopup();">
        <DisplayConditions>
            <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />
            <CSControl:Conditions Operator="Not" runat="server">
                <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="cs-community" />
            </CSControl:Conditions>
        </DisplayConditions>
    </CSControl:CSLinkData>
    <CSControl:CSLinkData runat="server" Tag="Li" LinkTo="Link" Property="Text" onmouseover="navigation_hidePopup();">
        <DisplayConditions Operator="Not">
            <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />
            <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="cs-community" />
        </DisplayConditions>
    </CSControl:CSLinkData>
                                       
    <CSControl:CSLinkData runat="server" Tag="Li" LinkCssClass="Selected" LinkTo="Link" ContainerId="communityMenu" Property="Text">
        <DisplayConditions>
            <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />
            <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="cs-community" />
        </DisplayConditions>
    </CSControl:CSLinkData>
    <CSControl:CSLinkData runat="server" Tag="Li" LinkTo="Link" Property="Text" ContainerId="communityMenu">
        <DisplayConditions Operator="And">
            <CSControl:Conditions Operator="Not" runat="server">
                <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />
            </CSControl:Conditions>
            <CSControl:CSLinkPropertyValueComparison runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="cs-community" />
        </DisplayConditions>
    </CSControl:CSLinkData>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</CSControl:NavigationList>
</div>

Note the existence of the <TWC:PopupMenu id="CommunityPopup" /> which implements the pop-up menu and the separate handling of the link in the <navigation> region of our SiteUrls_override.config file with name "cs-community". 

Finally, we added the following code to the master.Master file to popuplate the pop-up menu and register the javascript that attaches it to the "cs-community" tab item:

<script language="C#" runat="server">

    protected override void OnInit(EventArgs e)
    {
        Telligent.Glow.PopupMenu communityMenu = CSControlUtility.Instance().FindControl(this, "CommunityPopup") as Telligent.Glow.PopupMenu;
        if (communityMenu != null)
        {
            communityMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Forums", SiteUrls.Instance().ForumsHome, null, null));
            communityMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Blogs", SiteUrls.Instance().WeblogsHome, null, null));
            communityMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Downloads", CommunityServer.Files.Components.FileGalleryUrls.Instance().Home, null, null));
            communityMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Photos", SiteUrls.Instance().GalleriesHome, null, null));

            if (CSContext.Current.User.IsAdministrator)
                communityMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Control Panel", SiteUrls.Instance().ControlPanel, null, null));

            Page.ClientScript.RegisterStartupScript(this.GetType(), "menus", @"
             <script type=""text/javascript"">
                    // <![CDATA[
                    var menu = document.getElementById('communityMenu');
                    if (menu)
                        menu.onmouseover= new Function('navigation_showPopup(" + communityMenu.ClientID + @", this);');
                    // ]]>
                    </" + "script>", false);
        }
       
        base.OnInit(e);
    }

</script>

Security can be checked to ensure that only the proper users will see each of the pop-up items (similar to the "Control Panel" menu item).  Note, too, the javascript that is registered -- this is used to attach the pop-up menu to the "cs-community" tab item.

 

 
  • Post Points: 20 |
torgu
Top 75 Contributor
Posts 253
Points 3,255
By: torgu
Posted: Fri, Apr 27 2007 2:06 PM In reply to

seems like gold suport only or something... permission denied... 

// Tore - CS hobbyist

 
  • Post Points: 20 |
NorthlandSticks
Top 75 Contributor
Posts 271
Points 3,885
By: NorthlandSticks
Posted: Sun, May 6 2007 3:26 PM In reply to

I have made an attempt at replicating this on my site and it's no where near working. I could really use some help. Here is what I have (I'll post each page in a separate post for ease of reading). Keep in mind that I am a self taught, beginning programmer. I am trying to make the "Advice Lounge, Music Scene, Movie Buzz, Fab Fashion" menu items within the popout menu from the main menu item "Shows". The Shows menu item should not be clickable:

SiteUrls_override.config

<Overrides>

<Override xpath="/SiteUrls/locations" mode="add">

<!-- Shows Pages -->

<location name="shows" path="/shows/" themeDir="shows" >

<url name="AdviceLounge" path="advicelounge.aspx" pattern="AdviceLounge.aspx" physicalPath="##themeDir##" vanity="{2}" page="advicelounge.aspx" />

<url name="MusicScene" path="musicscene.aspx" pattern="MusicScene.aspx" physicalPath="##themeDir##" vanity="{2}" page="musicscene.aspx" />

<url name="MovieBuzz" path="moviebuzz.aspx" pattern="MovieBuzz.aspx" physicalPath="##themeDir##" vanity="{2}" page="moviebuzz.aspx" />

<url name="FabFashion" path="fabfashion.aspx" pattern="FabFashion.aspx" physicalPath="##themeDir##" vanity="{2}" page="fabfashion.aspx" />

</location>

</Override>

<Override xpath="/SiteUrls/navigation" mode="update">

<navigation>

<link name="home" resourceUrl="home" resourceName="home" roles="Everyone" /><link name="blog" resourceUrl="webloghome" resourceName="weblogs" roles="Everyone" applicationType = "Weblog" />

<link name="forums" resourceUrl="forumshome" resourceName="forums" roles="Everyone" applicationType = "Forum" />

<link name="gallery" resourceUrl="galleryhome" resourceName="photos" roles="Everyone" applicationType = "Gallery" />

<link name="files" resourceUrl="fileshome" resourceName="files" roles="Everyone" applicationType = "FileGallery" />

<link name="shows" resourceUrl="shows" resourceName="shows" roles="Everyone" />

</navigation>

</Override>

</Overrides>

 
  • Post Points: 5 |
NorthlandSticks
Top 75 Contributor
Posts 271
Points 3,885
By: NorthlandSticks
Posted: Sun, May 6 2007 3:39 PM In reply to

My Navigation Section in the SiteUrls.config

<navigation>

<!--

name: look up value

resourceUrl: maps to url name in SiteUrls/Urls

resourceName: text for link. Maps to the language resource files

roles: Which users can view this link.

 

You can also specify actual links here like the following:

<link name="mylink" navigateUrl="http://www.mysite.com/" text="My Link" />

If no roles attribute is given, it will assume it is for Everyone. You can

specify multiple roles by separating them with a comma (,).

-->

<link name="home" resourceUrl="home" resourceName="home" roles="Everyone" />

<link name="blog" resourceUrl="webloghome" resourceName="weblogs" roles="Everyone" applicationType = "Weblog" />

<link name="forums" resourceUrl="forumshome" resourceName="forums" roles="Everyone" applicationType = "Forum" />

<link name="gallery" resourceUrl="galleryhome" resourceName="photos" roles="Everyone" applicationType = "Gallery" />

<link name="files" resourceUrl="fileshome" resourceName="files" roles="Everyone" applicationType = "FileGallery" />

<link name="advicelounge" resourceUrl="AdviceLounge" resourceName="advicelounge" roles="Everyone" />

<link name="musicscene" resourceUrl="MusicScene" resourceName="musicscene" roles="Everyone" />

<link name="moviebuzz" resourceUrl="MovieBuzz" resourceName="moviebuzz" roles="Everyone" />

<link name="fabfashion" resourceUrl="FabFashion" resourceName="fabfashion" roles="Everyone" />

<link name="invite" resourceUrl="user_Invite" resourceName="invite" roles="SystemAdministrator,BlogAdministrator,ForumsAdministrator,Moderator,GalleryAdministrator,FileAdministrator,ReaderAdministrator,MembershipAdministrator,Registered Users" />

<link name="controlpanel" resourceUrl="controlpanel" resourceName="controlpanel" roles="SystemAdministrator,BlogAdministrator,ForumsAdministrator,Moderator,GalleryAdministrator,FileAdministrator,ReaderAdministrator,MembershipAdministrator" />

</navigation>

 
  • Post Points: 5 |
NorthlandSticks
Top 75 Contributor
Posts 271
Points 3,885
By: NorthlandSticks
Posted: Sun, May 6 2007 3:39 PM In reply to

My Shows Pages section in the SiteUrls.config

<!-- Shows Pages -->

<location name="shows" path="/shows/" themeDir="shows" >

<url name="AdviceLounge" path="advicelounge.aspx" pattern="AdviceLounge.aspx" physicalPath="##themeDir##" vanity="{2}" page="advicelounge.aspx" />

<url name="MusicScene" path="musicscene.aspx" pattern="MusicScene.aspx" physicalPath="##themeDir##" vanity="{2}" page="musicscene.aspx" />

<url name="MovieBuzz" path="moviebuzz.aspx" pattern="MovieBuzz.aspx" physicalPath="##themeDir##" vanity="{2}" page="moviebuzz.aspx" />

<url name="FabFashion" path="fabfashion.aspx" pattern="FabFashion.aspx" physicalPath="##themeDir##" vanity="{2}" page="fabfashion.aspx" />

</location>

 
  • Post Points: 5 |
NorthlandSticks
Top 75 Contributor
Posts 271
Points 3,885
By: NorthlandSticks
Posted: Sun, May 6 2007 3:41 PM In reply to

I wasn't sure if I was to replace the original nav section in the master.master, or just include the following along with. I replaced the original:

<div id="CommonNavigation">

<CSControl:NavigationList ID="NavigationList1" runat="server">

<HeaderTemplate><ul></HeaderTemplate>

<ItemTemplate>

<CSControl:CSLinkData ID="CSLinkData1" runat="server" Tag="Li" LinkCssClass="Selected" LinkTo="Link" Property="Text" onmouseover="navigation_hidePopup();">

<DisplayConditions>

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison1" runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />

<CSControl:Conditions ID="Conditions1" Operator="Not" runat="server">

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison2" runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="shows" />

</CSControl:Conditions>

</DisplayConditions>

</CSControl:CSLinkData>

 

<CSControl:CSLinkData ID="CSLinkData2" runat="server" Tag="Li" LinkCssClass="Selected" LinkTo="Link" ContainerId="showsMenu" Property="Text">

<DisplayConditions>

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison5" runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison6" runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="shows" />

</DisplayConditions>

</CSControl:CSLinkData>

 

<CSControl:CSLinkData ID="CSLinkData3" runat="server" Tag="Li" LinkTo="Link" Property="Text" ContainerId="showsMenu">

<DisplayConditions Operator="And">

<CSControl:Conditions ID="Conditions2" Operator="Not" runat="server">

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison7" runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />

</CSControl:Conditions>

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison8" runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="shows" />

</DisplayConditions>

</CSControl:CSLinkData>

 

<CSControl:CSLinkData ID="CSLinkData4" runat="server" Tag="Li" LinkTo="Link" Property="Text" onmouseover="navigation_hidePopup();">

<DisplayConditions Operator="Not">

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison3" runat="server" ComparisonProperty="IsSelected" Operator="IsSetOrTrue" />

<CSControl:CSLinkPropertyValueComparison ID="CSLinkPropertyValueComparison4" runat="server" ComparisonProperty="Name" Operator="EqualTo" ComparisonValue="shows" />

</DisplayConditions>

</CSControl:CSLinkData>

 

 

</ItemTemplate>

<FooterTemplate></ul></FooterTemplate>

</CSControl:NavigationList>

</div>

 
  • Post Points: 5 |
NorthlandSticks
Top 75 Contributor
Posts 271
Points 3,885
By: NorthlandSticks
Posted: Sun, May 6 2007 3:42 PM In reply to

master.master <script> area:

 

<script language="C#" runat="server">

protected override void OnInit(EventArgs e)

{

switch (CSContext.Current.SiteThemeData.GetIntValue("columns", 2))

{

case -1:

// one column, left (right content is rendered below left content)

lc.Controls.AddAt(0, new LiteralControl("<div id=\"CommonSidebarLeft\">"));

lc.Controls.Add(rc);

lc.Controls.Add(
new LiteralControl("</div>"));

break;

case 1:

// one column, right (left content is rendered above right content)

rc.Controls.AddAt(0, lc);

rc.Controls.AddAt(0,
new LiteralControl("<div id=\"CommonSidebarRight\">"));

rc.Controls.Add(new LiteralControl("</div>"));

break;

default:

// two columns

lc.Controls.AddAt(0, new LiteralControl("<div id=\"CommonSidebarLeft\">"));

lc.Controls.Add(new LiteralControl("</div>"));

rc.Controls.AddAt(0, new LiteralControl("<div id=\"CommonSidebarRight\">"));

rc.Controls.Add(new LiteralControl("</div>"));

break;

}

Telligent.Glow.
PopupMenu showsMenu = CSControlUtility.Instance().FindControl(this, "ShowsPopup") as Telligent.Glow.PopupMenu;if (showsMenu != null)

{

showsMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Music Scene", SiteUrls.Instance().MusicScene, null, null));

showsMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Advice Lounge", SiteUrls.Instance().AdviceLounge, null, null));

showsMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Fab Fashion", SiteUrls.Instance().FabFashion, null, null));

showsMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Movie Buzz", SiteUrls.Instance().MovieBuzz, null, null));

if (CSContext.Current.User.IsAdministrator)

showsMenu.MenuItems.Add(new Telligent.Glow.PopupMenuItem("Control Panel", SiteUrls.Instance().ControlPanel, null, null));Page.ClientScript.RegisterStartupScript(this.GetType(), "menus", @"

<script type=""text/javascript"">

// <![CDATA[

var menu = document.getElementById('showsMenu');

if (menu)

menu.onmouseover= new Function('navigation_showPopup("
+ showsMenu.ClientID + @", this);');

// ]]>

</"
+ "script>", false);

}

base.OnInit(e);

}

</script>

 
  • Post Points: 20 |
strangereon
Top 500 Contributor
Posts 47
Points 685