印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
DownloadMovableTypePlugin リダイレクタ追加プラグイン 0.12.1

リダイレクタ追加プラグインの新バージョンをリリースする。このバージョンでは,新たにダイナミックパブリッシングに対応した。

■ ■ ■

今回リリースする リダイレクタ追加プラグイン のトピックは,ダイナミックパブリッシングへの対応である。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 標準コーディング規約 に準じることとした。例えば,次のようなものである。

  • 字下げは4個のスペースとし,タブは使わない
  • if 文では,中の文が1つであっても必ず波括弧 { } を使う

Zend Framework では,PHP ファイルにインラインドキュメントを phpDocumentor の形式で書くことになっているが,このプラグインでは省略している。

ダイナミックパブリッシング用のプラグインのコードを書く場合,参考になるのは,

実際に作ってみるのがいいのだが,何を作ればいいのか分からない場合は,例題をやるのがよい (Movable Type4ダイナミックパブリッシング対応プラグインの作成方法をまとめてみた。 (Junnama Online (Mirror)))。そして,何より実例をあたるのが一番なので,デフォルトでインストールされる MultiBlog などのコードを眺めてみるとよい。

PHP プラグイン初心者の勧め方は,あらかじめテンプレートにタグを書いておいて,コードを少し書いたら生成されたページをリロードし,また少し書いてリロード,ということになる。PHP のコードに問題があると,画面が真っ白になる。エラーの詳細はログに出力されるので,Linux なら

$ tail -f /var/log/apache2/error_log

などとしてログを監視しつつ,デバッグするとよい。

PHP のコードを書きたくない場合は,Perl のコードを使うという方法もあるようだ (小粋空間: ダイナミック・パブリッシングで perl のプラグインを利用する)。

Posted by n at 2008-05-02 01:56 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?