Movable Typeのコンテンツデータの情報でCSVファイルを作成する

Movable Typeの記事の場合はエクスポートする機能が標準で用意されていますが、コンテンツデータの場合はその機能がありません。
今回はコンテンツデータに登録している情報したいということがあったので、テンプレートでCSVファイルを作成する形を試してみます。

サンプルコード

今回は「商品情報」というコンテンツタイプで、以下のような内容で登録しています。

CSVファイルを作成する上でのポイントは以下の2点です。

  1. 値にカンマ(,)やダブルクォーテーション(“)、、改行を含む場合はダブルクォーテーションで囲む必要がある。(含んでない場合にダブルクォーテーションで囲んでも問題ない)
  2. 値に含まれるダブルクォーテーションは、2つ並べてエスケープする(” → “” にする)。

上記を踏まえてテンプレートを作成してみます。
インデックステンプレートの作成を行い、以下のような内容にして、出力ファイル名をitem.csvとして保存します。

<mt:Ignore>コンテンツの総数取得</mt:Ignore>
<mt:Contents content_type="商品情報">
<mt:SetVarBlock name="total"><mt:ContentsCount></mt:SetVarBlock>
</mt:Contents>

<mt:Ignore>コンテンツから必要な項目を取得して、CSVの行単位でrowsに格納</mt:Ignore>
<mt:Contents content_type="商品情報" limit="$total">
<mt:SetVarBlock name="name">"<mt:ContentLabel regex_replace='/"/g','""'>"</mt:SetVarBlock>
<mt:SetVarBlock name="desc"><mt:ContentField content_field="商品説明文">"<mt:ContentFieldValue regex_replace='/"/g','""'>"</mt:ContentField></mt:SetVarBlock>
<mt:SetVarBlock name="price"><mt:ContentField content_field="商品価格">"<mt:ContentFieldValue regex_replace='/"/g','""'>"</mt:ContentField></mt:SetVarBlock>
<mt:Ignore>取得した項目をカンマ区切りにして、rowsの配列に追加</mt:Ignore>
<mt:SetVarBlock name="rows" function="push"><mt:Var name="name">,<mt:Var name="desc">,<mt:Var name="price"></mt:SetVarBlock>
</mt:Contents>

<mt:Ignore>CSVの内容出力</mt:Ignore>
商品名,商品説明文,商品価格
<mt:Loop name="rows"><mt:Var name="__value__">
</mt:Loop>

基本的にはコード内でコメントしている通りですが、最初の1~4行目でコンテンツデータの総数を取得、その総数を使って6~13行目でコンテンツデータのループを回しています。
8~10行目がCSVで使う商品名(データ識別ラベル)と商品説明文、商品価格の取得で、regex_replaceで値に含まれるダブルクォーテーション(“)をダブルクォーテーション2つ(“”)に置き換えたうえで、値全体をダブルクォーテーションで囲っています。
12行目でそれぞれの値をカンマ区切りでまとめてrowsという配列形式の変数に追加して、16行目でヘッダー行を出力した上で、17~18行目でrowsの配列でループして各行を出力、という流れになります。

これで以下のようなCSVファイルが作成できました。

商品名,商品説明文,商品価格
"商品K",,
"商品J","商品Jです",
"商品I",,"$50"
"商品H",,
"商品,G","商品,Gです","1,000円"
"商品""F""","""商品F""です","""300""円"
"商品E","商品Eです。
おすすめです。","10,000円"
"商品D",,
"商品,C","""商品C""です。",
"商品B","商品Bです。","1000"
"商品A","商品Aの説明文です。","500円"

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年12月
1234567
891011121314
15161718192021
22232425262728
293031