Movable Type 備忘録

 

 InvalidateCodePress プラグイン

こんばんわ^^

今日はイブですね。
カップルが幸せそうに歩いてるのを横目に、わたしは姪っ子たちが遊びに来た( 何もイブに来なくっても )ので、X'max プレゼントを買いに行ってきました (; ̄∇ ̄A
周りから見たら X'mas プレゼントを買いに来たママに見られてるのかな(つω-`。)まぁ、近からず、遠からずだけど。

姪っ子たちはさっそく買ってきた X'mas プレゼントを開けてリビングで遊んでるので、ちょっとだけ記事書いちゃってます。

さて、以前こちらのテンプレート編集画面の CodePress をオフするでご紹介した、Movable Type 4 の Syntax Highlight 機能の無効化について触れてますが、小粋空間さんがもっとスマートに、プラグイン化されてたのでご紹介 (●>∀<●)/

もぅさすがっ!! としか言いようがないです。

Movable Type 4 のテンプレート編集画面では、Syntax Highlight( コード整形 )機能が追加されてるわけですが、不要な人もいると思います。それに何だかモッタリしててレスポンスが良くないし・・・。
そんな人にオススメ ( ̄∇ ̄)b です。

で、さっそくプラグインの中味拝見させてもらいましたの。
コード量が少なかったので全容を記して Perl が苦手なわたしですが、理解できる範囲でチョビッとだけプラグインの仕組み!? を説明してみます。でも、間違ってたら指摘してくれると嬉しいですの (; ̄∇ ̄A はは

InvalidateCodePress.pl

  1. package MT::Plugin::InvalidateCodePress;
  2. use strict;
  3.  
  4. use base qw( MT::Plugin );
  5.  
  6. require MT::Plugin;
  7. require MT;
  8.  
  9. my $plugin = MT::Plugin::InvalidateCodePress->new({
  10.     'name' => 'InvalidateCodePress',
  11.     'author_name' => 'Yujiro Araki',
  12.     'author_link' => 'http://www.koikikukan.com/',
  13.     'description' => 'Invalidate CodePress.',
  14.     'version' => '0.01',
  15. });
  16. MT->add_plugin($plugin);
  17.  
  18. sub init_registry {
  19.     my $plugin = shift;
  20.     $plugin->registry({
  21.         callbacks => {
  22.             'MT::App::CMS::template_source.edit_template'
  23.                 => \&invalidate_codepress,
  24.         },
  25.    });
  26. }
  27.  
  28. sub invalidate_codepress {
  29.     my ($cb, $app, $template) = @_;
  30.     $$template =~ s/editor="codepress"/editor="codepressoff"/;
  31. }
  32.  
  33. 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)

#1: Posted by yujiro Author Profile Page [RES]

こんばんは。
お世話になります。

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

#2: Posted by bzbell Author Profile Page [RES]

>>1 yujiro さん

こんにちわ^^

InvalidateCodePress プラグインの方使わせてもらってますうぅ~ん
また、プラグインのコードから勉強もさせてもらいました。

まだ分からないとこはありますが、徐々に理解してくつもりです。

> ちょっと早いですが良いお年を!

今年は書籍の執筆や講師などされて多忙な年だったと思います。
来年もますますのご活躍と、小粋空間の記事楽しみにしてますウインク

 Post a Comment

コメント用フィード