1

コンテンツ クエリ Web パーツと xslt を使用するのはこれが初めてです。ブログから次のように表示する必要がlast 5 postsあります (下の画像をご覧ください)。

テーブルには 2 つの列が含まれています。左の列に最後の投稿を表示し、右の列に特定のブログの残りの投稿を表示したいと思います。

編集 1

ソースはただの OOTB ブログ サイトで、そこにいくつかの投稿を追加しました。これらの投稿を 2 つの列を含む html テーブルに表示したいと思います。左の列にはブログに最後に入力された投稿を表示し、右の列には他の投稿をループ表示したいと思います。ユーザーは、CQWP で表示する投稿の数を指定する必要があります。

編集 2

これは、これまでに作成した xslt です。唯一の考えは、テーブルが複数回繰り返されていることです。これは望ましくありません。テーブルは 1 つだけである必要があります。xslt コードを見ると、Test1、test 2 などのテキストを手動で入力しています。その代わりに、残りのブログ投稿を表示したいと思います。

<xsl:template name="Post" match="Row[@Style='Post']" mode="itemstyle">
    <xsl:variable name="SafeLinkUrl">
        <xsl:call-template name="OuterTemplate.GetSafeLink">
            <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="DisplayTitle">
        <xsl:call-template name="OuterTemplate.GetTitle">
            <xsl:with-param name="Title" select="@Title"/>
            <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
        </xsl:call-template>
    </xsl:variable>
    <div>        
        <table width="100%" cellpadding="2" cellspacing="2" border="1">
            <tr>
                <td colspan="2" valign="top">
                   <xsl:value-of select="@Author"/></td>
                <td rowspan="2" valign="top" width="30%">
                    <div>
                        <b>Previous blog posts:</b>
                    </div>
                    <div>
                        <ul style="margin-left:-2px;">
                        <li>Test 1</li>
                        <li>Test 2</li>
                        <li>Test 3</li>
                        <li>Test 4</li>
                        </ul>
                    </div>
                    </td>
            </tr>
            <tr>
                <td width="15%" valign="top">
                    image</td>
                <td  valign="top">
                     <div>
                        <xsl:value-of select="@Title"/>
                     </div>  
                     <div class="custom_description"> 
                        <xsl:value-of select="@Body" disable-output-escaping="yes" /> 
                    </div>                  
                    <p>
                    <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
                    <a href="{$SafeLinkUrl}">
                      <xsl:if test="$ItemsHaveStreams = 'True'">
                        <xsl:attribute name="onclick">
                          <xsl:value-of select="@OnClickForWebRendering"/>
                        </xsl:attribute>
                      </xsl:if>
                      <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
                        <xsl:attribute name="onclick">
                          <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
                        </xsl:attribute>
                      </xsl:if>
                      <br />
                      <b>Read More &gt;</b>
                    </a>
                    </p>
                </td>
            </tr>
        </table>                   
    </div>
</xsl:template>

編集 3

<root>
   <Posts>
        <Post ID="1">
         <Title>this post 1</Title>
         <Body>The comment comes here</Body>
    </Post>
<Post ID="2">
         <Title>this post 2</Title>
         <Body>The comment comes here</Body>
    </Post>
<Post ID="3">
         <Title>this post 3</Title>
         <Body>The comment comes here</Body>
    </Post>
<Post ID="4">
         <Title>this post 4</Title>
         <Body>The comment comes here</Body>
    </Post>
<Post ID="5">
         <Title>this post 5</Title>
         <Body>The comment comes here</Body>
    </Post>

   </Posts>

</root>

ありがとうございました

ここに画像の説明を入力

4

2 に答える 2

2

最初に注意していただきたいのは、私は SharePoint について何も知らず、SharePoint をインストールしていません。SharePoint の質問に特化した StackExchange Web サイトがあり、このサイトは SO よりも役立つ場合があります。https://sharepoint.stackexchange.com/questions/22465/recreating-the-blog-templateを参照してください

http://www.glynblogs.com/2011/04/overriding-the-presentation-of-an-xslt-list-view-web-part.htmlもご覧ください。


アップデート

この XSLT 1.0 スタイルシートは、MS XSLT プロセッサ用です...

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  exclude-result-prefixes="xsl msxsl">
<xsl:output method="html" doctype-system="" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*" />

<xsl:variable name="empty-main">
  <empty-main>No content yet.</empty-main>
</xsl:variable>

<xsl:variable name="empty-sub">
  <empty-main>No older content yet.</empty-main>
</xsl:variable>

<xsl:template match="/*">
  <html>
  <head>
    <title>Blog</title>
    <style type="text/css">
      table {
        width: 100%;
        border: 1px solid #000;
      }
      td.main-col,  td.subsiduary-col {
        vertical-align:text-top;
      }
      td.main-col {
        width: 75%
      }
      td.subsiduary-col {
        width: 25%
      }
    </style>
  </head>

  <body>
    <table border="1">
     <tr>
     <xsl:variable name="count-posts" select="count(msxsl:node-set(Posts/Post))" />
       <td class="main-col">
         <xsl:apply-templates select="
       (Posts/Post[last()] | msxsl:node-set($empty-main))[1]" />
       </td>
       <td class="subsiduary-col">
         <xsl:apply-templates select="
       Posts/Post[position() &gt; last() - 5 and position() &lt; last()] |
       msxsl:node-set($empty-sub)[$count-posts &lt; 2]" />
       </td>
     </tr>
    </table>
  </body>
  </html>
</xsl:template>


<xsl:template match="Post">
  <xsl:apply-templates select="Title" />
  <p><xsl:copy-of select="Body/node()" /></p>
</xsl:template>

<xsl:template match="Post[last()]/Title" priority="2">
  <h1><xsl:value-of select="." /></h1>
</xsl:template>

<xsl:template match="Post/Title">
  <h2><xsl:value-of select="." /></h2>
</xsl:template>


<xsl:template match="empty-main|empty-sub" priority="2">
  <p><xsl:value-of select="." /></p>
</xsl:template>

</xsl:stylesheet>

...この入力を変換します...

<root>
    <Posts>
        <Post ID="1">
            <Title>this post 1</Title>
            <Body>The comment comes here</Body>
        </Post>
        <Post ID="2">
            <Title>this post 2</Title>
            <Body>The comment comes here</Body>
        </Post>
        <Post ID="3">
            <Title>this post 3</Title>
            <Body>The comment comes here</Body>
        </Post>
        <Post ID="4">
            <Title>this post 4</Title>
            <Body>The comment comes here</Body>
        </Post>
        <Post ID="5">
            <Title>this post 5</Title>
            <Body>The comment comes here</Body>
        </Post>
    </Posts>
</root>

..この出力に...

<!DOCTYPE html SYSTEM "">
<html>
  <head>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Blog</title>
    <style type="text/css">
      table {
        width: 100%;
        border: 1px solid #000;
      }
      td.main-col,  td.subsiduary-col {
        vertical-align:text-top;
      }
      td.main-col {
        width: 75%
      }
      td.subsiduary-col {
        width: 25%
      }
    </style>
  </head>
  <body>
    <table border="1">
      <tr>
        <td class="main-col">
          <h1>this post 5</h1>
          <p>The comment comes here</p>
        </td>
        <td class="subsiduary-col">
          <h2>this post 1</h2>
          <p>The comment comes here</p>
          <h2>this post 2</h2>
          <p>The comment comes here</p>
          <h2>this post 3</h2>
          <p>The comment comes here</p>
          <h2>this post 4</h2>
          <p>The comment comes here</p>
        </td>
      </tr>
    </table>
  </body>
</html>

これがブラウザーでどのようにレンダリングされるかを視覚的に確認するには、html 出力をhttp://htmledit.squarefree.com/に貼り付けます。

于 2012-11-10T07:37:27.947 に答える
0

Web パーツのパネル ツールで選択した並べ替えに応じて、最初または最後の項目を表示します。

 <xsl:if test="count(preceding-sibling::*)=0"> 

<xsl:template name="DisplayPosts" match="Row[@Style='DisplayPosts']" mode="itemstyle">    

 <table width="100%" border="1">
 <tr>
  <td width="70%">
     <xsl:if test="count(preceding-sibling::*)=0">
        <xsl:value-of select="@Title" />
     </xsl:if>
 </td>
 <td width="30%">
    <xsl:if test="count(preceding-sibling::*)&gt;0">
        <xsl:value-of select="@Title" />
  </xsl:if>             
 </td>  
 </tr>
 </table>

</xsl:template> 
于 2012-11-20T18:42:43.220 に答える