要求分析に基けば、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
プロジェクトの一部であるためです (zii
は Yii の公式な拡張ライブラリです)。 パフォーマンス上の考慮から、このプロジェクトに属するクラスはコアクラスとしてリストされていません。そのため、最初に使う前にはインポートする必要があります。
userMenu
ビューの作成 ¶次に、/wwwroot/blog/protected/components/views/userMenu.php
として格納される userMenu
ビューを作成します。
<ul> <li> echo CHtml::link('新しい記事を作成',array('post/create')); </li> <li> echo CHtml::link('記事を管理',array('post/admin')); </li> <li> echo CHtml::link('コメントを承認',array('comment/index')) . ' (' . Comment::model()->pendingCommentCount . ')'; </li> <li> echo CHtml::link('ログアウト',array('site/logout')); </li> </ul>
情報: 既定として、ウィジェットのビューファイルは、ウィジェットクラスファイルを含むディレクトリの
views
サブディレクトリの下に配置されるべきです。 ファイル名はビュー名と等しい必要があります。
UserMenu
ポートレットの使用 ¶新しく完成した UserMenu
ポートレットを使うときがきました。
レイアウトビューファイル /wwwroot/blog/protected/views/layouts/column2.php
を以下のように変更します。
...... <div id="sidebar"> if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); </div> ......
上記においては、widget()
メソッドを呼んで UserMenu
クラスのインスタンスを生成して実行しています。
このポートレットは認証済みユーザにのみ表示されるべきであるため、現在のユーザの isGuest
プロパティが false (このユーザが認証されていることを意味する) の場合にのみ widget()
をコールします。
UserMenu
ポートレットの試験 ¶今迄に開発したものの試験をしましょう。
http://www.example.com/blog/index.php
を入力してください。
ページのサイドバーセクションに何も表示されないことを確認してください。Login
ハイパーリンクをクリックし、ログインフォームに入力してログインしてください。
もしログイン成功の場合は、UserMenu
ポートレットがサイドバーに表れ、ポートレットタイトルがユーザ名となっていることを確認してください。UserMenu
ポートレットの 'ログアウト' ハイパーリンクをクリックしてください。
ログアウト動作が成功し、UserMenu
ポートレットが消えることを確認してください。開発したポートレットは非常に再利用の可能性が高いものです。 別のプロジェクトにおいて少々の修正あるいは全く修正せずに容易に再利用することが出来ます。 それだけでなく、このポートレットの設計は、論理と表現は分離されるべきであるという哲学に忠実に従っています。 この点に関して以前のセクションではことさら指摘しませんでしたが、典型的な Yii アプリケーションではこの手法がほとんどすべての場所で使用されています。
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.