コンテンツの読み込みに時間がかかっています

a-blog cms の CSVインポート機能は私が思ってたより凄かったことを紹介

a-blog cms Advent Calendar 2019 については 12/1 トップバッターで書きましたが、書く人の募集が遅くなってしまったことから 2回目書かないと埋まらない事に。

今回は、少し前の案件で a-blog cms の標準のCSVインポート機能 に助けられたことを紹介してみようと思います。

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

sample.zip

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 を使ってる人には聞いてみたいと思います。お会いした際に、教えてもらえると嬉しいです。


関連記事

この記事のハッシュタグ から関連する記事を表示しています。

a-blog cms Training Camp 2024を開催しました

a-blog cms と htmx で作る SPA(Single Page Application) なブログテーマの実装方法

JavaScript ライブラリ htmx と a-blog cms は相性が良さそうだ

Chat GPT が書く a-blog cms の紹介ブログ記事

PhotoCollage.js を a-blog cms のブログテーマに実装してみた

2023年の a-blog cms を振り返って