在MOSS相關的項目中,我們經常要將內容彙總到首頁:比方說新聞、通知、文檔等內容,由於首頁內容相對較多,因此要對各部分內容顯示的地區加以限制,才能保證整個頁面配置的和諧與統一,限制標題顯示的字元數,就成了一個必須的要求。MOSS的文件庫和列表本身的試圖並不提供本身的功能,所以要實現這樣的功能就必須自己動手,一是寫自己的webpart,取出庫和列表的內容,然後按照自己的要求去展示內容,這種方法的優點是通用性強,並且可以將webpart寫的更加通用些,一次投入就一直受益,適合有開發能力的公司或個人;這種方法在SPS2003下就有人做了相應的工作。
那麼,對於像我這樣的專註於系統而沒有開發經驗的人來說,是不是就沒有辦法了呢?答案當然是否定的!在Sharepoint designer中,有一項神奇的功能,可以將MOSS的庫和列錶轉換成XSLT資料檢視,藉助於XSLT,我們可以靈活的控制內容展示的形式。
比如,我們想對這個列表的標題的字數加以限制,當字數<=12時,則顯示全部的標題,如果字數>12,則截取前面的9個字,並在後面加上...
在SPD中找到我們插入頁面的庫或列表,右鍵,選擇轉換成XSLT試圖。
對於列表,挑選清單的標題,對應的XSL代碼為:
<xsl:value-of disable-output-escaping="no" select="@Title" />
將代碼替換為:
<xsl:if test="string-length(@Title)<=12"> 判斷如果標題的字串長度是否<=12
<xsl:value-of disable-output-escaping="no" select="@Title" /> 顯示完整標題:select="@Title"
</xsl:if>
<xsl:if test="string-length(@Title)>12"> 判斷如果標題的字串長度是否>12
<xsl:value-of select="substring(string(@Title),1,9)" />... 顯示標題的前9個字元,並在後面加上 ...
</xsl:if>
對於文件庫,select的值不是標題,而是將檔案名稱處理後的標題,代碼如下:
<xsl:value-of select="ddwrt:UrlBaseName(string(@LinkFilename))" />
我們需要將對應的代碼修改如下:
<xsl:if test="string-length(@LinkFilename)<=12">
<xsl:value-of select="ddwrt:UrlBaseName(string(@LinkFilename))" />
</xsl:if>
<xsl:if test="string-length(@LinkFilename)>12">
<xsl:value-of select="substring(ddwrt:UrlBaseName(string(@LinkFilename)),1,9)" />...
</xsl:if>
美中不足的是,我發現代碼中對於字串的計數是不分全形半形的,統統按照一個計算,這樣的話,如果標題或檔案名稱中如果包含了半形的字母或數字,所顯示的結果就不會如我們的想象一樣,是一個固定的長度,不過,對於標題過長從而換行導致的布局問題,總算是解決了!
註:文中標題部分的代碼,參考了西安huahua同學在MOSS群中的討論,才使得我對這個問題有了一個完整的認識,在此表示感謝!