要求分析に基けば、3種のポートレットが必要だと判明しました。 それらは「ユーザメニュー」ポートレット、「タグクラウド」ポートレット、「最近のコメント」ポートレットです。 これらのポートレットを、Yiiが提供するCPortletウイジェットを拡張して開発します。
この章では、最初の具体的なポートレットを開発します。それはユーザメニューポートレットで、認証されたユーザにのみ 提供され、メニュー項目のリストが表示されるものです。メニューは以下の4項目です。
UserMenuクラスの作成 ¶ユーザメニューポートレットの論理部分を表現するUserMenuクラスを作成します。
このクラスはファイル/wwwroot/blog/protected/components/UserMenu.phpに格納され、
以下のような内容を持ちます。
Yii::import('zii.widgets.CPortlet'); class UserMenu extends CPortlet { public function init() { $this->title=CHtml::encode(Yii::app()->user->name); parent::init(); } protected function renderContent() { $this->render('userMenu'); } }
UserMenuクラスは、ziiライブラリのクラスであるCPortletクラスを拡張します。
CPortletのinit()メソッドとrenderContent()メソッドをオーバライドします。
前者はポートレットタイトルを現在のユーザ名に設定します。
後者はuserMenuというビューを描画することによりポートレットのボディ内容を生成します。
情報: 最初に
CPortletクラスにアクセスする前にYii::import()を呼んで、明示的にCPortletクラスを含めなければならないことに注意してください。 これはCPortletがziiプロジェクトの一部であり、それはYiiの公式な拡張ライブラリであるためです。 性能を考慮するため、このプロジェクトはコアクラスとしてリストされていません。そのため、最初に使う前にはインポートする必要があります。
userMenuビューの作成 ¶次に、/wwwroot/blog/protected/components/views/userMenu.phpとして格納されるuserMenuビューを作成します。
<ul> <li><?php echo CHtml::link('Create New Post',array('post/create')); </li> <li><?php echo CHtml::link('Manage Posts',array('post/admin')); </li> <li><?php echo CHtml::link('Approve Comments',array('comment/index')) . ' (' . Comment::model()->pendingCommentCount . ')'; </li> <li><?php echo CHtml::link('Logout',array('site/logout')); </li> </ul>
情報: デフォルトでは、ウィジェットのビューファイルは、ウィジェットクラスファイルを含むディレクトリの
viewsサブディレクトリの下に配置されるべきです。 ファイル名はビュー名と等しい必要があります。
UserMenuポートレットの使用 ¶新しく完成したUserMenuポートレットを使うときがきました。
レイアウトビューファイル/wwwroot/blog/protected/views/layouts/column2.phpを以下のように変更します。
...... <div id="sidebar"> <?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); </div> ......
上記においては、widget()メソッドをUserMenuクラスインスタンスの生成と実行のためにコールしています。
このポートレットは認証済みユーザにのみ表示されるべきであるため、現行ユーザのisGuestプロパティが偽
(このユーザが認証されていることを意味する)の場合にのみwidget()をコールします。
UserMenuポートレットの試験 ¶今迄に開発したものの試験をしましょう。
http://www.example.com/blog/index.phpを入力してください。
ページのサイドバーセクションに何も表示されないことを確認してください。Loginハイパーリンクをクリックし、ログインフォームに入力してログインしてください。
もしログイン成功の場合は、UserMenuポートレットがサイドバーに表れ、ポートレットタイトルがユーザ名となっていることを
確認してください。UserMenuポートレットの'Logout'ハイパーリンクをクリックしてください。
ログアウト動作が成功し、UserMenuポートレットが消えることを確認してください。今まで開発したものはポートレットであり、とても再利用可能なものです。 別のプロジェクトにおいて少々の修正あるいは全く修正せずに再利用が容易に可能です。 それだけでなく、このポートレットは論理と表現は分離されるべきであるという哲学に非常にあう設計となっています。 この点に関して以前の章ではことさら指摘しませんでしたが、このようなことは典型的なYiiアプリケーションのほとんどすべてで使用されています。
Be the first person to leave a comment
Please login to leave your comment.