zoukankan      html  css  js  c++  java
  • 用Sharepoint Designer 修改首页显示正文的长度!!!

    事情是这样,首页上我放了一个通知的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)" />

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

  • 相关阅读:
    centos 无线网卡安装,网卡rtl8188ee
    centos mysqldb 安装
    centos 安装gcc时,出错:Found 10 pre-existing rpmdb problem(s), 'yum check' output follows:
    peewee 字段属性help_text的支持问题
    mysql查看字段注释(帮助信息)指令
    centos mysql 大量数据导入时1153 错误:1153
    php在centos下的脚本没有解析的问题
    [转]mysql分布式方案-分库拆表
    [转]Mysql海量数据存储和解决方案之一—分布式DB方案
    mysql 数据库字符集的指定
  • 原文地址:https://www.cnblogs.com/Bany/p/1788832.html
Copyright © 2011-2022 走看看