リダイレクタ追加プラグインの新バージョンをリリースする。このバージョンでは,新たにダイナミックパブリッシングに対応した。
今回リリースする リダイレクタ追加プラグイン のトピックは,ダイナミックパブリッシングへの対応である。PHP について,少し調べて書いてみた。
Perl 版もついでにバージョンアップしている。「ドキュメントリンク」でプラグインのページにリンクするようにしただけなので (nlog(n): テンプレートタグの解説ページへのリンク),追加した行はたったの1行のみ。
ダイナミックパブリッシング対応ということで,PHP のコードを書いた。ファイルは3つで,ブロックタグ用の block.mtaddredirector.php,グローバルモディファイア用の modifier.urlredirect.php,それに,これら2つの関数から共通に呼び出される関数が書かれている addredirector.php である。
MTOS の PHP プラグインは,Smarty を使っていて,HTML とは分離されているのがよい。PHP の割には美しく書くことができる。Perl でやっていることを,PHP に翻訳していくだけである。PHP には,Perl 互換の正規表現関数 preg_replace() 等が用意されている (PHP: preg_replace - Manual)。「preg」は「Perl Regular Expression」からの名づけだろう。
「ただ翻訳していけばいいだけ」とは言っても,Perl と PHP は違う言語であるので,そう単純ではない部分もある。例えば,preg_replace で <a ...> を置換するのに関数を呼び出すと,呼び出した関数内では,二重引用符「"」が全てエスケープされてしまうのである。置換するタグが <a href="http://foo.com/" title="Foo">だとすると,関数に渡されると <a href=\"http://foo.com/\" title=\"Foo\"> となってしまうのだ。そこで,最初に「$a = preg_replace('/\\\\\"/', '"', $a);」として,「\"」を「"」に置換してから処理をしている。「'/\\\\\"/'」が「\"」にマッチするというのもナゾである。と言うのも,私はまだ PHP をよく理解していないからのだ。
PHP のコーディングに関しては,Zend Framework PHP 標準コーディング規約 に準じることとした。例えば,次のようなものである。
Zend Framework では,PHP ファイルにインラインドキュメントを phpDocumentor の形式で書くことになっているが,このプラグインでは省略している。
ダイナミックパブリッシング用のプラグインのコードを書く場合,参考になるのは,
実際に作ってみるのがいいのだが,何を作ればいいのか分からない場合は,例題をやるのがよい (Movable Type4ダイナミックパブリッシング対応プラグインの作成方法をまとめてみた。 (Junnama Online (Mirror)))。そして,何より実例をあたるのが一番なので,デフォルトでインストールされる MultiBlog などのコードを眺めてみるとよい。
PHP プラグイン初心者の勧め方は,あらかじめテンプレートにタグを書いておいて,コードを少し書いたら生成されたページをリロードし,また少し書いてリロード,ということになる。PHP のコードに問題があると,画面が真っ白になる。エラーの詳細はログに出力されるので,Linux なら
などとしてログを監視しつつ,デバッグするとよい。
PHP のコードを書きたくない場合は,Perl のコードを使うという方法もあるようだ (小粋空間: ダイナミック・パブリッシングで perl のプラグインを利用する)。
Posted by n at 2008-05-02 01:56 | Edit | Comments (0) | Trackback(0)
Master Archive Index
Total Entry Count: 1957