MovableTypeにてカテゴリの一括登録をしたい

タイトルの必要に迫られ便利なプラグインを探してみるも、なかなか見つからなかったのでDB(PostgreSQL)への直接入力を行ってみた。MTのバージョンは4.27。

まずはカテゴリテーブルの調査から。カテゴリ関連で使用されているのは「mt_category」テーブル。登録後に運用をしてみたところ、ユーザーID等がある時点において正しく設定がされていれば特に問題はなさそうなので、このテーブルに絞って設定を行う。

category_id カテゴリID ※1
category_allow_pings トラックバックの許可 0(未許可)
category_author_id 作成者 1(管理者)
category_basename 識別名 ※2
category_blog_id 所属ブログのID ※3
category_class カテゴリのクラス category
category_created_by 作成者ID 1(管理者)
category_created_on 作成日 2010-01-01 00:00:00
category_description カテゴリの説明 空白
category_label カテゴリのラベル ※4
category_modified_by 更新者 1(管理者)
category_modified_on 更新日 2010-01-01 00:00:00
category_parent 親のカテゴリID ※5
category_ping_urls トラックバックURL 空白
category_order_number カテゴリの並び順 ※6

この中で、気をつけなければならないのは※1~※6の項目。

※1 カテゴリID
キーなので、テーブル内で重複しないような番号を設定する。
※2 識別名
同一のcategory_blog_id内で重複しないよう設定する。category_blog_idが違えば同じ名前でも問題ない。
※3 所属ブログのID
所属するブログのIDを設定する。
※4 カテゴリのラベル
自由に設定して構わない。
※5 親のカテゴリID
ここに設定したIDが親のIDとなる。存在するcategory_idを設定するか、0を設定してトップカテゴリとする。
※6 カテゴリID
同一のcategory_blog_id内で重複しないよう設定する。category_blog_idが違えば同じ名前でも問題ない。

次に、上記の情報を元にSQL文を作成する。サンプルとして、次のようなカテゴリを考える。

  • 野菜
    • じゃがいも
    • にんじん
    • きゅうり
  • 果物
    • りんご
    • すいか
    • みかん
  • 穀物
    • いね
    • まめ
    • とうもろこし

SQL文は次のようにする。

INSERT INTO mt_category VALUES (1,0,1,'yasai',1,'category'::character varying,1,'2010-01-01 00:00:00','','野菜',1,'2010-01-01 00:00:00',0,'',1);
INSERT INTO mt_category VALUES (2,0,1,'kudamono',1,'category'::character varying,1,'2010-01-01 00:00:00','','果物',1,'2010-01-01 00:00:00',0,'',2);
INSERT INTO mt_category VALUES (3,0,1,'kokumotsu',1,'category'::character varying,1,'2010-01-01 00:00:00','','穀物',1,'2010-01-01 00:00:00',0,'',3);
INSERT INTO mt_category VALUES (4,0,1,'yasai1',1,'category'::character varying,1,'2010-01-01 00:00:00','','じゃがいも',1,'2010-01-01 00:00:00',1,'',1);
INSERT INTO mt_category VALUES (5,0,1,'yasai2',1,'category'::character varying,1,'2010-01-01 00:00:00','','にんじん',1,'2010-01-01 00:00:00',1,'',2);
INSERT INTO mt_category VALUES (6,0,1,'yasai3',1,'category'::character varying,1,'2010-01-01 00:00:00','','きゅうり',1,'2010-01-01 00:00:00',1,'',3);
INSERT INTO mt_category VALUES (7,0,1,'kudamono1',1,'category'::character varying,1,'2010-01-01 00:00:00','','りんご',1,'2010-01-01 00:00:00',2,'',1);
INSERT INTO mt_category VALUES (8,0,1,'kudamono2',1,'category'::character varying,1,'2010-01-01 00:00:00','','すいか',1,'2010-01-01 00:00:00',2,'',2);
INSERT INTO mt_category VALUES (9,0,1,'kudamono3',1,'category'::character varying,1,'2010-01-01 00:00:00','','みかん',1,'2010-01-01 00:00:00',2,'',3);
INSERT INTO mt_category VALUES (10,0,1,'kokumotsu1',1,'category'::character varying,1,'2010-01-01 00:00:00','','いね',1,'2010-01-01 00:00:00',3,'',1);
INSERT INTO mt_category VALUES (11,0,1,'kokumotsu2',1,'category'::character varying,1,'2010-01-01 00:00:00','','まめ',1,'2010-01-01 00:00:00',3,'',2);
INSERT INTO mt_category VALUES (12,0,1,'kokumotsu3',1,'category'::character varying,1,'2010-01-01 00:00:00','','とうもろこし',1,'2010-01-01 00:00:00',3,'',3);

このSQL文を発行してデータを登録し、さらにシーケンスのmt_category_idの値を最終値(今回であれば12)に設定する。MySQLの場合にはcategory_idにauto_incrementを付けておけばいいのかな。

以上で、カテゴリの一括登録ができる。あとはSQL文を上手に複製していけば良い。ちなみに、この方法にてブログ1つあたり1,000以上、全体で数千のカテゴリを登録してみたが、今のところは正常に動いている様子。ただ、再構築に非常に時間がかかるので、せめてアーカイブだけでもダイナミック・パブリッシングにしたほうが良いと思われる。

コメントを残す

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

CAPTCHA