blogを抜粋形式で見やすく表示 - SharePoint 2010


threestar-min

社内情報連携として有名な SharePoint。いろいろできるコラボレーシ読んですが、情報が少ないですね。

しかも各 ビジュアルなど野暮ったく、おそらくITに慣れていない人は、少し最初は戸惑うかもしれません。

そんあブログをわかりやすく表示させる方法を今回は紹介します。デザイナーで修正します。

概要

blogView-min 今のブログのままだと、一覧表示ではブログが全部表示されてしまい、場合によっては極端な縦長になってしまいます。そんな時に、適度にテキストを頭から抜粋し、しかも中に画像があった場合、アイキャッチ画像として抽出してくれるように整形します。

修正ソース

修正は、blogのフォーマット(blog.xsl)が SharePoint Designerなどで見つけて開き、以下の3箇所を修正します。 ひとつめはまず 3行目辺りに以下の内容を挿入([START]から[END]まで)します。 タグを覗いて、n文字抜粋し、imgタグを見つけたらそれを cssと組み合わせながら150x100のサイズで挿入しています。

 

 

2つめ 313行目辺りに一行だけ or文をやや後ろに追加しています。 blogの一覧形式やアーカイブ形式として 7だけでなく 8, 9 にも@BaseViewIDを対応させます。 これ <xsl:variable name="ShowBody"><xsl:if test="../../@BaseViewID='0' or ../../@BaseViewID='7' or ../../@BaseViewID='8' or ../../@BaseViewID='9'">1</xsl:if></xsl:variable>

  <xsl:template mode="Item" match="Row[../../@TemplateType='301' and (../../@BaseViewID='0' or ../../@BaseViewID='7' or ../../@BaseViewID='8' or ../../@BaseViewID='9')]">
    <xsl:param name="Fields" select="."/>
    <xsl:param name="Collapse" select="."/>
    <xsl:param name="Position" select="1"/>
    <xsl:param name="Last" select="1"/>
    <!-- Posts.aspx and the home page should show the body of the post -->
    <xsl:variable name="ShowBody"><xsl:if test="../../@BaseViewID='0' or ../../@BaseViewID='7' or ../../@BaseViewID='8' or ../../@BaseViewID='9'">1</xsl:if></xsl:variable>
    <!-- Posts.aspx and the home page should show the post date above the posts-->
    <xsl:variable name="ShowTopDate"><xsl:if test="../../@BaseViewID='0' or ../../@BaseViewID='7'">1</xsl:if></xsl:variable>

 

 

最後3つ目は 391行目辺りのここに対して、 次の段落の内容に書き換えます。 <修正前>

        <xsl:if test="$ShowBody=1">
          <div class="ms-PostBody">
            <div>
              <xsl:apply-templates select="$Fields[@Name='Body']" mode="PrintField">
                <xsl:with-param name="thisNode" select="$thisNode"/>
                <xsl:with-param name="Position" select="$Position"/>
              </xsl:apply-templates>
 
            </div>
          </div>
 
        </xsl:if>
        <div class="ms-PostFooter">

<修正後> 少しxsltなのでまわりくどいですが。。。 約180文字抜粋しています。

        <xsl:if test="$ShowBody=1">
          <div class="ms-PostBody">
            <div>
<xsl:variable name="postpath"  select="concat(string($HttpVDir),'/',string($thisNode/../@resource.wss.lists_Folder),'/',string($thisNode/../@resource.wss.blogpost_Folder),'/Post.aspx?ID=',string($thisNode/@ID))"/>
<xsl:variable name="BodyText">
  <xsl:call-template name="StripHTML">
    <xsl:with-param name="HTMLText" select="@Body" /> 
    <xsl:with-param name="imgexcept" select="1"/>
    <xsl:with-param name="address" select="$postpath"/>
  </xsl:call-template>
</xsl:variable>
<!--
<xsl:call-template name="FirstNWords">
  <xsl:with-param name="TextData" select="$BodyText" /> 
  <xsl:with-param name="WordCount" select="3" /> 
  <xsl:with-param name="MoreText" select="'...'" /> 
</xsl:call-template>
-->
<xsl:choose>
  <xsl:when test="contains($BodyText, 'img')">
    <xsl:call-template name="FirstNChars">
      <xsl:with-param name="TextData" select="$BodyText" /> 
      <xsl:with-param name="CharCount" select="180 + 5 + string-length(substring-before(substring-after($BodyText,'&lt;img'),'&gt;'))" /> 
    </xsl:call-template>
  </xsl:when>
  <xsl:otherwise>
    <xsl:call-template name="FirstNChars">
      <xsl:with-param name="TextData" select="$BodyText" /> 
      <xsl:with-param name="CharCount" select="180" /> 
    </xsl:call-template>
  </xsl:otherwise>
</xsl:choose>
  <br/>
  <br /> 
  <div align="right">
  <a href="{$HttpVDir}/{$thisNode/../@resource.wss.lists_Folder}/{$thisNode/../@resource.wss.blogpost_Folder}/Post.aspx?ID={$thisNode/@ID}">この記事を読む</a></div>
            </div>
          </div>
<script type="text/javascript">
 /*Aタグの要素オブジェクト*/
 var link = document.getElementById('ctl00_onetidProjectPropertyTitleGraphic');
 /*URIを書き換える*/
 link.setAttribute('href', '/sist/techStr/');
</script>

        </xsl:if>
        <div class="ms-PostFooter">

参考 http://sharepoint.stackexchange.com/questions/84377/blog-read-more-link-and-summary-of-body

Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

484 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です