Craft CMS の Feed Me というプラグインを使って JSON フォーマットで MTOS から Craft にデータを移行しました。その方法をご紹介します。
MTOS に登録されている記事データを JSON 形式で Craft に移行しました。「Feed Me」という Craft プラグインを使ってとても手軽に移行できたので、その方法をご紹介します。
はじめに Feed Me という Craft プラグインをインストールします。
このプラグインは、XML や RSS、ATOM、JSON などのフォーマットで Craft にデータをインポートすることができます。すべての機能を使いためには $99 の Pro 版を購入する必要がありますが、Entries だけなら無料版でインポートすることができます。
プラグインのインストール手順は下記のとおりです。
feedme
ディレクトリを craft/plugins
にアップロードします。設定 > プラグイン
のページへ移動し、 Feed Me プラグインの インストール
をクリックします。Welcome to Feed Me!
という画面が表示されるので Get Started
をクリックしてインストール完了です。MTOS のインデックステンプレートで、Feed Me でインポートするための JSON ファイルを作成します。
JSON ファイルの書式は下記のとおりとなります。
{
"channel": {
"items": [
{
"title": "My Title",
"slug": "my-title"
},
{
"title": "Another Title",
"slug": "another-title"
}
]
}
}
次に、この書式でインポートする記事の情報を書き出します。JSON を書き出すためのインデックステンプレートは下記のようになります。
<mt:Ignore>本文欄からサイトのホスト名部分を削除するための正規表現をセット</mt:Ignore>
<mt:SetVars>
pattern =/<mt:BlogURL>/g
replacement =<mt:BlogRelativeURL>
</mt:SetVars>
<mt:Ignore>配列のための変数を初期化</mt:Ignore>
<mt:SetVar name="items" />
<mt:Entries lastn="0">
<mt:Ignore>配列 items に入れていく各アイテムをセットするハッシュ変数 item を初期化</mt:Ignore>
<mt:SetVar name="item" />
<mt:Ignore>各アイテムの情報をハッシュ変数 item にセット</mt:Ignore>
<mt:SetVarBlock name="item" key="title"><mt:EntryTitle remove_html="1" /></mt:SetVarBlock>
<mt:SetVarBlock name="item" key="id"><mt:EntryID /></mt:SetVarBlock>
<mt:SetVarBlock name="item" key="body"><mt:EntryBody regex_replace="$pattern","$replacement" trim="1" /></mt:SetVarBlock>
<mt:SetVarBlock name="item" key="date"><mt:EntryDate language="en"></mt:SetVarBlock>
<mt:Ignore>ハッシュ変数 item を配列変数 items に push</mt:Ignore>
<mt:SetVar name="items" function="push" value="$item" />
</mt:Entries>
<mt:Ignore>配列変数 items を変数 channel にセット</mt:Ignore>
<mt:SetVar name="channel" key="items" value="$items" />
<mt:Ignore>最終的に出力する変数 out に channel をセット</mt:Ignore>
<mt:SetVar name="out" key="channel" value="$channel" />
<mt:Ignore>変数 out を JSON で出力</mt:Ignore>
<mt:Var name="out" to_json="1" trim="1" />
投稿日時もインポートする場合は EntryDate
に language="en"
モディファイアをつけるのがポイントです。
また、本文欄に入っている画像の URL などからもホスト名部分を regex_replace
モディファイアで削除しておきます。
regex_replace="$pattern","$replacement"
regex_replace
モディファイアに渡している変数は、テンプレートの冒頭でセットしています。
このテンプレートで書き出した JSON の URL をメモしておきましょう。
MTOS の本文欄に入っていた画像や、サムネイルが入っている asset_c
ディレクトリを予め craft/public
ディレクトリに移動しておきます。
Feed Me プラグインをインストールすると、管理画面の左メニューに Feed Me
というメニューが追加されます。これをクリックして Feed Me Feeds
ページへ移動し New feed
ボタンをクリックします。
各項目に必要な値を入れていきましょう。
名前
今回のインポートの設定を保存しておく名前です。 From MTOS
としました。
Feed URL
先程書き出した JSON ファイルの URL です。
Feed Type
JSON Feed
を選択します。
Primary Element
今回のフォーマットで作成した場合は items
になります。
Element Type
エントリ
を選択します。
セクション
データをインポートするセクションを選択します。
入力タイプ
データをインポートするセクションの入力タイプを選択します。
Import strategy
どのようにインポートするかを選択します。今回はデータの以降なので Create new elements
を選択します。
Passkey
初期値のままでOKです。
Backup
OFF
にしておきます。
ここまで入力したら、 Save & Continue
ボタンをクリックします。
次に Craft のどのフィールドに JSON ファイルの値をインポートするかを設定します。
各項目のドロップダウンリストから必要な割り当てる情報を選択します。
この中で、 ステータス
と 投稿者
は Don't import
のままで、右側のドロップダウンリストから値を選択しました。 Entry ID
は Don't import
にしました。
ページ最下部の Set a unique identifier for existing elements
では重複チェックするフィールドを選択します。今回は スラグ
だけ選択しました。
ここまでの設定が終わったら Save & Iimport
ボタンをクリックしてインポートを開始します。
Processing complete!
が表示されればインポート完了です。
インポートが終わったらサイドメニューの エントリ
でインポートが成功しているか確認しましょう。
今回は Feed Me プラグインのエントリのインポートを簡単にご紹介しました。
Pro 版を購入すればエントリ以外もインポートできるようになります。詳細は下記のページをご覧ください。
以上です。