Home > Logs > August 2008 > This Entry

Movable Type Open Source でもコメント投稿者がプロフィール画像をアップロードできるようにする CommentUserPic プラグイン

Movable Type 4.2 のリリースに伴い、Weeeblog.net も長らくお世話になった 3.35 から最新版の Open Source に移行したわけですが、楽しみにしていたコメント投稿ユーザが自分の画像をアップロードするインターフェイスがなくて「あれ?」と思って調べてみると、どうやら Open Source では使えないようでした。Movable Type 4 のコメント投稿者というユーザは仕事でしか扱ったことがなくて、しかも本来の目的であるコメントを投稿するためのユーザとしては使ったことがなかったので知りませんでした。ほんとかよーそんくらいいいじゃんよーと思うのだけれど、まあぼやいても仕方ないのでプラグインで機能追加することにしました。

概要

コメント投稿者が、自分のプロフィール画像をアップロードできるようにします。アップロード処理は Movable Type 本来の処理に渡すので、リサイズやサムネイルの作成など、画像に関する処理そのものは管理画面からユーザのプロフィール画像をアップロードする時と同じです。アップロードした画像は <$mt:CommenterUserpicURL$> などの、通常のコメント投稿者の画像を取り出すタグを使って表示することができます。

コメント投稿者のプロフィール画像

動作環境

現時点での Open Source の最新版である Movable Type version 4.21-ja および Movable Type Commercial version 4.21-ja :: Professional Pack 1.2 で動作確認しています。コミュニティパックでは確認していません。そもそも使う意味がないので

ダウンロード

CommentUserPic プラグイン(約 3.3 kb)

インストール

解凍してできた CommentUserPic/plugins/CommentUserPic フォルダを [MT を設置したディレクトリ]/plugins 内にそのままアップロードしてください。正しくアップロードできていれば、システム・メニューのプラグイン設定に CommentUserPic プラグインが表示されます。設定項目などはないのでそのまま使えますが、プロフィール画像をアップロードする際に書き込みが行われる 一時ディレクトリ( mt-config.cgi の環境変数 TempDir ) へのパーミッション設定を行っておく必要があるかもしれません。

使用にあたってとか修正依頼とかダメ出しとか人生相談とか

基本的にご利用は無償かつ自己責任ですが、継続的な開発、更新のため、よろしければドネーションをご検討ください。以下のボタンから、PayPal を通じて行うことができます。

また、フィードバックいただけるとうれしいです。ぜひ weeeblog@gmail.com までお送りください。コメントでもかまいません。

人生相談はどうせ誰も送ってこないので受付をやめました。

5 Comments on this Entry

bzbell bzbell August 23, 2008 9:29 PM

はじめまして^^

Movable Type 備忘録の bzbell といいます。
トラックバックありがとございます。

CommentUserPic プラグイン使わせてもらいました!!
すっごいカンタンにできちゃうもんなんですね (; ̄∇ ̄A

質問したいことがあります。

  1. CommentUserPic プラグインは MT Pro 4.21( CORESERVER )ではエラーしてしまい、MT Pro 4.2( Sakura Internal )では表示できました (●´∀`●)
    MT Pro 4.21 ではプロフィール編集画面さえ表示されず、「An error occurred: ログインできませんでした。」と表示されます。サーバ依存は考えにくいと思いますので、MT Pro 4.21 でエラーする要因って何が挙げられますでしょうか。

  2. CommentUserPic プラグインのコード拝見させていただきました。
    コールバックを使われてるのですが、何でみなさん普通にコールバック名をご存知なんですか!?

    たとえば、'MT::App::Comments::template_source.profile' というのはどこかにコールバック名称が記述されてるものなのでしょうか。わたし、ここら辺がよく分からなくっていっつも挫折してます(つω-`。)


お手数ですが教えていただけると嬉しいです。
どうぞよろしくお願いします。

bzbell bzbell August 23, 2008 10:44 PM

度々すいません。

MT4.21 でプロフィール編集画面が表示できない件ですが、ブラウザのキャッシュをクリアしたら表示できるようになりました。

状況としては最初に MT にログインしてて、その後コメント時にサインインするとダメだったような気がしたのですが 100% ではなかたです。

結局のところなぜダメだったのかよく分かりません (; ̄∇ ̄A
今となっては再現さえしなくなっちゃいました。

okayama okayama August 23, 2008 11:41 PM

> bzbellさん

うーん。そういうのたまにあります。特にログインが噛むときや、どっちかというと頻繁に使用している MT なんかの時に…おそらく今回のケースでは、キャッシュというよりは cookie なのではないかと思います。システムメニューのログに何かエラーみたいなやつが残っていませんでしょうか。

とりあえず、個人ライセンスとして使用できる、コミュニティパック無しの Pro パッケージ ver 4.21 で試してみましたが、問題なく動作するようです。一通りソースを確認してみましたが、引っかかりそうなところは見当たりませんでした。そもそもプロフィール画像の機能が備わっていないバージョンでは使えないと思いますが、この機能がついているものであれば使うことができると思います。


コールバックについては、いくつかタイプがありますが、おおむね [MT_DIR]/lib の中のファイルの内容を run_callbacks で grep することで、コールバックが実行されるタイミングとその名称、処理に渡される引数がわかると思います。たとえば、[MT_DIR]/lib/MT/CMS/Entry.pm に以下のような記述がありますが、

$app->run_callbacks( 'cms_post_save.' . $type, $app, $entry, $orig_obj );

cms_post_save は「保存した後」なので、この場合はエントリーを保存した後ということになります。このタイミングでコールバック処理を入れたい場合、プラグインでは

cms_post_save.entry => \&_hoge,

中略

sub _hoge {
処理内容
}

のように記述することになるかと思います。ちなみに、今回使った MT::App::Comments::template_source.profile はちょっとだけ特殊です。

わかりやすいとは言いがたいですが、公開されているオブジェクトリファレンスは、やはり参考になります。

http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_app_cms.html

bzbell bzbell August 24, 2008 2:44 AM

ご親切に教えていただいてありがとございます (●´∀`●)

> システムメニューのログに何かエラーみたいなやつが残っていませんでしょうか。

それらしいログは残ってないようです。クッキーのセッションの関係なんですかね。
今はぜんぜん問題なくログイン!? できてるので、また再現したらクッキーをクリアするようにします。
お手数おかけしました。

コールバックについてですが、実はわたしも同じようなプラグインを作ってたとこだったんです。結局できなかったけど。
先日「Movable Type 4.2 Perfect Guide」という書籍を頂きまして、コールバックに関する記載があったので run_callbacks を調べる…ということを最近知りました。

でも、いろんなプラグインのコードを拝見させてもらってる中で不可解な記述が割りと多くて、先ほどわたしが例で示したコールバックのように、どうしてこのコールバック名称が突如!? でてくるのかがまったく分からずにいました。
そうなんですか、特殊なものなんですか。

> わかりやすいとは言いがたいですが、公開されているオブジェクトリファレンスは、やはり参考になります。

以前このページも読んだのですが・・・わたしには理解できませんでした。
まだまだ道のりは長いです (; ̄∇ ̄A

今後も痒いとこに手が届くようなプラグイン期待してます。
ありがとございます。

okayama okayama August 24, 2008 4:11 AM

なるほどなるほど

確かに、MT::App::Comments::template_source.profile は run_callbacks で grep しても、そのままの形では出てきません。でも、

$mt->run_callbacks("template_source", [その他引数]);

みたいなやつは出てくると思います。長くなるのでかなり省略しますが、とりあえず MT の管理画面を transform することを考えた場合、プラグイン内では MT::App::CMS::template_source.[テンプレートファイル名(拡張子除く)] と指定するものと覚えておけばよいと思います。テンプレートファイルは [MT_DIR]/tmpl に入っていますので、そのファイル名を指定することになります。そのテンプレートファイルが呼ばれたときに処理が入る、という感じです。

今回は管理画面(mt.cgi)でなく mt-comments.cgi が動作するので MT::App::Comments::template_source としました。この点が若干特殊です。

Post Comment




Copyright © okayama, Powered by Movable Type Open Source