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 に作成します。

lesson04.properties

テキストエディタで開いて次のように記述し、保存します。これは、「com フォルダの中の、traction フォルダの中の、sdl フォルダの中の、tutorial フォルダの中の、lesson04.sdl というファイルを使う」という意味です。

sdl=com.traction.sdl.tutorial.lesson04


lesson04.sdl



ダウンロード --> @4

ビューの定義ファイル lesson04.properties で指定された lesson04.sdl を com/traction/sdl/tutorial に作成します。

lesson04.sdl

テキストエディタで開いて次のように記述し、保存します。

<!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 を取得」などを行う、以下のようなタグを設置する必要があります。



スペースの「ID」とは、それぞれのスペース固有の番号で、スペースセットアップ画面の左上に括弧付きで表示されます。

スペースの「名前」と「表示名」については、スペース名スペース表示名 を参照してください。

キャッシュをクリアする



sdl ファイルや properties ファイルを設置、編集した後は、必ずサーバーセットアップ > 一般 > サーバー管理 ページの [キャッシュのクリア] をクリックします。

動作確認する



TeamPage の検索ボックスに /type lesson04 と入力して Enter キーを押すと、下図のような「Lesson 04」ビューが表示されます。表示されるスペースは、ログインしているユーザー(検索ボックスに /type lesson04 を入力したユーザー)の権限によって変わります。

実行結果

まとめ



1. スペースの一覧は <projects.*> タグでループして取得する。

2. その <projects.*>...</projects.*> ループの中で、スペースの情報(スペースの名前など)を取得するためのタグ(<project.name> など)を置く。

3. <projects.*>...</projects.*> の実行結果は、実行したユーザー(TeamPage にログインしているユーザー)によって変わるものがある。



Attachments:
lesson4_prop.png
lesson4_sdl.png
results.png
lesson04.sdl
lesson04.properties
関連記事
親記事に追加されている (1)
Article: DocSDK142 (permalink)
Date: 2014/11/24; 4時50分07秒 JST

Author Name: TeamPage サポート
Author ID: jpbo