Movable Type 備忘録
InvalidateCodePress プラグイン
- Next Page: ブラウザのスクロールに連動する RSS アイコン表示
- Prev Page: エントリとコメント内に絵文字を入れられるようにする
こんばんわ^^
今日はイブですね。
カップルが幸せそうに歩いてるのを横目に、わたしは姪っ子たちが遊びに来た( 何もイブに来なくっても )ので、X'max プレゼントを買いに行ってきました (; ̄∇ ̄A
周りから見たら X'mas プレゼントを買いに来たママに見られてるのかな(つω-`。)まぁ、近からず、遠からずだけど。
姪っ子たちはさっそく買ってきた X'mas プレゼントを開けてリビングで遊んでるので、ちょっとだけ記事書いちゃってます。
さて、以前こちらのテンプレート編集画面の CodePress をオフするでご紹介した、Movable Type 4 の Syntax Highlight 機能の無効化について触れてますが、小粋空間さんがもっとスマートに、プラグイン化されてたのでご紹介 (●>∀<●)/
もぅさすがっ!! としか言いようがないです。
Movable Type 4
のテンプレート編集画面では、Syntax Highlight( コード整形 )機能が追加されてるわけですが、不要な人もいると思います。それに何だかモッタリしててレスポンスが良くないし・・・。
そんな人にオススメ ( ̄∇ ̄)b です。
で、さっそくプラグインの中味拝見させてもらいましたの。
コード量が少なかったので全容を記して Perl が苦手なわたしですが、理解できる範囲でチョビッとだけプラグインの仕組み!? を説明してみます。でも、間違ってたら指摘してくれると嬉しいですの (; ̄∇ ̄A はは
InvalidateCodePress.pl
package MT::Plugin::InvalidateCodePress;use strict;use base qw( MT::Plugin );require MT::Plugin;require MT;my $plugin = MT::Plugin::InvalidateCodePress->new({'name' => 'InvalidateCodePress','author_name' => 'Yujiro Araki','author_link' => 'http://www.koikikukan.com/','description' => 'Invalidate CodePress.','version' => '0.01',});MT->add_plugin($plugin);sub init_registry {my $plugin = shift;$plugin->registry({callbacks => {'MT::App::CMS::template_source.edit_template'=> \&invalidate_codepress,},});}sub invalidate_codepress {my ($cb, $app, $template) = @_;$$template =~ s/editor="codepress"/editor="codepressoff"/;}1;
- 1 行目はパッケージ宣言ですね。
どのプラグインでも記述されてるものですが、基本的に Movable Type のプラグインは Perl で書かれてるものがほとんどです。
スクリプト内で定義した変数( グローバル変数/ローカル変数 )の有効範囲( 名前空間 )をパッケージと呼ぶようです。たとえば、他のパッケージ内で同一の変数名が使用されてても、有効範囲がパッケージ内と明示されますので重複しないという効果があります。
ですので、InvalidateCodePress のパッケージ名称は 「MT::Plugin::InvalidateCodePress」になります。何で「MT::Plugin::」を前に付けるのかは・・・分かりません (; ̄∇ ̄A はは - 2 行目は strict プラグマ宣言です。
この記述は Perl でプラグラミングする場合は必須のようです。
コードの先頭に記述しておくことで、変数の定義ミスなどをチェックしてくれます。 - 4 行目はクラスの継承を示しています。
InvalidateCodePress は MT::Plugin クラス( mt/lib/MT/Plugin.pm )の継承を示し、MT::Plugin クラスは InvalidateCodePress の親クラスになります。
また、MT::Plugin クラスは MT::Component クラスを継承しています。継承とは、MT::Plugin クラスの機能( MT::Component クラスの機能含め )を InvalidateCodePress でも使えるようにする Perl の機能です。正確にはオブジェクト指向という概念なんだそうです。
たとえば、人には「名前」や「性別」、「性格」、「ルックス」などのように、人それぞれ個性がありますよね。
これをオブジェクト指向にあてはめると、「人」というベースとなるクラスの変数( 属性 )として、- 「名前」
- 「性別」
- 「性格」
- 「ルックス」
というものを定義することで、「人」クラスを継承する「わたし」というクラスや「友人 M」、「友人 L」というクラスを作れば、人という同じ属性を持った「個人」が作れるわけです ( ̄∇ ̄)b
説明が下手っぴで分かりにくいかもですが、プラグインは Movable Type の機能を継承( Movable Type の機能を利用 )していろんなことができるようになります。 - 6、7 行目ではファイルを読込んでいます。
InvalidateCodePress は mt/lib/MT.pm と mt/lib/MT/Plugin.pm を読込んでいます。
基本的にプラグインで必要な、mt/lib/MT/ ディレクトリ配下のファイル( 機能 )を読込むわけですが、それぞれどんな機能なのかが分かりませんね。わたしも分かりません (; ̄∇ ̄A
- 9 ~ 15 行目は InvalidateCodePress オブジェクトを作成してます。
先ほど言ったように、InvalidateCodePress は MT::Plugin クラスを継承しますので、new 演算子で生成したオブジェクトの name、author_name などの変数を初期化してます。
name、author_name 変数は元は MT:Plugin クラスの変数になります。ここで設定した各変数の内容が、プラグイン一覧で表示されます。
- 16 行目でプラグインの登録を行ってます。
先ほどの require MT を明示したことで、MT クラスの add_plugin メソッドを使って、新しくプラグインの登録ができるようになります。
お約束の定義ですので忘れずに ( ̄∇ ̄)b - 18 ~ 26 行目は InvalidateCodePress オブジェクトの初期化を行うメソッドです。
init_registry というメソッド名は Movable Type 内でお約束の名前のようです。 InvalidateCodePress プラグインが初期化されるとき( 9 ~ 15 行めが実行されたとき )に、MT::Plugin クラスの親クラスにあたる MT::Component クラスから init_registry メソッドが実行されます。
そのとき、パラメータとして MT::Component クラスオブジェクトが渡されるのかな !? すいません、自信ないです (; ̄∇ ̄A - 20 ~ 25 行目で、プラグインの機能を追加してあげます。
すいません、ここでやってることがよく分かりません (´Д`;)
invalidate_codepress という InvalidateCodePress プラグイン内のメソッドをコールバック関数として登録してるようなのですが、何をキッカケにコールバックされるよう支持してるのかが読み取れません。
ごめんなさい。 - 28 ~ 31 行目は InvalidateCodePress プラグインのメイン処理です。
20 ~ 25 行目で登録したことで、何らかの要因でコールバックされると、ここのメソッドが処理されるようです。
詳しいことは分かりませんが、想像するに、テンプレート編集画面の文字列( ページ )から codepress というキーワードを codepressoff と変換することで、テンプレート編集画面の CodePress をオフするでご紹介したことを自動的にやてるようです。
すっごいなぁ( ̄□ ̄;) - 33 行目は require された場合のお約束の記述です。
require から実行された Perl スクリプトでは、ファイルの最後に 1 を記述する必要があります。
ですので、InvalidateCodePress がパッケージとして他から requiere された場合には 1 が必要になるため、記述しておきます。
以上です。
ぜんぜん勉強不足でしたね (; ̄∇ ̄A
Trackback Pings(0)
No trackbacks found.
Comments(2)
-
#2: Posted by
bzbell
[RES]
>>1 yujiro さん
こんにちわ^^
InvalidateCodePress プラグインの方使わせてもらってます

また、プラグインのコードから勉強もさせてもらいました。まだ分からないとこはありますが、徐々に理解してくつもりです。
> ちょっと早いですが良いお年を!
今年は書籍の執筆や講師などされて多忙な年だったと思います。
来年もますますのご活躍と、小粋空間の記事楽しみにしてます


こんばんは。
お世話になります。
情報&プラグイン解説ありがとうございました。
ちょっと早いですが良いお年を!