WSS頁面定製系列(1)--如何啓用表單頁面的編輯模式

wss的大多數頁面右上角的“站點操作”菜單都有一個編輯網頁菜單項,用這個菜單項,可以啓用當前頁面的設計模式,修改或添加webpart。

但是奇怪的是,所有的表單頁面(用來新建,編輯,查看列表項的頁面)都不支持頁面的設計。

我們可以看到,表單頁面的“編輯網頁”菜單項是沒有的?
查找skd,發現了這麼一句:

Although you can add Web Parts to the Display, Edit, and New forms for list items (DispForm.aspx, EditForm.aspx, and NewForm.aspx), doing so is not recommended or supported in Windows SharePoint Services. Adding Web Parts to list view pages (AllItems.aspx) is supported.

不支持???
見鬼了,只說不支持,但是沒說爲什麼不支持。
客戶的需求多變,有的時候我們就需要在這些頁面上加點什麼東西,怎麼辦呢?
我們可以用SharePointDesigner。用SPD打開要修改的頁面,就可以操作了,包括添加webpart。
但是,一定要記住,你可以做任何操作,但是一定不要刪除那個
ListFormWebPart ,如果刪除它,你修改的頁面就“崩潰”了。
哦,可能是這個原因吧,所以wss不支持用戶直接在頁面上編輯這些表單頁面的webpart,如果用戶不小心刪除了ListFormWebPart,豈不是迴天無術。
危險啊,這篇文章好像不應該繼續寫下去了~

但是本着探討技術的目的,還是繼續吧,而且畢竟,編輯頁面普通用戶一般是不會去做的。

用SPD是可以編輯了,那還有什麼方法,可以讓頁面上直接出現那個“編輯網頁”菜單,這樣子,我們就不需要每次做一點操作都需要藉助SPD這位老兄了,SPD這個兄弟的業務模式有點奇怪:你每次藉助它改了一個頁面,它都會把那個頁面“留下”,留到數據庫裏,產生unghost效果。數據庫裏的頁面運行效率會比原始的頁面低那麼一點。

用refelector研究了一下form頁面的基類:Microsoft.SharePoint.WebPartPages.WebPartPage,沒有發現什麼有價值的地方。
繼續研究那個菜單控件類:Microsoft.SharePoint.WebControls.SiteActions,哈哈,發現了一點門路:
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;
}
SiteActions加載的時候會獲取ID爲MenuItem_EditPage的菜單項,按照條件設置它是否顯示。
鬱悶的是,ShowEditPageMenuItem的代碼反編譯不出,爲什麼要隱藏還是不得而知啊。
但是沒關係,我們只要讓這段代碼“找不到”
“編輯網頁” 菜單項就可以了。
還是要讓spd兄弟幫下忙,打開當前站點的母板頁,找到這一處代碼:
<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);"
/>       
id="MenuItem_EditPage"隨便改成其他的名字就可以了。
<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);"
                                
/>       

ok,現在看所有的form頁面:


以後,我們再也不用麻煩SPD兄弟來修改form頁面了。

最後在提醒一下:千萬不要刪了ListFormWebPart(就是我們看到的那個編輯控件),實在是需要它“隱退”的時候,如果你用SPD修改頁面,
可以設置相應的WebPartZone的Vsibile屬性爲false,如果你在頁面上設計,可以把ListFormWebPart“關閉”。

看下圖,選“關閉”,不要選“刪除”,也不要去點那個叉叉!



後記:
後來發現了一個更簡單的方法,只要在要啓用編輯模式的頁面URL上附加一個參數即可:
&DisplayMode=Design

類似:

http://jyserver:81/Lists/WF2/DispForm.aspx?ID=1&Source=http%3A%2F%2Fjyserver%3A81%2FLists%2FWF2%2FAllItems%2Easpx&DisplayMode=Design



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章