【IT168技术文档】
用SPD是可以编辑了,那还有什么方法,可以让页面上直接出现那个“编辑网页”菜单,这样子,我们就不需要每次做一点操作都需要借助SPD这位老兄了, SPD这个兄弟的业务模式有点奇怪:你每次借助它改了一个页面,它都会把那个页面“留下”,留到数据库里,产生unghost效果。数据库里的页面运行效率会比原始的页面低那么一点。
用refelector研究了一下form页面的基类:Microsoft.SharePoint.WebPartPages.WebPartPage,没有发现什么有价值的地方。
继续研究那个菜单控件类:Microsoft.SharePoint.WebControls.SiteActions,哈哈,发现了一点门路:
SiteActions加载的时候会获取ID为MenuItem_EditPage的菜单项,按照条件设置它是否显示。protected override void CreateChildControls() { base.CreateChildControls(); base.MenuTemplateControl.LargeIconMode = true; base.MenuControl.HoverCellActiveCssClass = "ms-siteactionsmenuhover"; base.MenuControl.HoverCellInActiveCssClass = ""; base.MenuControl.ArrowImageUrl = "/_layouts/images/whitearrow.gif"; MenuItemTemplate menuItem = base.GetMenuItem("MenuItem_EditPage"); if (menuItem != null) { while (!this.ShowEditPageMenuItem) { menuItem.Visible = false; break; } } base.MenuControl.ID = "SiteActionsMenu"; base.MenuControl.UseShortId = true; }
郁闷的是,ShowEditPageMenuItem的代码反编译不出,为什么要隐藏还是不得而知啊。
但是没关系,我们只要让这段代码“找不到” “编辑网页” 菜单项就可以了。
还是要让spd兄弟帮下忙,打开当前站点的母板页,找到这一处代码:
把id="MenuItem_EditPage"随便改成其他的名字就可以了。<SharePoint:MenuItemTemplate runat="server" id="MenuItem_EditPage" Text="<%$Resources:wss,siteactions_editpage%>" Description="<%$Resources:wss,siteactions_editpagedescription%>" ImageUrl="/_layouts/images/ActionsEditPage.gif" MenuGroupId="100" Sequence="200" ClientOnClickNavigateUrl="javascript:MSOLayout_ChangeLayoutMode(false);" />
<SharePoint:MenuItemTemplate runat="server" id="MenuItem_EditPage2" Text="<%$Resources:wss,siteactions_editpage%>" Description="<%$Resources:wss,siteactions_editpagedescription%>" ImageUrl="/_layouts/images/ActionsEditPage.gif" MenuGroupId="100" Sequence="200" ClientOnClickNavigateUrl="javascript:MSOLayout_ChangeLayoutMode(false);" />