多語言和自訂CSS

來源:互聯網
上載者:User

最近在一個SharePoint 2010項目中發現,在裝了英文、日文語言套件之後,在網站設定的語言設定中,選擇備用語言的時候,系統返回一個異常,大意是包含自訂樣式表(CSS)的網站不支援多語言。

之前一直沒太注意到底什麼算是“自訂CSS”,經過一番研究,發現了問題:

一般網站引用CSS的時候,引用的都是layouts目錄中的檔案(比如/_layouts/2052/Styles/corev4.css),這個CSS顯然是整個伺服器陣列共用的;但是出問題的這個網站引用的是本網站中的/_styles/corev4.css(這不是個虛擬路徑,就是在網站中的一個目錄,存在資料庫裡的)——這個就是所謂的“自訂CSS”。你想啊,人家在layouts裡面的CSS是按照語言劃分的,不同語言的情況下引用的是不同的CSS,而在_styles裡面,全都一樣,當然不成了,於是多語言就不幹了。

那麼下一個問題就是,這個自訂CSS到底是怎麼出現的?怎麼恢複成非自訂CSS?到底應該怎麼去修改預設的CSS?一個一個來。

一、自訂CSS是如何出現的?

其實自訂CSS從SharePoint 2007的時候就出現了,但是由於當時並沒有2010這種多語言機制,並沒有把這個問題凸顯出來。

經過一番調查,發現這個是由於我們的美工在使用SharePoint Designer改CSS的時候造成的。在SPD裡面開啟一個頁面,頁面裡面自然會列出若干class,而當我們按住Ctrl鍵點擊這些CSS的時候,就會開啟對應CSS檔案的編輯:

而當我們儲存這個CSS的時候:

看到“自訂樣式表”了吧?就是從這兒來的。一旦點了“是”,SharePoint就會把layouts下對應的這個CSS檔案儲存到網站的_styles目錄中(如果之前沒這個目錄會自動建立一個,注意這是個目錄,不是個文件庫)。其實這是非常合理的,總不能因為你要修改頁面裡的一個CSS,就要影響到整個伺服器陣列的所有網站吧?於是就有了這個類似於unghost的過程。

當然,使用物件模型的方式也可以很方便地完成這個過程,只需要一句話:

   1: spWeb.CustomizeCss("corev4.css");

(其實我就是翻SDK翻到的這個方法,然後用reflector確定了那個多語言就是這個東西造成的)

二、如何恢複成非自訂CSS?

既然知道了自訂的方法,恢複就有頭緒了。直接寫個Console,同樣用一句話搞定:

   1: spWeb.RevertCss("corev4.css");

三、到底應該如何自訂CSS?

標準的做法當然不是去修改layouts下的CSS檔案(除非你想整個伺服器陣列所有網站都變化)。你可以把你要改的地方單放到一個CSS裡,然後設定成網站的備用CSS,見:

上面這個介面是在網站設定 - 主版頁面(不是庫分類下的那個主版頁面),這是在開啟了發布功能的前提下才會出現的一個連結。如果沒有開啟發布功能的話,直接進去“/_Layouts/ChangeSiteMasterPage.aspx”這個頁面應該也行(我沒試過),或者乾脆用程式改一下。這個備用CSS會自動放在系統預設的CSS檔案之後進行引用,所以會覆蓋掉預設的CSS樣式(預設樣式中有一些是標記了“!important”的,在自訂CSS裡想要覆蓋這個設定的話也要加上這個)

當然你也可以改主版頁面,在系統CSS引用(主版頁面中的SharePoint:CssLink和SharePoint:Theme)之後,使用SharePoint:CssRegistration控制項進行引用,這樣也可以自動根據不同的語言自動進行切換(具體的寫法請自行msdn或者google)

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.