Json_2Tpl の テンプレートの書き方

a-blog cms ではビルドインモジュール(Entry_BodyやCategory_List...)と呼ばれる最初から入っているモジュールを使って動的にコンテンツを出力していきます。一般的なサイトを作るうえでは、ビルドインモジュールがあればそこまで困らないのですが、a-blog cmsで管理していないデータを出力したり、特殊な絞り込みをしたい場合は、PHPを書いて専用モジュールを開発する必要がありました。

そこで、Ver. 2.7.0 から導入された新しいビルドインモジュール Json_2Tpl を使う事でPHPが得意でない人もJSONさえ用意できれば、PHPを1行も書かずに思い通りのモジュールを作る事ができるようになります。ここでは、JSONがa-blog cmsのテンプレートエンジンとどのような関係があるか見てきます。

JSON

詳しく見ていく前にJSONファイルについて少し学んでおきましょう。

JSONは 名前/値のペア の集まりで構成されています。: の前にあるのが名前です。また、{ } で囲まれている部分をオブジェクトと呼びます。様々なデータを持っているセットと考えていただければ大丈夫です。次に [ ] で囲まれている部分が配列になります。データを複数持つことができます。これらは互いに入れ子にする事ができるようになっています。

説明で利用するJSONサンプル

{
  "items": [{
      "id": "001",
      "name": "商品A",
      "color": "red",
      "size": ["S", "M", "L"],
      "price": {
        "tax_included": 108,
        "without_tax": 100
      }
  },
  ...
}

配列 -> ループ

配列の場合は、ループブロックで表現されます。ループブロックとは <!-- BEGIN 名前:loop ---> という形のブロックになります。

ループブロックの中では、 glueブロック <!-- 名前:glue ---> も利用できるようになります。glueブロックは ループ回数 - 1回 出力されるブロックになります。カンマで区切りたい場合などに利用すると便利です。

特殊な変数として {名前.i} という変数も利用できます。これは現在の配列番号を出力できます。

また配列の中身が、値の場合は(ここでゆうsize)配列の名前(ラベル)がそのまま変数名としても使えます。

<!-- BEGIN items:loop -->
{items.i}
<!-- BEGIN items:glue -->, <!-- END items:glue -->
...
<!-- END items:loop -->

<!-- BEGIN items:loop -->
<!-- BEGIN size:loop -->
<!-- BEGIN size:glue -->, <!-- END size:loop -->
{size.i} : {size}
<!-- END size:loop -->
<!-- END items:loop -->

オブジェクト -> ブロック

名前(ラベル)がついたオブジェクト(例: "price": { ... })の場合は、ブロックで表現できます。ブロックとは <!-- BEGIN 名前 --> の形のブロックです。

<!-- BEGIN price -->
...
<!-- END price -->

値 -> 変数

名前(ラベル)のあとが値の場合、変数として出力できます。変数は {名前} で表現されます。 もちろんこの変数には校正オプションも利用できます。

<!-- BEGIN items:loop -->
  {id}, {name}, {color}
 <!-- BEGIN price -->
  {tax_included}[number_format]
  <!-- END price -->
<!-- END items:loop -->
など

まとめ

  • 配列 -> ループブロック(例 <!-- BEGIN items:loop -->)
  • 名前(ラベル)がついたオブジェクト -> ブロック(例: <!-- BEGIN price -->)
  • 名前(ラベル)のあとが配列でもオブジェクトでもない値 -> 変数(例: {color})

Ver.2.11.28リリースのお知らせ


この記事では、2021年2月5日にリリースした Ver.2.11.28 の改善・修正内容について紹介いたします。

現在お困りの問題に該当する項目がありましたら、お早めにバージョンアップのご検討をお願いいたします。

Ver.2.11.28 のリリースノート

  • CMS-5514 画像のカスタムフィールドがwebp画像の生成ができない問題を修正
  • CMS-5528 スケジュールモジュールの参照先スケジュールに空の項目を用意
  • CMS-5531 シークレットログインページで、「不正なアクセスです」というエラーが多発する問題を修正
  • CMS-5532 Entry_TagRelational モジュールIDでフィールドを利用できるように修正
  • CMS-5533 site2020のナビゲーションで、2回目以降のタップで画面がロックされる問題を修正する
  • CMS-5535 CMS更新時の config.server.php の更新除外項目オプションを用意(system_update_ignore_config)
  • CMS-5539 resizeImg校正オプションで、サーバー環境によって変なパスに変換されてしまう問題を修正
  • CMS-5536 カート機能の再計算処理が間違っている問題を修正

主なリリースノートの詳細な内容

CMS-5528 スケジュールモジュールの参照先スケジュールに空の項目を用意

スケジュールモジュールのコンフィグやモジュールIDの表示設定で、デフォルトが最初に作成したスケジュールセットが選択されているように見えて混乱を招く状態となっていたため、なにも選択していない時のステータスが用意されました。



CMS-5531 シークレットログインページで、「不正なアクセスです」というエラーが多発する問題を修正

Ver.2.11.27のみで発生する、シークレットブログのログインページでログイン1回目に「不正なアクセスです」と表示される現象を確認しました。Ver.2.11.28ではこの問題を修正しており、アップデートするだけで問題が修正されます。

CMS-5532 Entry_TagRelational モジュールIDでフィールドを利用できるように修正

Entry_TagRelational のモジュールで、フィールドの引数が利用できるようになりました。



CMS-5535 CMS更新時の config.server.php の更新除外項目オプションを用意(system_update_ignore_config)

config.server.phpをカスタマイズしていて項目を削除しているとき、CMSのアップデートの時に削除された項目が復活します。意図して削除したい項目をCMSのアップデート時にも復活しないように、config.system.yamlに system_update_ignore_configのオプションを新しく用意しました。

system_update_ignore_config : [] # ここで指定した項目は、CMS更新で再設定されなくなります。(config.server.php の項目で除外したい対象を追加。例: [SESSION_NAME])

最後に

この度はご迷惑をおかけしてしまい申し訳ございませんでした。該当する問題がありましたら、お早めにバージョンアップのご検討をお願いいたします。
また、迅速にご報告いただいたユーザーの皆さま、誠にありがとうございました。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいりますので、引き続き気づいた点がありましたらフィードバックいただけると幸いです。

コンフィグ・ルール・モジュールのインポート

Ver. 2.7.0 より、コンフィグ・ルール・モジュールのみのエクスポート・インポートに対応しました。この機能を使うことにより、開発環境で設定したコンフィグやモジュールを、すでに運用されている本番環境にエントリーなどに影響を与えることなく、インポートすることができるようになりました。

Ver. 3.0.0 をダウンロード

簡単アップデート・アップデートパッケージは、ただいま準備中となります。
申し訳ございませんがもうしばらくお待ちください。1月中旬を予定しております。