MT meets PHP.
公開日 : 2010-12-31 15:59:41
年末だというのに...
大晦日に何か面白いもの作って公開するってのを数年前までやっていたんだけど今年はちょっと無理ですね。年明け早々にはお披露目出来るかと思います(何が!?)。
標題は納会の時の僕の社内プレゼンのテーマですが、今PHPによるMTの拡張っていうテーマでコードをあれこれ書いてます。
さて、↓反応遅れましたが。
「育てる時代にふさわしいCMSベスト5」で一位に選んでいただきました(ありがとうございます...しかしあの電話が取材だったのか!?)。
といってもその1位がどうの、とか書かれている内容とは違うところに少し反応してみます。それは取り上げられているCMSの中で、
MT(Power CMS for MT)以外全て(多分)PHPで書かれている!んですよ。
とはいえMTもPower CMS for MTもPHPにも対応していて、ただ管理画面はPerl、出力形式をPerlによるスタティック生成とPHPによるダイナミックパブリッシングの両方をサポートしているということになります。
MTのダイナミックパブリッシングがPerlでなくPHPであることからもわかるように、やっぱりPerl CGIとかと比較して手軽に動的生成行うのならPHP選択ってことになると思います。FastCGIなんか入れるとキビキビ動くようにはなりますけど、とはいってもサーバーのメモリとか考えるとPHPの手軽さってやっぱりあるんだと思います。
ということは関係あるのかどうかわかんないんですが(関係ないです!)、この2ヶ月ほどMTのPHPのライブラリを見直してみつつ、MTのPHPフレームワークを拡張する新しいクラスを作っていてついでにちょっとした管理画面とかも作ってみました。
ちゃんと動くし、まぁ軽量っちゃー軽量ですね。アーカイブをダイナミックパブリッシングにしておけば本当にPHPのCMSです(本当って何だ?)。まぁ大規模サイトに導入するときはスタティック最強だと僕は思っていて、MTが選ばれるのもあの何ていうか(好き嫌いの多い)「再構築」があるからだと思うわけですが、PHPで書きたくなる気持ちも分かります。
で、PHPで拡張する仕組みを作って表示側をリアルタイムに変えられるようになると何だか書きたくなるもののパターンって変わるんですね。つまり何かWordpressっぽいというか、そういうのを書きたくなる。例えば携帯キャリアやスマートフィン対応とか検索ワードのハイライトとかLPOとか日本語URLとか、何か言語と言語をとりまく環境が作りたいものを左右するって不思議な感じです。
ところで、MTのダイナミックパブリッシングに「多くのプラグインが対応していないからMTのダイナミックパブリッシングは使えない」みたいな可哀想な言われ方をしていて(Power CMS for MTはすべてダイナミックパブリッシング対応ですが...400以上のPHPプラグインが!)、何で両対応しないかって、書き方のお作法が違うんですよね。MT5になってadodbをベースにしたclass.baseobject.phpってのが出来てFind()やLoad()やSave()も実装されてはいるものの、書き方のお作法が違うから両方対応するのが面倒になるわけです。なので、
$categories = $app->load( 'Category', array( 'label' => $category ) );
とか
$terms = array( 'blog_id' => $blog_id, 'id' => $id );
$args = array( 'limit' => 1 );
$entry = $app->load( 'Entry', $terms, $args );
とか、
$entry = $app->get_by_key( 'Entry', array( 'blog_id' => $blog_id, 'foo' => $foo ) );
とか
$app->can_edit_entry($entry);
とか
$foo = app->param('foo');
とか
$user = app->user();
とか出来るようにしてみたら書きやすいんじゃないかと思ってそうしてみたら...
本当に書きやすいです。はやくやっとけばよかった。
PHPであれこれやってみて感じること
やっぱり軽快さというかそのあたりは使いたくなるのはわかるけど、変に直接HTMLの中に書ける手軽さは「ついつい」なコードを書いてしまいがち。なのでやっぱりMTならMTの作法でテンプレートエンジンによってアプリケーションのロジックとコンテンツをちゃんと分けるようにすべきだなぁと。
あと、関数名重複や変数のスコープの意識とか考えさせられますね。かといって function powercms_util_func_hoge() とか長ったらしい書き方を強要させられるのも何だかと思うので、ちゃんとクラス作成してとか名前空間指定してとか(って名前空間指定できるようになったのってPHP 5.3.0からなんだ!)って、PHP製のCMS作ってる人はど苦労してないんだろうかとか思いつつ、ちょっと本格的にPHPでMT製のサイトを拡張できる仕組みを作ってます。
管理画面のサンプルも近々公開できると思います。来年は案件用の管理画面とかについてもPerl/PHPの両方で提案できるようにしたいと思います。
と、いうことで(どういうことだ?)、皆様良いお年を。