Title: SDL Lesson 4 - スペースの一覧を取得する
ここでは、TeamPage の情報の入れ物である「スペース」の一覧を SDL で取得する方法を解説します。
TeamPage 4.0 までは、現在の「スペース」のことを「プロジェクト」と呼んでいました(「スペース」という呼び名はありませんでした)。この歴史的な理由により、SDK/SDL では、「スペース」のことを「project」と呼びます。そのため、SDL のタグ名には「project」が多く登場します。
(TeamPage 5.0 以降のプロジェクト管理機能(タスクトラッキング機能)の「プロジェクト」は、SDK/SDL では「goal」と呼びます。)
ファイルを作成する
lesson04.properties
ダウンロード --> @5
ここでは新しく「lesson04」というビューを作成することにします。まずはビューの定義ファイル lesson04.properties を、プラグインの config/views/all に作成します。
テキストエディタで開いて次のように記述し、保存します。これは、「com フォルダの中の、traction フォルダの中の、sdl フォルダの中の、tutorial フォルダの中の、lesson04.sdl というファイルを使う」という意味です。
sdl=com.traction.sdl.tutorial.lesson04
lesson04.sdl
ダウンロード --> @4
ビューの定義ファイル lesson04.properties で指定された lesson04.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 04</h1>
<div class="projects">
<h2>#{Active_Projects}</h2>
<!-- すべてのスペースのうち、アクティブなものを取得 -->
<projects.active>
<loop.first><ul></loop.first>
<li>
<a href="__project.url__">__project.displayname__ (__project.id__: __project.name__)</a>
</li>
<loop.last></ul></loop.last>
<loop.none>#{None}</loop.none>
</projects.active>
</div>
<div class="projects">
<h2>#{acladmin_permission_read}</h2>
<!-- すべての記事の読み取り権限のあるスペースを取得 -->
<projects.read>
<loop.first><ul></loop.first>
<li>
<a href="__project.url__">__project.displayname__ (__project.id__: __project.name__)</a>
</li>
<loop.last></ul></loop.last>
<loop.none>#{None}</loop.none>
</projects.read>
</div>
<div class="projects">
<h2>#{acladmin_permission_author}</h2>
<!-- 新しい記事の投稿権限のあるスペースを取得 -->
<projects.post>
<loop.first><ul></loop.first>
<li>
<a href="__project.url__">__project.displayname__ (__project.id__: __project.name__)</a>
</li>
<loop.last></ul></loop.last>
<loop.none>#{None}</loop.none>
</projects.post>
</div>
<div class="projects">
<h2>#{acladmin_permission_reclassify}</h2>
<!-- タグの付け替え権限のあるスペースを取得 -->
<projects.reclassify>
<loop.first><ul></loop.first>
<li>
<a href="__project.url__">__project.displayname__ (__project.id__: __project.name__)</a>
</li>
<loop.last></ul></loop.last>
<loop.none>#{None}</loop.none>
</projects.reclassify>
</div>
<div class="projects">
<h2>#{setting_favorite_projects_displayname}</h2>
<!-- お気に入りスペースを取得 -->
<projects.favorites>
<loop.first><ul></loop.first>
<li>
<a href="__project.url__">__project.displayname__ (__project.id__: __project.name__)</a>
</li>
<loop.last></ul></loop.last>
<loop.none>#{None}</loop.none>
</projects.favorites>
</div>
</body>
</html>
上記コードの中には、同じようなセクション(<div class="projects">...</div>
)が並んでいます。
1番目のセクションには
<projects.active>
...
</projects.active>
という記述があります。この <projects.active> は、すべてのスペースの中からアクティブなものをループして返すタグです。
2番めのセクションには
<projects.read>
...
</projects.read>
という記述があます。この <projects.read>
タグは、すべてのスペースの中から、このタグを実行したユーザー(TeamPage にログインして「Lesson 04」のビューを表示したユーザー)の「パブリッシュ記事の読み取り」権限のあるスペースをループして返します。
スペースの権限についての詳細は DocJp168: スペースACLエディタ 概説 を参照してください。
この <projects.*>...</projects.*> タグは、対象となるスペースのループを行うだけです。スペースの名前やリンクを取得するには、ループ内で「スペースの名前を取得」や「スペースのリンク URL を取得」などを行う、以下のようなタグを設置する必要があります。
- <project.id> ... プロジェクトの ID 番号
- <project.name> ... スペースの名前
- <project.displayname> ... スペースの表示名
- <project.url> ... スペースへ移動するための URL
- <project.members> ... スペースのメンバーをこのタグの中で取得できる
- <project.homeentry> ... スペースのホーム記事(Wiki のトップ階層のエントリー)を取得できる
スペースの「ID」とは、それぞれのスペース固有の番号で、スペースセットアップ画面の左上に括弧付きで表示されます。
スペースの「名前」と「表示名」については、スペース名 と スペース表示名 を参照してください。
キャッシュをクリアする
sdl ファイルや properties ファイルを設置、編集した後は、必ずサーバーセットアップ > 一般 > サーバー管理 ページの [キャッシュのクリア] をクリックします。
動作確認する
TeamPage の検索ボックスに /type lesson04
と入力して Enter キーを押すと、下図のような「Lesson 04」ビューが表示されます。表示されるスペースは、ログインしているユーザー(検索ボックスに /type lesson04
を入力したユーザー)の権限によって変わります。
まとめ
1. スペースの一覧は <projects.*> タグでループして取得する。
2. その <projects.*>...</projects.*> ループの中で、スペースの情報(スペースの名前など)を取得するためのタグ(<project.name> など)を置く。
3. <projects.*>...</projects.*> の実行結果は、実行したユーザー(TeamPage にログインしているユーザー)によって変わるものがある。