Yii Blog Tutorial

http://www.yiiframework.com/doc/blog/
を読んだ

ポートレット

このチュートリアルででてくるポートレットだが、ブログのサイドカラム等に表示する、タグクラウドやログインメニューその他、システムによってはウィジェットと読んだりしているパーツ群のこと。
このチュートリアルでは、CWidgetクラス*1を継承したPortleクラスを基底にしてポートレットを作成している。

シンプル

タグクラウドポートレットはこんな感じ。

<?php
class TagCloud extends Portlet
{
    public $title='Tags';
 
    public function getTagWeights()
    {
        return Tag::model()->findTagWeights();
    }
 
    protected function renderContent()
    {
        $this->render('tagCloud');
    }
}
http://www.yiiframework.com/doc/blog/portlet.tags

ポートレットには、モデルからタグウィジェットを取得する機能と、タグクラウドのビュースクリプトから出力する機能があり、
タイトル、もしくはその他のプロパティを持つ。

yiiのレイアウトスクリプトで指定することで、タグクラウドが出力される。

<?php $this->widget('TagCloud'); ?>

コンポーネント指向らしい処理の仕方。

ウィジェットの責任

ところで、Portletの親のCWidgetクラスってどんなんかっていうと
http://www.yiiframework.com/doc/api/CWidget
コンポーネント指向では、MVCの基本的な責任を個々のコンポーネントがとる。
runで実行が指示されたら、後のことは全部自分でやる。その中にコントローラー的な作業からモデル作成、ビューまですべて含まれる、ひとつの単位がコンポーネントにまとまる。システム構造は、MVCの縦割り構造ではなく、個々のコンポーネントがエージェント的に共同して、時にはメッセージを送りあい、時にはコンポジットして動作を変更する。
たとえば、Widgetを出力する際には、出力開始と終了の間でイベントが発生して、コンテンツにフィルターをかけることができる。フィルターの一種のデコレーターがその実装例になる。
http://www.yiiframework.com/doc/api/CContentDecorator

その気になれば、「ページとは、個々のモデル要素に対するデコレーションである」というアーキテクチャも実現可能。(やらないけどw)

Great Indian Developer Awards 2009!

http://www.developersummit.com/awards.html
yii Frameworkが↑にノミネートされたそうで。1票入れておきました。

*1:コンポーネントのCが頭についている