PowerCMS X ブログ
2024-01-05
記事などのデータを JSON形式で出力・取得したいというケースは多いと思います。PowerCMS Xには RESTful APIがあり、JSON形式でデータの取得、オブジェクトの作成、検索などができるのですが、静的ファイルにしたいというケースもあると思います。
ビュー(テンプレート)を作成することで実現できます。記事モデルを例にして紹介します。
記事のコンテキストで、各タグを使って組み立てる方法です。数字などではない文字列などの情報には escape="json"を追加します。
<mt:setvarblock name="json">
{
"id": <mt:entryid>,
"title" : "<mt:entrytitle escape="json">",
"text" : "<mt:entrybody escape="json">",
"permalink" : "<mt:entrypermalink escape="json">",
"date":"<mt:entrydate escape="json">"
}
</mt:setvarblock>
<mt:var name="json">
escape="json" の代わりに escape="json_unescaped_unicode" とすると、マルチバイト Unicode 文字をそのままの形式で扱います。
<mt:setvarblock name="json">
{
"id": <mt:entryid>,
"title" : "<mt:entrytitle escape="json_unescaped_unicode">",
"text" : "<mt:entrybody escape="json_unescaped_unicode">",
"permalink" : "<mt:entrypermalink escape="json">",
"date":"<mt:entrydate escape="json">"
}
</mt:setvarblock>
<mt:var name="json">
sethashvarsを使うときは右辺に改行を含むことができないことに注意してください(以下の例では strip_linefeedsモディファイアで改行を削除しています)。
<mt:sethashvars name="json">
id=<mt:entryid>
title=<mt:entrytitle>
text=<mt:entrybody strip_linefeeds>
permalink=<mt:entrypermalink>
date=<mt:entrydate>
</mt:sethashvars>
<mt:var name="json" to_json>
改行を含めたいときは、以下のようにできます。
<mt:entryid setvar="entry_id">
<mt:entrytitle setvar="entry_title">
<mt:entrybody setvar="entry_body">
<mt:entrypermalink setvar="entry_permalink">
<mt:entrydate setvar="entry_date">
<mt:setvar name="json" key="id" value="$entry_id">
<mt:setvar name="json" key="title" value="$entry_title">
<mt:setvar name="json" key="permalink" value="$entry_permalink">
<mt:setvar name="json" key="text" value="$entry_body">
<mt:setvar name="json" key="date" value="$entry_date">
<mt:var name="json" to_json>
glue属性を使うことと、予約変数 __first__, __last__をうまく使うことがポイントです。
<mt:entries glue=",">
<mt:if name="__first__">
{"totalResult": <mt:var name="__total__">,
"items" : [
</mt:if>
{
"id": <mt:entryid>,
"title" : "<mt:entrytitle escape="json">",
"text" : "<mt:entrybody escape="json">",
"permalink" : "<mt:entrypermalink escape="json">",
"date":"<mt:entrydate escape="json">"
}
<mt:if name="__last__">
] }
</mt:if>
</mt:entries>
mt:objecttojsonタグを使うと、自動的に JSON形式に変換されます。出力形式は、RESTful API エンドポイント(get,listなど)で返却されるデータ形式となっています。
<mt:objecttojson>
取得するカラムを指定したいときは cols属性(カンマ区切りまたは配列)で指定が可能です。指定はRESTful APIが返却するキーで指定します。permalinkではなく「Permalink」であることに注意してください。
<mt:objecttojson cols="id,title,text,Permalink,published_on">
objecttojsonタグを使って記事リストを出力する例は以下のようになります。
<mt:entries glue=",">
<mt:if name="__first__">
{"totalResult": <mt:var name="__total__">,
"items" : [
</mt:if>
<mt:objecttojson cols="id,title,text,Permalink,published_on">
<mt:if name="__last__">
] }
</mt:if>
</mt:entries>
カテゴリー:テンプレート作成Tips | 技術情報 | サイト制作全般
投稿者:Junnama Noda