LoginSignup
2
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-01

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

前提

MovableTypeって?

数多くある静的CMSのうちの一つです。
公式サイト

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では「ブログ記事」しかインポート&エクスポートできない

MT 要望 - ウェブページのエクスポート・インポート

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

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

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

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

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

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

\(^o^)/

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

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

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

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

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

Qiita - MovableType4(MT4)で使われるMySQLテーブルと各カラムの説明

調査の結果で驚いたのは、「ブログ記事」と「ウェブページ」とが、 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 をブログ単位で「再構築」しない限り、出力済みの静的ファイルは居残ってしまいます。
ご注意ください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0