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票入れておきました。