用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)" />
至此,可以说基本满足目的,剩下的就是界面的美化了。
在网上搜了很久,在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.提示说:属性值中不能使用字符 '<'
实体引用 | 描述 |
< | 小于号或开的尖括号(<) |
> | 大于号或闭的尖括号(>) |
& | & 号 |
' | 撇号或单引号(') |
" | 引号或双引号('') |
注意,必须含有“;”分号。
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)" />
至此,可以说基本满足目的,剩下的就是界面的美化了。
相关文章推荐
- 用Sharepoint Designer 修改首页显示正文的长度!!!
- SharePoint Designer中无法显示任何列表
- sharepoint designer 使用技巧(四)进度条显示
- 使用SharePoint Designer,将左侧的导航修改为Treeview(更新版)
- MOSS安装目录Layouts中的文件不能用SharePoint Designer修改
- 使用SharePoint Designer(一)-对List的显示应用Conditional Formating
- SharePoint Designer中无法显示任何列表
- 利用SharePoint Designer 修改列表页面 文档库管理页面
- 利用SharePoint Designer 修改列表页面实例
- 使用SharePoint Designer,将左侧的导航修改为Treeview
- 一步一步SharePoint 2007之九:改变SharePoint Designer的Contributor Mode
- 一步一步SharePoint 2007之十七:解决实现Form认证后无法再用SharePoint Designer编辑网站的问题
- 一步步学习SPD2010--第一章节--探索SPD2010(8)--控制SharePoint Designer的使用
- vi中无法显示中文的问题+修改TAB键长度
- SharePoint 2010 工作流解决方案:将 SharePoint Designer 可重用工作流导入 Visual Studio(2)
- SharePoint 2010工作流系列(1):初窥SharePoint Designer 2010的工作流功能
- SharePoint Designer 2010 部署工作流
- 如何使用SharePoint Designer创建自定义的Workflow?
- 使用SharePoint Designer定制开发专家库系统实例!
- 汇编 [计算平台长度] 用的自己的想法,至于长度的显示,超过双数,修改一下就行了,懒得修改了!