Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/burnworks/movabletype_json_comma_plugin

Add `mt:JSONComma` function tag for Movable Type
https://github.com/burnworks/movabletype_json_comma_plugin

Last synced: about 1 month ago
JSON representation

Add `mt:JSONComma` function tag for Movable Type

Awesome Lists containing this project

README

        

# Movable Type JSON Comma plugin

Add `mt:JSONComma` function tag for Movable Type.

JSON データをテンプレートで作るときに、面倒くさいカンマ(`,`)の処理(いわゆる「末尾のカンマ」問題)をほんのちょっとだけ楽にする Movable Type プラグイン。

## インストール
下記のような配置になるように、`JsonComma` ディレクトリ以下を Movable Type のインストールディレクトリに設置してください。

```
$MT_DIR/
└ plugins/
└ JsonComma/
├ config.yaml
└ lib/
└ MT/
└ Plugin/
└ JsonComma.pm
```

## 追加されるファンクションタグ

```
<$mt:JsonComma$>
```

## 使い方

例えば、`` や ``、`` などのブロックタグで JSON を作るとき、下記のようにループの最後だけカンマが出力されないようにする必要があります。

```json

{
"title": "<$mt:EntryTitle encode_json="1"$>",
"author": "<$mt:EntryAuthor encode_json="1"$>"
},

```

`<$mt:JsonComma$>` ファンクションタグを使用することで下記のように書けます。

```json

{
"title": "<$mt:EntryTitle encode_json="1"$>",
"author": "<$mt:EntryAuthor encode_json="1"$>"
}<$mt:JsonComma$>

```

また、`` (`` も同じ)に関しては、`__last__` などの予約変数が取得できない(なんで?)ため、下記のように `` タグなどを使う必要があります。

```json

{
"label": "<$mt:CategoryLabel encode_json="1"$>",
"path": "<$mt:CategoryBasename encode_json="1"$>",
"link": "<$mt:CategoryArchiveLink encode_json="1"$>"
}<$mt:Var name="comma"$>

```

`<$mt:JsonComma$>` ファンクションタグを使用することで下記のようにシンプルに書けます。

```json

{
"label": "<$mt:CategoryLabel encode_json="1"$>",
"path": "<$mt:CategoryBasename encode_json="1"$>",
"link": "<$mt:CategoryArchiveLink encode_json="1"$>"
}<$mt:JsonComma$>

```

下記のように、`` (`` も同じ)内で、`` をネストして使用した場合でも `<$mt:JsonComma$>` ファンクションタグが動作するようにはしています。

```json

{
"label": "<$mt:CategoryLabel encode_json="1"$>",
"path": "<$mt:CategoryBasename encode_json="1"$>",
"link": "<$mt:CategoryArchiveLink encode_json="1"$>",
"entry": [

{
"title": "<$mt:EntryTitle encode_json="1"$>",
"author": "<$mt:EntryAuthor encode_json="1"$>"
}<$mt:JsonComma$>

]
}<$mt:JsonComma$>

```

## 注意点

`` と `` を下記のようにネストしているときに、ネストされた `` 内で `<$mt:JsonComma$>` を使うとうまく行かない(`` の最後のループ内は、`` 内にカンマが全く出力されない)です。

原因はわかってるんですが、直すの面倒くさいのと、下記の例の様に `glue=","` を使用すれば解決するので、もしうまく行かなかった場合は参考にしてください。

```json

{
"title": "<$mt:EntryTitle encode_json="1"$>",
"author": "<$mt:EntryAuthor encode_json="1"$>",
"category": [

{
"label": "<$mt:CategoryLabel encode_json="1"$>",
"path": "<$mt:CategoryBasename encode_json="1"$>",
"link": "<$mt:CategoryArchiveLink encode_json="1"$>"
}

]
}<$mt:JsonComma$>

```

その他、すべてのブロックタグの入れ子の組み合わせで試していないので、うまくいったりいかなかったりする場合があると思います。そういう時は別の方法を考えてください。