📃
【Movable Type】記事一覧をjson形式で出力する
Movable Typeの記事一覧をjson形式で出力する方法
概要
MTのグローバル・モディファイアにencode_json
というものがあるので、これを使用して作成します。
また、jsonファイルに不要な空行などが入ることによるエラーを防ぐため、compress modifierプラグインを使用しています。このプラグインはGitHubで公開されているほか、MTAppjQueryプラグインにも独自のモディファイアとして内包されています。
参考
- encode_json - グローバル・モディファイアリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- bit-part/compress-modifier · GitHub
json出力記述
以下、標準的なもののみ出力しています。カスタムフィールドなども同様の方法で出力可能です。
出力内容は以下です。
- ID
- タイトル
- 日付
- カテゴリ(フォルダ)ラベル
- カテゴリ(フォルダ)ベースネーム
- 本文
MTEntries(記事一覧)
<mt:For compress="3">
<mt:Entries lastn="0">
<mt:EntriesHeader>[</mt:EntriesHeader>
{
"id": <mt:EntryID encode_json='1'>,
"title": "<mt:EntryTitle encode_json='1'>",
"date": "<mt:EntryDate format='%Y-%m-%d' encode_json='1'>",
"categoryLabel": "<mt:CategoryLabel encode_json='1'>",
"categoryBasename": "<mt:CategoryBasename encode_json='1'>",
"description": "<mt:EntryBody encode_json='1'>"
}<mt:Unless name="__last__">,</mt:Unless>
<mt:EntriesFooter>]</mt:EntriesFooter>
</mt:Entries>
</mt:For>
lastn="0"
で全件出力しています。
MTPages(ウェブページ一覧)
<mt:For compress="3">
<mt:pages lastn="0">
<mt:SetVarBlock name="folder_label"><mt:PageFolder><$mt:FolderLabel$></mt:PageFolder></mt:SetVarBlock>
<mt:SetVarBlock name="folder_basename"><mt:PageFolder><$mt:FolderBasename$></mt:PageFolder></mt:SetVarBlock>
<mt:PagesHeader>[</mt:PagesHeader>
{
"id": <mt:PageID encode_json='1'>,
"title": "<mt:PageTitle encode_json='1'>",
"date": "<mt:PageDate format='%Y-%m-%d' encode_json='1'>",
"folderLabel": "<mt:Var name='folder_label' encode_json='1'>",
"folderBasename": "<mt:Var name='folder_basename' encode_json='1'>",
"description": "<mt:PageBody encode_json='1'>"
}<mt:Unless name="__last__">,</mt:Unless>
<mt:PagesFooter>]</mt:PagesFooter>
</mt:pages>
</mt:For>
lastn="0"
で全件出力しています。
MTContents(コンテンツタイプ一覧)
<mt:For compress="3">
<mt:Contents content_type="[コンテンツタイプ番号]">
<mt:ContentsHeader>[</mt:ContentsHeader>
{
"id": <mt:ContentID encode_json='1'>,
<mt:ContentField content_field="タイトル">"title": "<mt:ContentFieldValue encode_json='1'>",</mt:ContentField>
"date": "<mt:ContentDate format='%Y-%m-%d' encode_json='1'>",
<mt:ContentField content_field="区分">"category_label": "<mt:CategoryLabel encode_json='1'>",</mt:ContentField>
<mt:ContentField content_field="区分">"category_basename": "<mt:CategoryBasename encode_json='1'>",</mt:ContentField>
<mt:ContentField content_field="概要">"description": "<mt:ContentFieldValue encode_json='1'>"</mt:ContentField>
}<mt:Unless name="__last__">,</mt:Unless>
<mt:ContentsFooter>]</mt:ContentsFooter>
</mt:Contents>
</mt:For>
[コンテンツタイプ番号]
には、作成したコンテンツタイプのIDを記入します。
jsonデータの用途など
jsonデータを生成することで、MTをHeadless CMSとして使用したり、外部サイトへ記事を連携するといったことがしやすくなります。
jsonファイルを生成せず、記事だけを登録してData APIを使用する方法もあるのですが、個人的にはjsonファイルを出力した方が扱いやすいので、この方法をよく使っています。
Discussion