Movable Type 5
小林
2009年10月15日
最近はMT5b3を検証しているのですが、まだMT4からのバージョンアップを体験していなかったので試してみました。
※この情報はベータ版での検証ですので、製品版では問題ないかもしれません。あしからずご了承ください。
検証に使ったのはこのskyarc.co.jpで運用しているMT4.3。実際にウェブサイトとして運用しているものなので、実際のバージョンアップの問題もわかりやすいと思ってここで試しました。
まずこのMTの情報は以下です。
- バージョン:MT4.32
- ブログ数:16
- ブログ記事数:1225
- ウェブページ数:209
うちのウェブサイト、以外にページ数多いですね・・・5年運用するとここまで増えるものなのだ・・・で、ブログの中にはスカイアークのサービスサイト、コーポレートサイト、MTエンジニアブログなどが含まれます。
バージョンアップの作業は以下です。
- データベースをバックアップする
- MT5をサーバーにアップロードする
- cgiの権限を変更する
- プラグインをMT4から移行する
- mt-staticのsupportをMT4から移行する
- mt-config.cgiのデータベース情報を書き換える
- mt.cgiにアクセスするとアップデートが走るのでアップデートする
以上です。さて、ログインしてみると・・・
- New WebSite co.jp (blog_id 26)
- New WebSite careerblog.jp (blog_id 27)
という2つのウェブサイトが出来ました。アップデート時にドメインを見て、ウェブサイトを作成するようです。で、co.jpウェブサイトの設定情報をよく見てみると、なんとサイトURLがco.jpになってました。ん?なんだこれは?
co.jpブログの下にはMTエンジニアブログ(http://www.skyarc.co.jp/engineerblog/)、広報ブログ(http://www.skyarc.co.jp/pressroom/)など13ヶのブログがぶら下がっていました。
ここでおかしいのが、ブログ数が16ヶだったのですが、14つしかブログが出来ていない。よく見るとhttp://www.skyarc.co.jp/(blog_idは1)がウェブサイトにぶら下がっておらず見えない。
データベースを見てみるとblog_idが1のブログはblog_parent_idがNULLになっているためウェブサイトのブログ一覧からは見れないようです。ここを無理矢理データベースを書き換えて、blog_parent_idを26にしてみたところウェブサイトのブログ一覧に表示されました。これは不具合っぽいですね。
で、skyarc.co.jpはblog_id=1がいわゆるMT5でのウェブサイトとして取り扱いたいブログなのですが、MT5上ではバージョンアップ時は「ブログ」として取り扱われます。ウェブサイトに移行しようにもこのブログにはウェブページだけではなくブログ記事も共存しているので、ウェブサイトとして運用するには「ブログ」を新しく作ってそこにblog_id=1のブログ記事を移行しなければならないんでしょうか?
気になる点が、
- blog_id=1で、かつhttp://www.skyarc.co.jp/のブログのblog_parent_idがNULLになって表示されなかった
- MT4でウェブサイトとして運用していたものをMT5上で「ウェブサイト」としてしようとしても、ウェブサイトにはブログ記事が書けないので新しくブログを作ってそこにブログ記事を移行する必要がある?それができなければせっかくMT5に「ウェブサイト」が出来ても、「ブログ」として運用しなければならない?
というところです。
ちなみに今日は風邪を引いてしまってへこたれてしまいました・・・中途半端な検証で申し訳ありませんが、なにかわかればまた書きたいと思います。
小林
2009年09月29日
本日は先日お話ししたtheme.yamlを触ってもらったことを前提に、MT5のconfig.yamlを説明したいと思います。MTを扱っているデザイナさんやMTMLコーダーの方は是非ご覧ください。
先日theme.yamlでフォルダ・ウェブページが追加できますと説明しましたが、MT5でconfig.yamlでもフォルダ・ウェブページの追加が出来ます。つまりtheme.yamlと同じ事が出来ます。
config.yamlだとcallbackを使って処理を追加できて、フィールド拡張も出来て、テンプレートセットも追加出来ます。つまりより簡単にMTを操作できるので、本当の意味で標準パッケージを作るという意味ではaddonsでパックを作った方が良いのではないかと私は思っています。(theme.yamlでも出来るかもしれませんが未確認です・・・)
ちなみにcallbackをご存じでない方に説明しますと、callbackとはMTの処理の間に任意の処理を追加するためのポイントだと思ってください。たとえばMT管理画面のヘッダーに処理を追加したい!というときはtemplate_source.header:というcallbackを使います。
config.yamlでのMT操作は、MTを取り扱っている方なら覚えておいて損はないです。ある程度勝手を覚えれば、Perlを知らなくても簡単なプラグインがかけます。次回はconfig.yamlでMT管理画面のロゴマークを書き換えるプラグインでもご紹介します。
ってかconfig.yamlってなに?という方、何となく上の説明ですごそうだということは伝わりませんでしょうか?(汗)mtディレクトリ直下のaddonsに〜.packというのがあると思いますが、そちらを開いてもらうとconfig.yamlというのが入っていると思います。
というわけで、まずはこちらでお勉強(汗)。いくつかconfig.yamlのわかりやすい記事をご紹介します。
そもそもconfig.yamlって何だよ?って人は、まず習うより慣れろ、ということでテンプレートセットを作ってみましょう。SAKKの公式マニュアルに沿ってやってみてください。案外簡単でびっくりされると思います。
テンプレートセットの登録
こちらではyamlだけでプラグインを書く方法を紹介しています。
Movable Type用ShortCodeプラグイン・その9(yamlファイルだけでプラグインを作る)
こちらの記事ではyamlでのデータベース拡張をわかりやすく説明しています。MTタグとしての呼び出し方が載っていませんが、yamlのtags: function:らへんを見ればわかると思います。
フィールド追加系プラグインにおけるベストプラクティス
いままでプラグイン書いていた人にはいいきっかけな記事がこちらです。
Movable Type 4 のプラグイン作成での新機能
参考にしてもらえれば、もっと効率よくMT開発が出来ます。
記事の趣旨とは関係ないですが、themeもaddonsもどちらもディレクトリ配下にthumbnail.pngなどで保存すると、テーマ一覧のサムネイルを指定できます。テーマ一覧に自分のテーマサムネイルが表示されてちょっぴり優越感です(笑
小林
2009年09月12日
プラグインをインストールするだけで、あらかじめ指定したカスタムフィールドを自動的に追加する方法をご紹介します。
MT5では「テーマ」機能でカスタムフィールドを自動的に追加できるのですが、MT4ではできません。
このやり方をすれば、たとえば案件でよく使うカスタムフィールド(重要な記事 MTEntryImportantとか)をプラグインに設定しておいて、自分独自のMTタグを利用するようなことができます。
プラグインのダウンロード
こちらからプラグインのひな型をダウンロードしてください。
AddField.zip
プラグインの修正方法
ひな形のプラグインにはあらかじめ5つのカスタムフィールドがグローバルカスタムフィールドとして追加されるようになっています。
ここでは<$MTEntryImportant$>という重要な記事をチェックボックスで指定するやり方を説明します。
カスタムフィールドのベースネームの設定
14~18行目に
$ADD_FIELD_NAME_番号 = 'カスタムフィールドのベースネーム';
があります。ここでは追加したいカスタムフィールドの数だけ行を書いてください。番号は1から初めて、複数のフィールドを追加する場合は連番としてください(フィールドはいくらでも追加できます。)。ベースネームとは、カスタムフィールドを識別する任意の名前です。これは他のカスタムフィールドと重複して使うことができません。任意のベースネームを指定してください。ここでは
$ADD_FIELD_NAME_1 = 'entry_important';
とします。
追加するフィールドの詳細を設定
追加するフィールドの詳細を設定します。太い赤字の部分を適宜書き換えてください。複数のカスタムフィールドを追加する場合は68~82行目をコピーして 82行目の}を改行して83行目に貼り付けてください。
68~82行目に
## ADD_FIELD_NAME_1 追加用 ## ADD_FIELD_NAME_1 追加用 **************************************************************************
$custom = CustomFields::Field->load({ basename => $ADD_FIELD_NAME_1 } );
unless($custom){
$custom = CustomFields::Field->new;
$custom->blog_id(0);
$custom->name('重要な記事');
$custom->basename($ADD_FIELD_NAME_1);
$custom->obj_type('entry');
$custom->type('checkbox');
$custom->tag('entryimportant');
$custom->required(0);
$custom->description('');
$custom->options('');
$custom->save;
}
という行があります。ここにフィールドの詳細を記載します。
- 69行目
-
$custom = CustomFields::Field->load({ basename => $ADD_FIELD_NAME_1 } );
ここではベースネームの設定時につけた$ADD_FIELD_NAME_hogehogeの番号を記載します。先ほど_1と指定しましたので、$ADD_FIELD_NAME_1と書き換えます。 - 72行目 ブログIDの指定
-
$custom->blog_id(0);
ここでは追加するブログIDを指定します。ブログIDに関係なくフィールドを追加したい場合は0を指定してください。 - 73行目 カスタムフィールド名の指定
-
$custom->name('重要な記事');
カスタムフィールド名を指定します。ここでは重要な記事と記載します。 - 74行目 ベースネームの指定
-
$custom->basename($ADD_FIELD_NAME_1);
ベースネームを指定します。ここでは先ほど指定した$ADD_FIELD_NAME_1と記載します。 - 75行目 オブジェクトタイプの指定
-
$custom->obj_type('entry');
ここではカスタムフィールドを追加したいオブジェクト(ブログ記事・ウェブページ・カテゴリ・フォルダ・ユーザー)を指定します。指定したオブジェクトにカスタムフィールドが追加されます。オブジェクトの指定の仕方はプラグインの48行目に記載しています。 - 76行目 データ型の指定
-
$custom->type('checkbox');
ここではカスタムフィールドで利用したいデータの型(テキストボックス、ドロップダウンなど)を指定します。ここではチェックボックスを指定します。オブジェクトの指定の仕方はプラグインの54行目に記載しています。 - 77行目 MTタグ名の指定
-
$custom->tag('entryimportant');
ここでは追加したMTタグを記載します。MTEntryImportantとしたいため、entryimportantと記載します。頭のMTはシステムが自動的につけてくれます。 - 78行目 必須の指定
-
$custom->required(0);
カスタムフィールドを必須にするかを指定します。必須にする場合は1を指定します。 - 79行目 概要の指定
-
$custom->description('hogehoge');
カスタムフィールドの下に表示する説明文を指定します。不要な場合はdescription('');と空っぽにします。 - 80行目 オプションの指定
-
$custom->options('hoge01,hoge02,hoge03');
ドロップダウンリストなどのあらかじめ表示したい項目を指定します。不要な場合はoptions('');と空っぽにしてください。
プラグインのインストール
プラグインをpluginsディレクトリに設置します。その後管理画面にアクセスするとカスタムフィールドが追加されます。

ここで作成した重要な記事のフィールドは以下のように表示されます。

注意事項
- ここで追加したカスタムフィールドを管理画面から削除しても、プラグインを追加している限りは強制的にフィールドが追加されます。
- 本プラグインをご利用される方は必ず「プラグインご利用の際の注意事項」をお読みください