読者です 読者をやめる 読者になる 読者になる

ピティナ開発者ブログ

全日本ピアノ指導者協会のIT担当者が気まぐれにつづる技術系中心のブログです


MovableType4(MT4)でウェブページを同一MT内の別ブログに移す

Hiroyuki Noguchi MovableType MySQL

Hiroyuki Noguchiです。

のっぴきならない事情により、古めかしいMovableType4(MT4)を弄る必要が出てきました。
特に、一つのブログ内にある「ウェブページ」を、別のブログに移さなくてはならなくなったのですが……
何と、それがオフィシャルではできない!! ……という、超残念仕様に、立ち向かってみました。

前提

MovableTypeって?

数多くある静的CMSのうちの一つです。

www.sixapart.jp

MT内部の階層構造(ざっくり)

同一MT内で複数のブログを運用することができます。
階層構造は概念的にはこういう感じです。

  • MT
    • blog_1
      • blog_entries
        • blog_entry_1
        • blog_entry_2
      • web_pages
        • web_page_1
        • web_page_2
      • etc…
    • blog_2
      • blog_entries
      • web_pages
      • etc…
    • blog_3

やりたいこと:ブログ間を跨ってウェブページを移したい

今回、上記の例でいえば、

  • blog_1
    • web_pages
      • web_page_1

blog_1 に存在している web_page_1 を ↓

  • blog_2
    • web_pages
      • web_page_1

blog_2 へと、移したいのです。
「ね、簡単でしょ?」案件だと思うではないですか。

が、それが公式でサポートされていない!!

MT4では「ブログ記事」しかインポート&エクスポートできない

ウェブページのエクスポート・インポート - MTQ | Movable Type ユーザーコミュニティ

現在、記事のエクスポート・インポートは「ブログ記事」のみであって「ウェブページ」の内容は対応していない

うん? ちょっと何を言っているのか分からないな。そんな馬鹿なことあるわけないじゃないか……(震え声)
しかし、どこをどう探しても、エクスポートできません。本当にできないようです。

プラグインを使っても、MT4ではブログ間を跨ったページコピーなどはできない

エクスポートできなければ、複製すればいいじゃない。
複製機能が実装されていないなら、プラグインを入れればいいじゃない。

junnama.alfasado.net

……ブログ内での複製はできたものの、ブログを超えた複製ができなかった。

www.skyarc.co.jp

……MT4に対応していなかった。

\(^o^)/

さて、どうしたものかな……

MT内部のMySQLを直接弄ってウェブページを別ブログへ移してやる

MTが内部で使用しているデータベースはMySQLです。
なので、もう、直接MySQLの中を見て弄ってしまえ!という判断。

MT内部のMySQLを調査してみた

まずは、調査してみました。これは別記事に分割しました。

ptna.hateblo.jp

調査の結果で驚いたのは、「ブログ記事」と「ウェブページ」とが、 mt_entry という同一テーブル内で論理的に分けられているだけだった、という点ですね……
物理的に別テーブル管理であるならまだしも、同一テーブル内なのに、ブログ記事はインポート&エクスポートできて、ウェブページはできないのか!!
悲しい。

どのテーブルのどのカラムをどうすればいいか

  • テーブル :mt_entry
  • カラム :entry_blog_id, entry_atom_id

こいつらですね。
上記記事から該当箇所を引用。

* entry_blog_id :どのブログ内の記事か

* entry_atom_id :固有キーとか色々合成されているフィールド
  * 入力される書式例 : tag:hoge.com,2017:/blog_name//99.123456
  * 上記例の 2017 にあたる数字は、このレコードの entry_authored_on の year 部分である
  * 上記例の 99 にあたる数字は、このレコードの entry_blog_id である
  * 上記例の 123456 にあたる数字は、このレコードの entry_id である

なので、たとえば、 entry_blog_id = 99 から、 98 へ移したい場合は……

entry_blog_id : 99 (blogのディレクトリ名が blog_name_1 であるとする)
entry_atom_id : tag:hoge.com,2017:/blog_name_1//99.123456

entry_blog_id : 98 (blogのディレクトリ名が blog_name_2 であるとする)
entry_atom_id : tag:hoge.com,2017:/blog_name_2//98.123456

こうしてあげればいいわけですね。

実際、やってみたところ……問題なく移せました!! 良かった。救われた。
全部手動コピーをしていかなくてはならないとか、つらすぎますからね……

テーブルは同じなので、ブログ記事を移すことももちろんできます。簡単にできるんですよ、テーブルが同じなので(強調)

注意点

blog_name_1 → blog_name_2 へ、ウェブページを移した後ですが、 blog_name_1 をブログ単位で「再構築」しない限り、出力済みの静的ファイルは居残ってしまいます。
ご注意ください。

(著: Hiroyuki Noguchi)
この記事は現在0人が閲覧中