「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
BIGPAPI/Transformer両対応プラグインの作成
先日、Transformerプラグインの作成方法を紹介しましたが、当面の状況を考慮すると、BIGPAPIとTransformerの両対応にしておくとより良いと思われます。
Movable Type 3.3でのBIGPAPIとTransformerとの関係
Movable Type 3.3にも、BIGPAPIおよびBIGPAPI対応プラグインをインストールすることができ、動作もします。
ただし、BIGPAPIとTransformerは、いずれもテンプレートを読み込む処理を一部書き換えるものですので、共存することができません。
つまり、BIGPAPIをインストールしてオンにすると、Transformerにしか対応していないプラグインが動作しなくなります。
BIGPAPI/Transformerを両対応にしておく
今後はTransformer対応プラグインが増えていくと思いますが、当面はBIGPAPI対応プラグインの方が多いです。
そのため、MT3.3でもBIGPAPIを使いたいという方が多いと思われます。
そこで、管理画面を書き換えるプラグインを作る際には、当面はTransformerとBIGPAPIの両方に対応しておく方が良いでしょう。
テンプレート書き換えのサブルーチンをadd_callbackする際に、BIGPAPIとTransformerの両方を登録しておけば、BIGPAPIがオンならBIGPAPIで、そうでなければTransformerで動作するようになりました。
事例
先日ご紹介したプラグインの例を、BIGPAPIとTransformerの両方に対応させると、以下のリストのようになります。
package MT::Plugin::TransformerTest; use strict; use base qw( MT::Plugin ); require MT::Plugin; require MT; require MT::Log; # register plugin my $plugin = MT::Plugin::TransformerTest->new({ 'name' => 'TransformerTest', 'author_name' => 'H.Fujimoto', 'author_link' => 'http://www.h-fj.com/blog/', 'description' => 'Transformer plugin test.', 'version' => '1.01', }); MT->add_plugin($plugin); # register callback MT->add_callback('bigpapi::template::menu', 9, $plugin, \&edit_menu_template_bigpapi); MT->add_callback('MT::App::CMS::AppTemplateSource.menu', 9, $plugin, \&edit_menu_template_transformer); sub edit_menu_template_bigpapi { my $log = MT::Log->new; $log->message("TransformerTest : register by BIGPAPI"); $log->save; &edit_menu_template(@_); } sub edit_menu_template_transformer { my $log = MT::Log->new; $log->message("TransformerTest : register by Transformer"); $log->save; &edit_menu_template(@_); } sub edit_menu_template { my ($cb, $app, $template) = @_; my $blog_id = $app->{query}->param('blog_id'); my $entry_count = MT::Entry->count({ blog_id => $blog_id }); my $old = <<HERE; <p class="page-desc"><MT_TRANS phrase="Here is an overview of [_1]." params="<TMPL_VAR NAME=BLOG_NAME ESCAPE=HTML>"></p> HERE $old = quotemeta($old); my $new = <<HERE; <p class="page-desc"><MT_TRANS phrase="Here is an overview of [_1]." params="<TMPL_VAR NAME=BLOG_NAME ESCAPE=HTML>"></p> <p class="page-desc">Number of entries : $entry_count</p> HERE $$template =~ s/$old/$new/; } 1;
このプラグインをMTの「plugins」ディレクトリにアップロードしてインストールし、MTにログインすると、BIGPAPIのオン/オフに関わらず、プラグインが動作します。
また、BIGPAPIがオンならログに「TransformerTest : register by BIGPAPI」と記録されます。
一方、BIGPAPIがオフ(またはインストールされていない)なら、ログに「TransformerTest : register by Transformer」と記録されます。