a-blog cms の CSVインポート機能は私が思ってたより凄かったことを紹介
a-blog cms Advent Calendar 2019 については 12/1 トップバッターで書きましたが、書く人の募集が遅くなってしまったことから 2回目書かないと埋まらない事に。
今回は、少し前の案件で a-blog cms の標準のCSVインポート機能 に助けられたことを紹介してみようと思います。
- a-blog cms の CSVインポーとでできると思っていたこと
- タグのインポート機能 (2019年秋情報公開)
- カスタムフィールドグループのデータを CSVインポートできる事をご存知でしたか?
- カスタムフィールドグループの項目検索
- JSON ファイル生成もノンプログラミングで出力可能
a-blog cms の CSVインポーとでできると思っていたこと
「a-blog cms CSV インポート」のキーワードで Google を使って検索すると以下のような情報がヒットします。Microsoft Excel や Apple Numbers 、Google スプレッドシートなどを利用して1行が1データになるように情報を管理し、それを取り込みすることを行うのが CSVインポートの基本だと思います。
ドキュメント
ハンズオン
a-blog cms では、エントリー(記事)とユーザーの情報の基本情報とカスタムフィールドを CSV形式で用意することで登録することができることがわかります。
CSVインポート機能と書かれていますが、追加( insert ) だけでなく、entry_id や user_id を CSVに含めることで、更新( update ) についてもサポートしています。
※ ユーザーのインポートについては、利用ユーザー数のライセンスが、無制限ユーザーの場合のみになります。
タグのインポート機能 (2019年秋情報公開)
どのバージョンからインポートできるようになったのか分かってないのですが、この秋にドキュメントの CSVファイルからのインポート に entry_tag が追記されました。なので、a-blog cms 歴が長い人も知らない人が多いのではないでしょうか。
,aaa/bbb/ccc,
上記のように / を区切り文字で書くことで3つのタグ登録できます。
カスタムフィールドグループのデータを CSVインポートできる事をご存知でしたか?
一般的な CSVインポート機能であれば、縦がデータ数、横が項目数になるようなデータであるのが一般的です。a-blog cms でカスタムフィールドグループというカタチで登録できる管理画面を作った場合 CSVインポートが難しいと思っていました。
でも、それは私が知らなかっただけで a-blog cms なら出来るのです!
例えば、以下のような管理画面を用意します。
AAA・BBB・CCC については 、普通に CSV形式にすることはできますね。
AAA | BBB | CCC |
---|---|---|
あああ | BBB-1 | CCC-1 |
いいい | BBB-1 | CCC-2 |
ううう | BBB-2 | CCC-3 |
カスタムフィールドグループの CSV化について
より分かりやすくするために実際のソースコードも掲載しておきます。
<!-- BEGIN DDD:loop --> <tr class="sortable-item"> <td class="item-handle acms-admin-table-nowrap"> <i class="acms-admin-icon-sort"></i> </td> <td> <input type="text" name="EEE[]" value="{EEE}" class="acms-admin-form-width-full" /> </td> <td> <input type="text" name="FFF[]" value="{FFF}" class="acms-admin-form-width-full" /> </td> <td class="acms-admin-table-nowrap"> <input type="button" class="item-delete acms-admin-btn-admin acms-admin-btn-admin-danger" value="削除" /> </td> </tr> <!-- END DDD:loop -->
実際のインポートデータ
entry_title | AAA | BBB | CCC | @DDD[1] | @DDD[2] | EEE[1] | EEE[2] | EEE[3] | FFF[1] | FFF[2] | FFF[3] |
---|---|---|---|---|---|---|---|---|---|---|---|
サンプル1 | あああ | BBB-1 | CCC-1 | EEE | FFF | あああ | いいい | XXX | YYY | ||
サンプル2 | いいい | BBB-1 | CCC-2 | EEE | FFF | かかか | ききき | くくく | XXX | ZZZ | YYY |
サンプル3 | ううう | BBB-2 | CCC-3 | EEE | FFF | さささ | ZZZ |
1行目は読み込むデータの形式を指定します。@DDD[1], @DDD[2] については 、DDD:loop の部分になります。カスタムフィールドグループのループ名を1行目に書きます。そして、そのデータには全部の行に同じ入力項目名 EEE や FFF を記述する事になります。
また、EEE[1] , EEE[2] , EEE[3] などについては、最大の件数だけ連番の項目を設定し、件数が少ない場合には空で項目を用意しておきます。
カスタムフィールドグループの項目検索
今回は CSVインポートの事を書いていますがオマケで、カスタムフィールドグループの検索についても少し紹介しておきます。
/field/FFF/ZZZ
のような感じの文字列を URL の最後に追加すると、サンプル2・サンプル3 が検索される事になります。 このカスタムフィールドグループの項目検索についても、少し前まで検索対象になっている事を私が知りませんでした。私が知らないくらいなので、合わせてご紹介しておきます。
JSON ファイル生成もノンプログラミングで出力可能
最近は、フロントエンドでいろいろやるので、JSON形式でデータが出力できれば OK な事って多くなってきていると思います。
上記の CSVインポートしたデータを JSON にすると以下のようになります。
{"entry": [ { "entry_title": "サンプル1", "AAA": "あああ", "BBB": "BBB-1", "CCC": "CCC-1", "DDD": [ { "EEE": "あああ", "FFF": "XXX" }, { "EEE": "いいい", "FFF": "YYY" } ] }, { "entry_title": "サンプル2", "AAA": "いいい", "BBB": "BBB-1", "CCC": "CCC-2", "DDD": [ { "EEE": "かかか", "FFF": "XXX" }, { "EEE": "ききき", "FFF": "ZZZ" }, { "EEE": "くくく", "FFF": "YYY" } ] }, { "entry_title": "サンプル3", "AAA": "ううう", "BBB": "BBB-2", "CCC": "CCC-3", "DDD": [ { "EEE": "さささ", "FFF": "ZZZ" } ] } ] }
a-blog cms のテンプレートで JSON を出力できるようにすると以下のようなテンプレートファイルを用意します。
<!-- BEGIN_MODULE Entry_Summary id="json_sample" -->\{"entry": [ <!-- BEGIN unit:loop --><!-- BEGIN entry:loop --> \{ "entry_title": "{title}", "AAA": "{AAA}", "BBB": "{BBB}", "CCC": "{CCC}", "DDD": [<!-- BEGIN DDD:loop --> <!-- BEGIN DDD:glue -->,<!-- END DDD:glue -->\{ "EEE": "{EEE}", "FFF": "{FFF}" \}<!-- END DDD:loop --> ] \}<!-- BEGIN glue -->,<!-- END glue --> <!-- END entry:loop --><!-- END unit:loop --> ] \} <!-- END_MODULE Entry_Summary -->
モジュールID の json_sample で条件を設定すれば必要なエントリーのみ抽出して JSON出力も可能になります。繰り返しの項目の区切り文字のカンマの表示制御部分に私自身も少し悩みました。というか DDD:glue という表記は初めて知りました。
こんなデータを入力する画面を作ろうと思った際には、他の CMS を使ってる人はどうしているんだろ? また、入力画面ができたとして、例えばお客様にCSV形式でデータ支給された際に取り込みのプログラムはプラグインとかでなんとかなるのかな? そこら辺を他の CMS を使ってる人には聞いてみたいと思います。お会いした際に、教えてもらえると嬉しいです。