2011-07-20 199 views
3

我想在母版頁下面的代碼片段如下運行,如果當前加載的頁面處於編輯模式:的SharePoint自定義樣式

<!-- If edit mode, then add the following script --> 
<script type="text/javascript"> 
    document.documentElement.className += ' edit-mode'; 
</script> 
<!-- End if --> 

簡單地說,我的腳本將添加一個edit-mode類到html標籤,就是這樣。

我該怎麼做?

感謝

回答

6

可以使用PublishingWebControls:EditModePanel控制。當頁面處於編輯模式時,該控件將處理包含在該標籤中的信息。

<PublishingWebControls:EditModePanel runat="server" id="IncludeEditModeClass" > 
    <asp:Content> 
     <script type="text/javascript"> 
       document.documentElement.className += ' edit-mode'; 
     </script> 
    </asp:Content> 
</PublishingWebControls:EditModePanel> 
+0

偉大的解決方案!唯一的缺點是我必須在每個頁面佈局中包含此標籤,因爲我無法將其注入到母版頁中,但除此之外,我喜歡它,謝謝@rossri太多了^ _^ –

0

,因爲沒有的SharePoint專家,我已經做了變通方法來解決我的問題,而我下面的兩個版本的解決方案,首先在jQuery和第二使用純JavaScript,

主要是我試圖尋找僅存在於編輯模式中的特殊類,例如.ms-SPZoneLabel是以編輯模式包裝web部分區域的類,.edit-mode-panel是包裝字段以在文章頁中輸入數據的類,並且維基頁中的.ewiki-margin ...

// jQuery version 
$(function(){ 
    if ($('.ms-SPZoneLabel, .edit-mode-panel, .ewiki-margin').length) { 
     document.documentElement.className += ' edit-mode'; 
    } 
}); 

// pure javascript way 
(function(){ 

    // defining fall back getElementsByClassName if not exist (IE) 
    if(!document.getElementsByClassName) { 
     document.getElementsByClassName = function(cl) { 
      var retnode = []; 
      var myclass = new RegExp('\\b'+cl+'\\b'); 
      var elem = this.getElementsByTagName('*'); 
      for (var i = 0; i < elem.length; i++) { 
       var classes = elem[i].className; 
       if (myclass.test(classes)) { 
        retnode.push(elem[i]); 
       } 
      } 
      return retnode; 
     }; 
    } 
    // then checking if there's any webpart zone in the page 
    if(document.getElementsByClassName('ms-SPZoneLabel').length || 
     document.getElementsByClassName('edit-mode-panel').length || 
     document.getElementsByClassName('ewiki-margin').length) { 
     document.documentElement.className += ' edit-mode'; 
    } 

})(); 

如果有人有更好的解決方案(如一個ASP標籤,以確定在服務器端) 請寫下您的解決方案

+0

我開始賞金,誰能提供更好的乾淨的解決方案? –

0

此代碼不工作,如果你把它作爲一個書籤:

javascript:if%20(document.forms['aspnetForm']['MSOLayout_InDesignMode']%20!=%20null)%20document.forms['aspnetForm']['MSOLayout_InDesignMode'].value%20=%201;if%20(document.forms['aspnetForm']['MSOAuthoringConsole_FormContext']%20!=%20null)%20document.forms['aspnetForm']['MSOAuthoringConsole_FormContext'].value%20=%201;theForm.submit(); 

我試圖將其轉換爲普通的JavaScript,但它不會在我的Firefox JavaScript控制檯工作。

SP_EditPage: function(){ 
    var thisdocument = window.content.document; 
    if (thisdocument.forms['aspnetForm']['MSOLayout_InDesignMode'] != null) 
     thisdocument.forms['aspnetForm']['MSOLayout_InDesignMode'].value = 1; 
    if (thisdocument.forms['aspnetForm']['MSOAuthoringConsole_FormContext'] != null) 
     thisdocument.forms['aspnetForm']['MSOAuthoringConsole_FormContext'].value = 1; 
     theForm.submit(); 
}, 

我很感興趣,如果任何人都可以得到它在純javascript工作!它告訴我: 錯誤:類型錯誤:thisdocument.forms.aspnetForm未定義 源文件:的JavaScript命令行 :2

的書籤來自這個傢伙的網站: http://blog.mastykarz.nl/sharepoint-developer-bookmarklets/

這裏是另外一個。它在側邊欄打開的情況下啓動編輯頁面。這一次對我的作品罰款:

SP_EditPage: function(){ 
    var thisdocument = getBrowser().contentWindow.document; 
    if(thisdocument.location.href.search('ToolPaneView=') == -1){ 
     if (thisdocument.location.search.indexOf('?') == 0){ 
      thisdocument.location=(thisdocument.location.href + '&ToolPaneView=2'); 
     }else{ 
      thisdocument.location=(thisdocument.location.href + '?ToolPaneView=2'); 
     } 
    } else { 
     thisdocument.location=thisdocument.location.href; 
    } 
}, 
+0

爲什麼我需要一個書籤嗎? –

+0

@anasnakawa好吧,如果你只需要它來幫助管理員,小書籤就像一個瀏覽器工具欄按鈕,可以讓他們自動進入編輯模式。我已經調整了代碼,使其工作在Firefox的工具欄按鈕,這就是爲什麼我有var thisdocument = getBrowser()。congentWindow.document - 如果你只是希望代碼運行在常規的HTML頁面,你會改變那部分只是window.document。現在,您可以將該JavaScript放入您的母版頁中,如果這是您正在尋找的內容。 – bgmCoder

+0

好的,但我不想要一個讓我進入編輯模式的按鈕,我只是想添加一個名爲'edit-mode'的CSS類到html標籤,所以我可以修復和對齊一些樣式,當頁面是在編輯模式下查看! 看起來像你有錯了我的朋友整個想法 –

0

要得到你需要添加下面的代碼在母版所需的結果。

<script type="text/javascript"> 
 
\t \t var inDesignMode = document.forms[MSOWebPartPageFormName].MSOLayout_InDesignMode.value; 
 
\t \t 
 
\t \t if (inDesignMode == "1") 
 
\t \t { 
 
\t \t  // page is in edit mode 
 
\t \t \t \t <!-- If edit mode, then add the following script --> 
 
\t \t \t \t 
 
\t \t \t \t \t document.documentElement.className += ' edit-mode'; 
 
\t \t \t \t 
 
\t \t \t \t <!-- End if --> 
 
\t \t 
 
\t \t } 
 
\t \t else 
 
\t \t { 
 
\t \t  // page is in browse mode 
 
\t \t } 
 

 
    </script>