Title: SDL Lesson 5 - 記事を投稿順に取得する
ここでは、記事(エントリー)を SDL で取得する方法について解説します。
ファイルを作成する
lesson05.properties
ダウンロード --> @1
ここでは新しく「lesson05」というビューを作成することにします。まずはビューの定義ファイル lesson05.properties を、プラグインの config/views/all に作成します。
テキストエディタで開いて次のように記述し、保存します。これは、「com フォルダの中の、traction フォルダの中の、sdl フォルダの中の、tutorial フォルダの中の、lesson05.sdl というファイルを使う」という意味です。
sdl=com.traction.sdl.tutorial.lesson05
lesson05.sdl
ダウンロード --> @2
ビューの定義ファイル lesson05.properties で指定された lesson05.sdl を com/traction/sdl/tutorial に作成します。
テキストエディタで開いて次のように記述し、保存します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>SDL Tutorial</title>
<html.css url="/html/css/sdllessons/styles.css" />
</head>
<body>
<h1>Lesson 05</h1>
<h2>#{All_Projects}</h2>
<entries proj="*" type="recent" max="10">
<div class="entry">
<h3><a href="__entry.url__">__entry.title__</a></h3>
<div class="details">
<ul>
<li>ID: <a href="__entry.permalink__">__entry.tractionid__</a></li>
<li>#{Date}: <entry.date dateformat="yyyy/MM/dd hh:mm:ss z" /></li>
<li>#{Author}: <a href="__entry.author.url__">__entry.author.displayname__</a></li>
</ul>
</div>
</div>
</entries>
</body>
</html>
entries タグ
ジャーナルからエントリー(記事)を取得するには <entries>...</entries>
タグを使います。このタグでは次のパラメーターが利用可能で(他にもあります)、パラメーターによって返される内容が変わります。
- proj ... エントリーを取得する対象のスペースを表示名ではなく名前で指定します。複数の場合は半角カンマ記号で区切ります。読み取り権限のあるすべてのスペースを指定するには「
*
」を指定します。
- type ... エントリーを取得するためのクエリの種類を指定します。(後述)
- cat ... パラメーター「type」で「cat」「addcatpresent」「remcatgone」などを指定し、タグによるクエリを実行する場合の、対象とするタグ名を指定します。「cat」と書きますが「category」のことで「猫」の意味ではありません。
- tractionid ... パラメーター「type」で「single」または「multi」を指定するときの、対象とする記事 ID を指定します。
- authorid ... パラメーター「type」で「authoredby」を指定するときの、対象とする投稿者の ID (投稿者のユーザー番号)を指定します。複数の場合は半角コンマで区切ります。
- sort ... 取得したエントリーの並び順を指定します。(後述)
- sdate ... 期間範囲の開始日を指定します。
- edate ... 期間範囲の終了日を指定します。
- max ... 返されるエントリー数の上限を指定します。
- min ... 返されるエントリー数の下限を指定します。
- volume ... エントリーをリクエストする前に JournalReuest に設定される記事ボリュームです。値は titles/details/feed/brief/full/comments の中から選択して指定します。
- authorfiltertype ... JournalRequest の結果を投稿者の種類でフィルタリングします。値は everyone/following/mine の中から選択して指定します。既定は everyone です。
- search ... ラピッドセレクタのような検索書式を指定します。
この lesson05.sdl では、<entries>
タグに次のようなパラメーターを指定しています。これは、「ユーザーの読み取り権限のあるすべてのスペースから、最新順 (recent) で、最大 (max) 10 件のエントリーを取得せよ」という意味です。
<entries proj="*" type="recent" max="10"> ... </entries>
上記のように、パラメーターを変更して取得するエントリーを変更できます。例えば、「customer」スペースに投稿された、「FAQ」タグが付いた記事を、投稿順に最大 100 件取得するには次のようにします。
<entries proj="customer" type="cat" cat=":FAQ" max="100">...</entries>
例えば、「foo」スペースに投稿された記事のうち、「done」タグが付いた記事を、(投稿順ではなく)タグが付いた順に取得するには次のようにします。これは、タスクのタグが「to do」から「done」に変更された順に取得したい場合などに使える方法です。
<entries proj="foo" type="addcatpresent" cat=":done"> ... </entries>
type パラメーター
type パラメーターの値には次のようなものを指定できます。
- recent / rchron ... 投稿順にエントリーを取得します。
- single .. 特定の一件のエントリーを指定します。
- multi ... 特定の複数のエントリーを指定します。
- cat ... 特定のタグが付いたエントリーを投稿順に取得するときに使います。
- addcatpresent ... 特定のタグが付いたエントリーを、タグの追加順に取得するときに使います。
- remcatgone ... 特定のタグが削除されたエントリーを、タグの削除順に取得するときに使います。
- authoredby ... 特定のユーザーによって投稿されたエントリーだけを取得するときに使います。
- updated ... 編集された記事を取得するときに指定します。
- activethreads ... アクティブなスレッドを取得するときに指定します。
- sidebarentry ... 現在のスペースの サイドバーの記事 を取得するための特別な値です。
- attach ... 添付ファイルのある記事を得るための特別な値です。
- goals ... プロジェクト記事だけを取得するときに指定します。
- tasks ... タスク記事だけを取得するときに指定します。
- milestones ... マイルストーン記事だけを取得するときに指定します。
- addedpages ... 記事の名前を追加順に取得します。
- renamedpages ... 記事の名前を変更順に取得します。
sort パラメーター
取得したエントリーを並び替える場合に、例えば sort="1"
のように指定します。
- 0 - 並び替えしない
- 1 - 時系列で昇順に並び替えます。(古いものが先)
- 2 - 時系列で降順に並び替えます。(新しいものが先)
- 3 - 文字コードの昇順に並び替えます。(A-Z)
- 5 - 文字コードの降順に並び替えます。(Z-A)
- 4 - ランダムに並び替えます。
type="activethreads"
を指定した場合は、次の並び替えを使用できます。
- 6 - スレッドの最後のコメントの日時で時系列に並び替えます。(最後にコメントされたものが先)
- 7 - スレッドの最後のコメントの日時で時系列に並び替えます。(最初にコメントされたものが先)
- 8 - コメント数で昇順に並び替えます。(コメント数が多いものが先)
- 9 - コメント数で降順に並び替えます。(コメント数の少ないものが先)
type="tasks"
または type="goals"
または type="milestones"
を指定した場合は、次の並び替えを使用できます。
entry.* タグ
<entries>...</entries>
タグは、エントリーのかたまりをループで返す動作を行うだけなので、記事のタイトルや投稿者名などを取得するには、ループ内に別のタグとして記述する必要があります。
<entries>...</entries>
内で使うエントリー関連のタグには次のようなものがあります。
- entry.title ... 記事のタイトル
- entry.date ... 記事の投稿日(dateformat パラメーターで日時の書式を指定)
- entry.url ... 記事のシングルビューの URL
- entry.permalink ... 記事のパーマリンク URL
- entry.tractionid ... 記事 ID (例: "Customer523")
- entry.tractionid.fqid ... 記事の FQID
- entry.tractionid.entry ... 記事 ID の数字の部分(例: "Customer523" の "523")
- entry.tractionid.project.name ... 記事 ID のスペース名の部分(例: "Customer523" の "Customer")
- entry.author.id ... 記事の投稿者の ID
- entry.author.name ... 記事の投稿者のユーザー名
- entry.author.displayname ... 記事の投稿者のユーザー表示名
- entry.author.url ... 記事の投稿者のプロフィール ページの URL
- entry.property.value ... name パラメーターで指定してエントリー プロパティの値を取得します。
キャッシュをクリアする
sdl ファイルや properties ファイルを設置、編集した後は、必ずサーバーセットアップ > 一般 > サーバー管理 ページの [キャッシュのクリア] をクリックします。
動作確認する
TeamPage の検索ボックスに /type lesson05 と入力して Enter キーを押すと、下図のような「Lesson 05」ビューが表示されます。ログインしているユーザー(検索ボックスに /type lesson05 を入力したユーザー)の読み取り権限によって取得できるスペースが異なるため、ビューに表示される記事はユーザーによって変わることがあります。
まとめ
1. 記事を取得するには、パラメーターを付けて <entries>...</entries>
タグを使う。
2. 記事のタイトルや投稿者など、記事の具体的な「内容」は、<entries>...</entries>
タグの中で <entry.title>
や <entry.author.displayname>
のような別のタグを使って取得する。