MTプラグイン:ModifyTitleの紹介

[download]

コールバック

前回記事に書いた通り、ブログエントリータイトルに自動で投稿日を付加するMTプラグインを作りました。上記GitHubで公開しました。Readmeも記載しましたので興味のある方はのぞいてみてください。

フックポイントcms_pre_saveを使用して、エントリーの保存前に、タイトルに新規投稿日を自動で付加するコールバックです。

下記はconfig.yamlの一部です。コールバックは「callbacks:」で定義します。ここではフックポイント「cms_pre_save」の「entry」オブジェクトを指定しています。実際には、ModifyTitle.pmの中で_handlerメソッドを記述しました。

callbacks:
  MT::App::CMS::cms_pre_save.entry:
    code: $ModifyTitle::ModifyTitle::_handler
    priority: 5

handlerは($cb,$app,$obj,$origobj)の4つの引数を受け取れます。これらの意味は「Movable Type 5 プロフェッショナルガイド」によると

$cb -- コールバックオブジェクト
$app -- アプリケーションオブジェクト
$obj -- 保存されたオブジェクト
$orig_obj -- 保存前のオブジェクト

だそうです。$appはCGI.pmの全機能を継承しているはずのCGIアプリで、第3,4引数はここではentryオブジェクトということになります。

上記の本のリンクを文末に張っておきます。MTをいじりたい人は必携の本です。

主な仕様

新規投稿時は現在の日付、更新時は新規投稿日の日付を付加します。これはentryオブジェクトのcreated_onメソッドで読み出した日付が定義されていれば「更新」、そうでなければ「新規投稿」という判定にしました。

また日付が既に付加されているかどうかも一応正規表現を使用して判定しています。付加されていれば何もしません。

設定項目は、有効化と対象となるカテゴリー(1種類)の2つだけです。有効化にチェックを入れていない時は、全ての処理がスキップされます。

今回気づいたMTの仕様

最近色々細かい仕様に気づいているのですが、ここで気づいたものは下記

  • $obj->category は新規投稿時には定義されていない
    $orig_objのcategoryメソッドでも定義されていませんでした。しょうがないので今回は$appのparamメソッドに入ってきたカテゴリーIDを使用して対象判定を起こっています。
  • created_onメソッドで返る値はTIMESTAMP型では無く、YYYYMMDDhhmmss 
    これオブジェクトリファレンス良く見れば書いてあるのですが、作成したER図を見ながら書いていたので、最初はTIMESTAMP型書式だと思い込んでいました。