ようこそ SharePoint Fan へ ログイン | 登録 | ヘルプ

SharePoint Developer

SharePointのカスタマイズねたを中心としたブログです。

タグ

過去の投稿

SharePointのお勧め

SharePointフォーラム

開発者向け

最新のコメント

購読



MCPD | Enterprise Application Developer

MCTS | SQL Server 2005

MCSD

にほんブログ村 IT技術ブログへ

ブロ電™切符

コンテンツクエリWebパーツ用XSLTの書き方

前の記事で予告したとおり、今回はコンテンツクエリWebパーツ用のXSLTに特化して、XSLTの書き方を簡単にレポートします。

XSLTとは
e-wordでXSLTを調べてみると、
「XML文書からHTML文書やテキスト文書への変換などに使用される。」
とあります。
コンテンツクエリWebパーツはまさにそのようなことをするためにXSLTを使用しています。

XSLTの基礎
@ITというエンジニア向けのサイトに、XSLT 書き方の基礎という記事があります。
この記事を読むとXSLTの書き方を知ることができますが、ちょっとボリュームが多く、コンテンツクエリWebパーツをつかうだけだったら特に必要なさそうな部分もあります。

XSLTのリファレンス
マイクロソフトのこれまたエンジニア向けのサイトに、XSLT リファレンスがあります。
XSLTを記述する際に使用可能なタグの説明が書いてあるため、適宜参照すると良いと思います。

ItemStyle.xslの構造
ItemStyle.xslの中身はXSLTなわけですが、その中身は以下のような構造になっています。

<xsl:stylesheet>
    <xsl:template>
    </xsl:template>
</xsl:stylesheet>

<xsl:stylesheet>は、このファイルがXSLTで記述されたファイルですよーということを明示するためのものです。
基本的にここを変更することはないと思います。

<xsl:template>から</xsl:template>までがひとつのスタイルの定義になっていて、<xsl:stylesheet>から</xsl:stylesheet>の間には、好きなだけ<xsl:template></xsl:template>を入れることができます。

xsl:templateタグの書き方
<xsl:template>は、正確には以下のようなタグになっています。

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

name="SampleStyle"の部分が、コンテンツクエリWebパーツのプロパティの「アイテムのスタイル」の一覧に表示される名前になります。
「name=」に続けて任意の名前を入力してください。
日本語もOKです。名前はかならずダブルクォーテーション「"」でくくってください。
「@Style='SampleStyle'」の部分は、必ず「name=」のところに書いた名前と同じ文字を入力してください。
ここは、ダブルクォーテーションではなくシングルクォーテーション「'」で名前をくくります。

例:「サンプル」という名前のスタイルを定義する場合

<xsl:template name="サンプル" match="Row[@Style='サンプル']" mode="itemstyle">

xsl:templateタグの内側の書き方
さて、いよいよ実際にHTMLを出力する部分の作成に入ります。
といっても実はそれほどすごいことをするわけではないです。
基本的には以下の3点を覚えておけば問題なしです。

1点目
xsl:templateタグの内側は、コンテンツクエリWebパーツのクエリ条件に合致したアイテムの1アイテム分の定義になります。
つまりクエリ条件に複数のアイテムが合致する場合は、そのアイテムの数分だけ、xsl:templateの内側に書かれたXSLTが動作することになります。

2点目
xsl:templateタグの内側には、通常のHTMLを記述します。
aタグやら、divタグやら普通に使えます。

3点目
アイテムの列の値を表示したい場合は、xsl:value-ofタグを使います。
たとえば、「Description」という列を表示する場合は以下のようになります。

<xsl:value-of select="@Description"/>

selectの後ろに、「@」に続けて表示したい列の名前を指定することになります。

実際にやってみる
上記3点のポイントさえ押さえておけば、HTMLを書くことができる方であれば独自のスタイルを書くことができます。

たとえばこんな風に・・・

<xsl:template name="Sample" match="Row[@Style='Sample']" mode="itemstyle">
    <b><a href='<xsl:value-of select="@LinkUrl"/>' target='new'><xsl:value-of select="@Title"/></a></b><br>
    <xsl:value-of select="@Description"/>
</xsl:template>

HTMLを書くのが苦手または面倒な場合は、SharePoint DesignerやホームページビルダーなどのHTMLエディタを使ってHTMLを書いて、できあがったHTMLをItemStyle.xslにコピペして、xsl:templateタグとxsl:value-ofタグを追加していけばいいと思います。

XSLTでは条件分岐処理なども書くことができますが、前で紹介したリファレンスを読んでタグの理解を深めていけば、さらにいろいろなことができることが分かると思います。
デベロッパーな方は、ぜひリファレンスに目を通してみてください。

では、最後にもうひとつだけ大事な注意点を。
xsl:value-ofタグで指定できる列は、実はあらかじめ定義されたものしか使用することができません。
デフォルトでは以下の列が指定できます。
左側の太字が、有効な列名です。
列名の右は、サンプルの値です。
※値の前のコロン「:」は列と値の区切りをつけるために置いているだけなので、実際の列名や値には含まれません。

ListId :6310FB5E-6D30-4946-8396-8D70BE054FFA
WebId :012473C3-6380-41D4-8825-FFF9B51A1BD9
ID :5
Title :人の検索の結果
FileRef :lab/groupwork/SearchCenter/Pages/peopleresults.aspx
_x007B_1d22ea11_x002D_1e32_x002D_424e_x002D_89ab_x002D_9fedbadb6ce1_x007D_ :5
Modified :2007-03-02 01:52:41
Author :システム アカウント
Editor :システム アカウント
Created :2007-03-02 01:52:41
PublishingRollupImage :
_Level :1
Comments :
LinkUrl :http://hoge/lab/groupwork/SearchCenter/Pages/peopleresults.aspx
PubDate :Fri, 02 Mar 2007 01:52:41 GMT
ImageUrl :
ImageUrlAltText :
Description :
Style :Summary
GroupStyle :DefaultHeader
__begincolumn :True
__begingroup :False

よく使いそうな所としては、Title、Modified、Author、Editor、Created、LinkUrl、Description あたりでしょうか。

でもこれだと、自分で追加した列をコンテンツクエリWebパーツで表示したいといったときに対応できません。
が、前述のとおり「あらかじめ定義されたもの」が利用可能なだけなので、自分で追加した列をコンテンツクエリWebパーツで利用できるように定義しておけばいいわけです!

ということで、次回は独自の列をコンテンツクエリWebパーツで表示する方法をレポートしたいと思います。

公開 2007年3月27日 1:05 投稿者 おりば~ず

コメント

# re: コンテンツクエリWebパーツ用XSLTの書き方 @ 2007年3月27日 17:24

うおぉぉ凄い!

次回に期待します。

これが覚えられれば、人検索の結果に内線番号を表示させる、とか出来そうですね!!!

saruhiko

# re: コンテンツクエリWebパーツ用XSLTの書き方 @ 2007年3月30日 13:52

MOSSはXSLTをいろんなところで使っているんで高度なカスタマイズをするには必須ですねっ。

おりば~ず

# コンテンツクエリWebパーツで任意の列を表示できるようにする方法 @ 2007年4月8日 2:45

随分久しぶりになってしまいました。。。 前の記事 に書いたとおり、コンテンツクエリWebパーツは標準のままだと決まった列しか表示することができません。 せっかくのすばらしWebパーツなのに、これではもったいない!

SharePoint Developer

# re: コンテンツクエリWebパーツ用XSLTの書き方 @ 2008年1月16日 23:49

こんばんは、おりば~ずさん。

いつも参考させていただいています。

この手順を参考にして更新日時を表示させてみました。

みごとできました!!ありがとうございます。

YYYY-MM-DD hh:mm:ssと表示されますが

なんとか形式を変更できないものでしょうか?

たとえば YYYY-MM-DDのみとか。

KomeKome

匿名のコメントは無効です