Title: SDL Lesson 6 - 段落を取得する
前回のレッスン DocSDK147: SDL Lesson 5 - 記事を投稿順に取得する では、<entries>...</entries>
タグを使い、閲覧できる全スペースから投稿順にエントリーのタイトルや投稿者名などを取得しました。
では、記事の本文つまり段落を取得するにはどうすればいいのでしょうか。
それには <items>...</items>
というタグを使います。
ファイルを作成する
lesson06.properties
ダウンロード --> @1
ここでは新しく「lesson06」というビューを作成することにします。まずはビューの定義ファイル lesson06.properties を、プラグインの config/views/all に作成します。
テキストエディタで開いて次のように記述し、保存します。
sdl=com.traction.sdl.tutorial.lesson06
lesson06.sdl
ダウンロード --> @2
ビューの定義ファイル lesson06.properties で指定された lesson06.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 06</h1>
<div class="entries">
<!--- 記事を取得するループ -->
<entries proj="*" type="rchron" max="<url.param name='max' default='5' />">
<div class="entry">
<h2><a href="__entry.url__">__entry.title__</a></h2>
<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 class="body">
<!--- 段落を取得するループ -->
<items skip="1">
<p>
__item.content__
</p>
</items>
</div>
<loop.none>
<p>No entries.</p>
</loop.none>
</div>
</entries>
</div>
</body>
</html>
items タグとループ処理
<div class="body">...</div>
の中にある、<items>...</items>
タグに注目しましょう。
<div class="body">
<items skip="1">
<p>
__item.content__
</p>
</items>
</div>
<items>...</items>
は、現在のエントリー(記事)の段落をループで取得するタグです。しかし、単に存在する段落の数だけループを回す処理しか行いません。
そこで、<items>...</items>
の中に <item.content>
タグ(実際には __item.content__
と記述しています)を置き、実際の段落の文章を取得します。
item 関連のタグ
item 関連のタグは、<item.content>
の他に次のようなものがあります。
- item.id ... 段落の ID を返します。
- item.tractionid.id ... 段落の Traction ID を返します。(例: "Hoge456.03" ... Hoge スペースの 456 番目の記事の 3 段落)
- item.labels ... 段落に付けられたタグをループで返します。
記事タイトルをスキップする
通常、<items>...</items>
は、記事タイトルを含めた全段落を返します。lesson06.sdl のプログラムでは、記事タイトルは __entry.title__
として取得しており、<items>...</items>
内で再び取得する必要はありません。
そこで skip="1"
パラメーターを指定して、一回目のループ(=記事のタイトル)をスキップしています。
こうすることで、タイトルを除外した残りの段落を取得できます。
styles.css
ダウンロード --> @3
今回は段落(本文)の内容を画面に表示するので、フォントサイズが小さくしてみましょう。既存の html/sdllessons/styles.css をテキストエディタで開き、body の font-size を 100% から 80% に変更するか、この記事に添付した styles.css ファイルをダウンロードし、あなたの html/sdllessons にある styles.css と置き換えてください。
キャッシュをクリアする
sdl ファイルや properties ファイルを設置、編集した後は、必ずサーバーセットアップ > 一般 > サーバー管理 ページの [キャッシュのクリア] をクリックします。
動作確認する
ビューを表示する
TeamPage の検索ボックスに /type lesson06 と入力して Enter キーを押すと、下図のような「Lesson 06」ビューが表示されます。
ログインしているユーザー(検索ボックスに /type lesson06 を入力したユーザー)の読み取り権限によって取得できるスペースが異なるため、ビューに表示される記事はユーザーによって変わることがあります。
max= パラメーターで動作を変更する
今回作成した lesson06.sdl にはもうひとつ仕掛けがあります。
<entries>...</entries>
によるループの回数の上限数である max= パラメーターの値を、URL の max= パラメーターで指定できるようになっています。(参照: DocSDK24.020: SDL Lesson 2 - SDL タグを使う)
URL の max= パラメーターの指定がない場合は、default= で指定されている「5」が適用されます。
<entries proj="*" type="rchron" max="<url.param name='max' default='5' />">
ビューの URL に &max=1
を付け加えてみましょう。下図のように、最新の 1 件だけが表示されます。