基于MOSS2007的全局导航用户控件的实现 [Ver2.0]

前些天已 经实现 件,但 当时 是把所有可能的 WebApplication Hardcode 在代 里了。 到后续扩展和变更的需要,同时也简化开发和调用,我稍微做了些改动,在控件中只封装一个 WebApplication 及其下面的 SiteCollection 。另外,在应用该控件的时候遇到一个棘手的问题,即:浮动菜单遇到 select 等控件时,层叠顺序不正确。查资料发现这是 IE6.0 及以下版本的一个 Bug 。尝试了很久才把问题解决,呵呵,其实很简单,是我太笨!另外,控件集成了MOSS2007的访问权限控制,没有网站访问权限的用户将不会看到该网站的链接项。


<% @ Control Language = " C# "  ClassName = " GlobalNavigator "   %>
<% @ Import Namespace = " System "   %>
<% @ Import Namespace = " System.Collections "   %>
<% @ Import Namespace = " System.Web.UI "   %>
<% @ Import Namespace = " System.Web.UI.WebControls "   %>
<% @ Import Namespace = " Microsoft.SharePoint "   %>
<% @ Import Namespace = " Microsoft.SharePoint.Administration "   %>

< script runat = " server " >

    
private   string  webAppName  =   string .Empty;
    
private   bool  visable  =   true ;
    
private   string  text  =   " SP Sites " ;
    
private   string  itemCssClass  =   string .Empty;
    
private   string  menuCssClass  =   string .Empty;
    
private   string  normalCssClass  =   string .Empty;
    
private   string  activeCssClass  =   string .Empty;
    
private   string  mLeaveScript  =   string .Empty;
    
private   string  mEnterScript  =   string .Empty;
    
private   string  mClickScript  =   string .Empty;

    
protected   void  Page_Load( object  sender, EventArgs e)
    
{
        
if (!Page.IsPostBack)
        
{
            
try
            
{
                mLeaveScript 
= "document.getElementById('{0}').className = '{1}'; document.getElementById('{2}').style.display = 'none';";
                mEnterScript 
= "document.getElementById('{0}').className = '{1}';";
                mClickScript 
= "document.getElementById('{0}').style.display = 'block';";
                pnlItem.Attributes.Add(
"onmouseleave"string.Format(mLeaveScript, lblWebApp.ClientID, normalCssClass, pnlMenuHold.ClientID));
                lblWebApp.Attributes.Add(
"onmouseenter"string.Format(mEnterScript, lblWebApp.ClientID, activeCssClass));
                lblWebApp.Attributes.Add(
"onclick"string.Format(mClickScript, pnlMenuHold.ClientID));

                pnlItem.Visible 
= visable;
                pnlItem.CssClass 
= itemCssClass;
                lblWebApp.CssClass 
= normalCssClass;
                lblWebApp.Text 
= text;
                pnlMenu.CssClass 
= menuCssClass;

                dlWebSites.DataSource 
= GetSiteList(webAppName);
                dlWebSites.DataBind();
            }

            
catch (Exception ex)
            
{
                lblWebApp.Text 
= ex.Message;
            }

        }

    }


    
public   string  WebAppName
    
{
        
get return webAppName; }
        
set { webAppName = value; }
    }


    
public   bool  Visable
    
{
        
get return visable; }
        
set { visable = value; }
    }


    
public   string  Text
    
{
        
get return text; }
        
set { text = value; }
    }


    
public   string  ItemCssClass
    
{
        
get return itemCssClass; }
        
set { itemCssClass = value; }
    }


    
public   string  MenuCssClass
    
{
        
get return menuCssClass; }
        
set { menuCssClass = value; }
    }


    
public   string  NormalCssClass
    
{
        
get return normalCssClass; }
        
set { normalCssClass = value; }
    }


    
public   string  ActiveCssClass
    
{
        
get return activeCssClass; }
        
set { activeCssClass = value; }
    }


    
private  ArrayList GetSiteList( string  appName)
    
{
        ArrayList siteList 
= new ArrayList();
        SPWebServiceCollection webServices 
= new SPWebServiceCollection(SPFarm.Local);

        
foreach (SPWebService webService in webServices)
        
{
            
foreach (SPWebApplication webApp in webService.WebApplications)
            
{
                
if (webApp.IsAdministrationWebApplication || webApp.Name != appName)
                    
continue;

                
foreach (SPSite site in webApp.Sites)
                
{
                    SPWeb web 
= null;
                    SPBasePermissions openRight 
= SPBasePermissions.Open;
                    SPBasePermissions viewRight 
= SPBasePermissions.Open;
                    SPSecurity.RunWithElevatedPrivileges(
delegate()
                    
{
                        
using (SPSite tempSite = new SPSite(site.ID))
                        
{
                            web 
= tempSite.RootWeb;
                            openRight 
= SPBasePermissions.Open;
                            viewRight 
= SPBasePermissions.ViewPages;
                        }

                    }

                    );

                    
string loginName = SPContext.Current.Web.CurrentUser.LoginName;
                    
//siteList.Add(new WebSiteInfo(web.Description, site.Url));
                    if (web.DoesUserHavePermissions(loginName, SPBasePermissions.Open) && web.DoesUserHavePermissions(loginName, SPBasePermissions.ViewPages))
                        siteList.Add(
new WebSiteInfo((web.Description == string.Empty) ? web.Title : web.Description, site.Url));
                }

            }

        }


        
return siteList;
    }


    
class  WebSiteInfo
    
{
        
private string siteTitle;
        
private string siteUrl;

        
public WebSiteInfo(string siteTitle, string siteUrl)
        
{
            
this.siteTitle = siteTitle;
            
this.siteUrl = siteUrl;
        }


        
public string SiteTitle
        
{
            
get return siteTitle; }
        }


        
public string SiteUrl
        
{
            
get return siteUrl; }
        }

    }

</ script >

< asp:Panel ID = " pnlItem "  runat = " server " >
    
< asp:Label ID = " lblWebApp "  runat = " server "  Text = " SP Sites " ></ asp:Label >< br  />
    
< asp:Panel ID = " pnlMenuHold "  runat = " server "  Style = " display: none; position: absolute;
        z - index:  20 ; " >
         < iframe style = " position: absolute; z-index: -1; filter: alpha(opacity=0); " ></ iframe >
        
< asp:Panel ID = " pnlMenu "  runat = " server " >
            
< asp:DataList ID = " dlWebSites "  runat = " server "  RepeatLayout = " Flow " >
                
< ItemTemplate >
                    
< asp:HyperLink ID = " HyperLink1 "  NavigateUrl = ' <%# DataBinder.Eval(Container, "DataItem.SiteUrl")%> '
                        runat
= " server "  Width = " 100% " ><% # DataBinder.Eval(Container,  " DataItem.SiteTitle " ) %></ asp:HyperLink >
                
</ ItemTemplate >
            
</ asp:DataList >
        
</ asp:Panel >
    
</ asp:Panel >
</ asp:Panel >

转载于:https://www.cnblogs.com/easyjacky/articles/1024574.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值