现在的位置: 首页 > 综合 > 正文

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

2012年01月06日 ⁄ 综合 ⁄ 共 2698字 ⁄ 字号 评论关闭

事情是这样,首页上我放了一个通知的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.提示说:属性值中不能使用字符 '<'

实体引用

描述

&lt;

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

&gt;

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

&amp;

& 号

&apos;

撇号或单引号(')

&quot;

引号或双引号('')

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

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

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。

2009-9-2 16-08-38  2009-9-2 16-08-58

最后得出的答案是

截取100个字

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

至此,可以说基本满足目的,剩下的就是界面的美化了。

抱歉!评论已关闭.