これは Movable Type Advent Calendar 2017 24日目の記事です。
Data API にはじまり、MTAppjQuery に終わるという、今年も Movable Type 一筋の一年でしたが、みなさんはいかがでしたか。来年は MT7 への移行が熱くなりそうですね。
はじめに
最近、以下のことを相談されることがあったので、解決策につながる方法を紹介したいと思います。
- ブログ記事のベース名を変更した際に、古いベース名のファイルが残っているので探したい。
- 公開しているコンテンツの中で、Movable Type で出力しているものと、そうでないものを整理したい。
(1) はよく聞く話です。ブログ記事やウェブページのベース名は、タイトル欄に入力された文字列を元に自動生成されます。このベース名を、理解しやすい URL にするために変更する際、対象を公開したまま実行するため、元のベース名のファイルが残ってしまうというものです。
(2) は (1) の現象の他に、期間限定のプロモーションサイトやランディングページを FTP 等でアップロードしているサイトではよくある話ですね。
これらを解決するには、 Movable Type で出力したファイル
と 実際のファイル
を比較することになります。これを手助けしてくれるのが mt_fileinfo
というテーブルです。
mt_fileinfo テーブルとは
mt_fileinfo テーブルは、Movable Type をインストールした際に生成されるテーブルの一つで、Movable Type が出力したファイルの情報を管理します。以下は、その代表的なものです。()内は、mt_fileinfo テーブル内のカラム名です。
- 出力先のファイルパス(fileinfo_file_path)
- 出力先の URL からウェブサイト・ブログのサイト URL 部を除いたもの(fileinfo_url)
- ブログ ID(fileinfo_blog_id)
- テンプレート ID(fileinfo_template_id)
- エントリー ID(fileinfo_entry_id)
- カテゴリー ID(fileinfo_category_id)
- アーカイブ種別(fileinfo_archive_type)
mt_fileinfo テーブルの情報を取得する
私の環境では phpMyAdmin とか入れていないので、mysql コマンドの出力結果を、テキストファイルに保存しています。
mysql のシェル内で、以下を実行すると、ファイルの一覧を出力できそうです。
SELECT fileinfo_file_path FROM mt_fileinfo;
ですが、これでは不十分です。理由は、mt_fileinfo テーブルには 未公開・下書き
のものもあるからです。
記事やウェブページの公開状態の確認
記事やウェブページの公開状態は、mt_entry テーブルの entry_status カラムの値で確認できます。entry_status の値は、以下のようになっています。
値 | 解説 |
---|---|
1 | 未公開(原稿) |
2 | 公開 |
3 | 未公開(承認待ち) |
4 | 日時指定 |
5 | 未公開(スパム) |
6 | 非公開(公開終了) |
現在、公開されているものは、entry_status の値が 2
のものになります。
インデックス・テンプレートや他のアーカイブの公開状態の確認
インデックス・テンプレートや他のアーカイブの公開状態は、mt_template テーブルの template_build_type カラムの値で確認できます。
値 | 解説 |
---|---|
0 | 公開しない |
1 | スタティック(既定) |
2 | 手動 |
3 | ダイナミック |
4 | 公開キュー経由 |
現在、公開されているものは、template_build_type の値が 0
のものになります。
Movable Type が出力しているファイルの一覧の取得するには
整理すると、以下のようになります。
- mt_fileinfo テーブルの fileinfo_file_path の値で、出力しているファイルの一覧ができる。
- 記事やウェブページの公開状態を反映するには、mt_fileinfo テーブル内の fileinfo_entry_id の値と mt_entry テーブルの entry_id を連携させて、 entry_status の値が 2 のもの のみを抽出する。
- インデックス・テンプレートや他のアーカイブの公開状態を反映するには、mt_fileinfo テーブル内の fileinfo_template_id の値と mt_template テーブルの template_id を連携させて、 template_build_type の値が 0 以外のもの のみを抽出する。
ここまでわかれば、あとは頑張るだけです。今回は、SQL 文で INNER JOIN や条件を指定せず、以下の SQL で出力された結果を EXCEL で VLOOKUP してマスターを作成しました。
SELECT fileinfo_file_path,fileinfo_blog_id,fileinfo_template_id,fileinfo_archive_type,fileinfo_entry_id FROM mt_fileinfo;
SELECT entry_id,entry_blog_id,entry_status FROM mt_entry;
SELECT template_id,template_blog_id,template_build_type FROM mt_template;
最後に、作成したマスターとウェブサーバーに直接アクセスして得たファイルの一覧を比較することで、欲しい結果が得られました。
まとめ
- mt_fileinfo テーブルをはじめに幾つかのテーブルの情報を連携させると、Movable Type が出力したファイルの一覧ができる。
- ウェブサーバーに直接アクセスして得たファイルの一覧と、VLOOKUP することで Movable Type が過去に生成したファイルの一覧ができる。
- 作業を楽にするためには、プログラムが必要ですね。MT7 のリリースに間に合うように開発したいな。