Mojaviについての質問をまたもらったので回答。
内容は、 「Mojavi+SmartyでHTMLファイルを吐きたいが、Viewの中でRendererをいじってもイマイチうまくいかない」 というものです。

「ActionでSmartyRendererを使う」または「ActionChainを使う」 という方法はどうだろうか。

普通に作っておいて、ファイルに吐く必要が出たら 簡単に移行できるので後者がいいような気がする。

StaticHtml-0.1.tar.gz

[ ActionでSmartyRendererを使う ]

<?php
include_once(dirname(BASE_DIR)."/mojavi/lib/smarty/Smarty.class.php");
include_once(OPT_DIR."renderers/SmartyRenderer.class.php");

class CreateHtmlAction extends Action {
    function execute(&$controller, &$request, &$user) {
        $renderer =& new SmartyRenderer($controller, $request, $user);
        $engine =& $renderer->getEngine();
        $engine->compile_dir = BASE_DIR."/templates_c";
        $engine->compile_id = $controller->currentModule."_".$controller->currentAction;
        $renderer->setTemplate("static.html");
        $renderer->setAttribute("title", "Static HTML by SmartyRenderer");
        $renderer->setMode(RENDER_VAR);
        $fp = fopen("staticHtmlBySmartyRenderer.html", "w");
        fwrite($fp, $renderer->fetchResult($controller, $request, $user));
        fclose($fp);
        header("Location: ".dirname(SCRIPT_PATH)."/staticHtmlBySmartyRenderer.html");
        return VIEW_NONE;
    }
}
?>

[ ActionChainを使う ]

<?php
class CreateHtmlAction extends Action {
    function execute(&$controller, &$request, &$user) {
        $actionChain =& new ActionChain();
        $actionChain->register("getHtml", "CreateHtmlByActionChain", "GetHtml");
        $actionChain->execute($controller, $request, $user);
        $fp = fopen("staticHtmlByActionChain.html", "w");
        fwrite($fp, $actionChain->fetchResult("getHtml"));
        fclose($fp);
        header("Location: ".dirname(SCRIPT_PATH)."/staticHtmlByActionChain.html");
        return VIEW_NONE;
    }
}
?>

ref: 本当に理解すること

Java魂―プログラミングを極める匠の技

毎週日曜日、ラーメン食いながらちょっとづつ読んでたJava魂やっと読了。

不変オブジェクトやコレクションの話など、地味だけど現場では大変重要なお話がためになります。ロジックエラーをコンパイラが検出できるエラーに変えてこうというテクニックが多いんですが、PHPでは関係無いわな。
最後の方の参照とかは難しくて読むのが辛かった!

PECL :: Package :: dbx

The dbx module is a database abstraction layer (db ‘X’, where ‘X’ is a supported database). The dbx functions allow you to access all supported databases using a single calling convention. The dbx-functions themselves do not interface directly to the databases, but interface to the modules that are used to support these databases.

DB抽象化関数dbx。
dbx_connect(), dbx_queryとかで行けるようになるようです。非PDO派はこちら!

PECL :: Package :: xmlwriter

This extension wraps the libxml xmlWriter API. Represents a writer that provides a non-cached, forward-only means of generating streams or files containing XML data.

libxml xmlWriteのラッパ。何気にバージョンがでかい。
XML書く方の問題は本気でやる場合はこれで安定か!?

ref: XML_FastCreate
ref: Proposal for RSSBuilder

Reflection_Annotationを使ってみる。 – Paradigm Shift Design Projects

Reflection_AnnotationのAnnotation/Parser.php、微妙なので書き換えました。デモちゃんと動くかは知らない。

Sebastian()ウォッチャー発見!
Reflection_Annotation、疑惑のParse部のパッチを作っておられます。gj!
そういえば別アプローチとしてPhingはAnnotation拾えるのかな?

Sebastian
sebastian.jpg

ref: Reflection_Annotation期待

[を] Google AdSense、日本円での支払い開始!

これまでドル建て小切手のみだった Google AdSense の支払いですが、 ついに日本円に換算して直接銀行口座に入金してくれるようになったよう です。

うおおおぉ

PEAR :: Manual :: 提供するに値 しない 場合

PEAR の ””A”” は、”“Application”” を表しているのですが、 アプリケーションがサポートされていないことについては単純な理由があります。 現在のところ、完全な WEB アプリケーションのパッケージを扱えるような インフラ(PEAR インストーラなど)が開発されるに至っていないからです。

状況が変わりましたら、サイトを更新してお知らせする予定です。

PEAR 1.4とかPHP_Archiveとかがそのインフラにあたるのかな!?

PHPカンファレンス2005のEthnaの藤本さんの発表であった、

「ウィザードなど一定のパターンのあるパーツをプラグインとしてフレームワークに組み込む」

っていう話を聞いて、なるほどそういうのがたくさんあったら便利かもと思いました。フレームワークでクラスライブラリより粒度の大きい再利用部品ができたので更に粒度を大きくしようとするとコンテンツを再利用できるようにしようとして自然とレイヤーが上がるのかもしれません。

最近PHPのフレームワークを調べていると、以前見つけたMidgardとか最近知ったBlueshoesとかCMSフレームワークというのを見かけるようになりました。
フレームワークより部品の粒度を上げてくと自然とCMSに向かっちゃうのかもと思いました。

ref: TownPortal
ref: PHPカンファレンス2005

PHPカンファレンス2005行って来ました。

寝坊したけど間に合って良かったです。
テンション無理やり上げて、発表も何とか終わりました。

資料: framework description.pdf

フレームワークのお話はそれぞれ新しいトピックが聞けて、ホントに1ヶ月とか1週間とかいう単位で状況がどんどん動いていっているなと思いました。

トピック:

  • ICCの確認のせいで複雑に
  • Agavi
  • パターンをフレームワークのプラグインに
  • フレームワークでCSRF対策
  • Seasar.PHP

2~3時間ぐらいしかいられなかったんですが、Php Application Design Handbookを注文しちゃったZefardさんにお会いできたり、会社の別支社の方と話せたりして楽しかったです。

その後、西武新宿の激旨ホルモン屋「幸永」でプチ打ち上げ。

ref: PHPカンファレンス2005

一つのディレクトリに大量のファイルが保存されるときに、

/2005/07/28/foo.html

とか

/2/0/0/5/0/7/2/8/foo.html

とかやりますけど、この手法って何か名前あるんですかね。最近よく出てくるんですが、上記を説明するのが結構大変。
LiveSearchみたいに名前があると一言で言えて楽なのに。