のっぴきならない事情により、古めかしい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_entries
- blog_2
- blog_entries
- ...
- web_pages
- ...
- etc...
- blog_entries
- blog_3
- ...
- blog_1
やりたいこと:ブログ間を跨ってウェブページを移したい
今回、上記の例でいえば、
- blog_1
- web_pages
- web_page_1
- web_pages
blog_1 に存在している web_page_1 を ↓
- blog_2
- web_pages
- web_page_1
- web_pages
blog_2 へと、移したいのです。
「ね、簡単でしょ?」案件だと思うではないですか。
が、それが公式でサポートされていない!!
MT4では「ブログ記事」しかインポート&エクスポートできない
現在、記事のエクスポート・インポートは「ブログ記事」のみであって「ウェブページ」の内容は対応していない
うん? ちょっと何を言っているのか分からないな。そんな馬鹿なことあるわけないじゃないか……(震え声)
しかし、どこをどう探しても、エクスポートできません。本当にできないようです。
プラグインを使っても、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 をブログ単位で「再構築」しない限り、出力済みの静的ファイルは居残ってしまいます。
ご注意ください。