您的位置:首页 > 其它

用Sharepoint Designer 修改首页显示正文的长度!!!

2009-09-02 16:18 543 查看
事情是这样,首页上我放了一个通知的webpart,可是在实际使用中,发现,通知的征文部分太长,首页显得乱七八糟,很影响美观,于是想能不能把正文部分只显示50个或者100个字,剩下的用“…”省略号表示,并且产生一个“更多内容”的链接。以前用javascript做过,现在想用SPD来做。

在网上搜了很久,在MOSS中如何限制标题在首页上显示的长度?,这篇文章做了很好的解释,原文节选如下:

****************************淫荡的分割线*****************************

在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>
美中不足的是,我发现代码中对于字符串的计数是不分全角半角的,统统按照一个计算,这样的话,如果标题或文件名中如果包含了半角的字母或数字,所显示的结果就不会如我们的想象一样,是一个固定的长度,不过,对于标题过长从而换行导致的布局问题,总算是解决了! ****************************淫荡的分割线***************************** 但是,在如上操作中,发现几个问题: 1.提示说:属性值中不能使用字符 '<'

实体引用

描述

<

小于号或开的尖括号(<)

>

大于号或闭的尖括号(>)

&

& 号

'

撇号或单引号(')

"

引号或双引号('')

问题就出在<xsl:if test="string-length(@Title)<=12"> 这里的“<”小于号上,“<”替换。

注意,必须含有“;”分号。

2.<xsl:value-of select="substring(string(@Title),1,9)" />在字段截取上

例子里用的是标题,实际中我用的是正文@Body。我想截取正文中的前100个字

<xsl:value-of select="substring(string(@Title),1,100)" />

但是截取出来的文字绝对不够100个字。为了把字数减少方便找出原因,我将语句改为substring(string(@Title),1,20),想截出20个字。保存后问题马上来了,整个default页面无法浏览,警告什么“缺少</ZoneTemplate>”。。。找不到问题所在,只能从别的地方考了一个default过来,再试,还是这个问题。。。无语。。。

突然想到,当我将正文用纯文本格式显示的时候,正文前有一串形如

<div class=Externalclass1B45BC7AD7B34D8390C62ED67FC8652C> <div>

的html代码,当用RTF格式显示的时候,这串代码隐藏,但在截取时还是会将字符个数计算在内。这就导致了截取20个字符的时候,把不完整的标签带了进去,浏览器在解析default页面的html是发现这个未闭合的标签,抛出错误。同时,这也是导致正文显示不足100个字的原因。能不能把这串代码排除,还没想到办法,目前只能靠数,得出这串代码长度是63位,因此截取的长度应该是63+100=163。要把这串html截掉,否则会重复出现。。。因此截取语句为

<xsl:value-of select="substring(string(@Title),64,163)" />

同时,判断Body长度的语句也要做相应修改。

但是,这里问题又来了,为了方便看,我把截取的长度变成3位,意思就是说我要截取3个字,语句为<xsl:value-of select="substring(string(@Title),1,66)" />

在SPD中能显示3个字,到了web上只能显示2个字,这是什么原因。。。没想明白,只能多加一位,取3个字,就取到67。







最后得出的答案是

截取100个字

<xsl:value-of select="substring(string(@Title),64,164)" />

至此,可以说基本满足目的,剩下的就是界面的美化了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: