0 フォロワー

ユーザーメニューポートレットの作成

要件分析に基づき、3つの異なるポートレットが必要です。「ユーザーメニュー」ポートレット、「タグクラウド」ポートレット、「最近のコメント」ポートレットです。これらのポートレットは、Yii が提供する CPortlet ウィジェットを拡張して開発します。

このセクションでは、最初の具体的なポートレットである、認証されたユーザーのみが利用できるメニュー項目の一覧を表示するユーザーメニューポートレットを開発します。メニューには 4 つの項目が含まれます。

  • コメントの承認:承認待ちのコメントの一覧に移動するハイパーリンク。
  • 新しい投稿の作成:投稿作成ページに移動するハイパーリンク。
  • 投稿の管理:投稿管理ページに移動するハイパーリンク。
  • ログアウト:現在のユーザーをログアウトさせるリンクボタン。

1. 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 クラスを拡張します。CPortletinit() メソッドと renderContent() メソッドの両方をオーバーライドします。前者はポートレットのタイトルを現在のユーザーの名前に設定します。後者は、userMenu という名前のビューをレンダリングしてポートレットの本文コンテンツを生成します。

ヒント: 最初に参照する前に、Yii::import() を呼び出すことで CPortlet クラスを明示的に含める必要があることに注意してください。これは、CPortlet が Yii の公式拡張ライブラリである zii プロジェクトの一部であるためです。パフォーマンスを考慮して、このプロジェクトのクラスはコアクラスとしてリストされていません。したがって、初めて使用する前にインポートする必要があります。

2. userMenu ビューの作成

次に、userMenu ビューを作成します。これは、ファイル /wwwroot/blog/protected/components/views/userMenu.php に保存されます。

<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 サブディレクトリに配置する必要があります。ファイル名はビュー名と同じでなければなりません。

3. 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 プロパティが false の場合 (ユーザーが認証されていることを意味する) にのみ widget() を呼び出します。

4. UserMenu ポートレットのテスト

ここまでの結果をテストしてみましょう。

  1. ブラウザウィンドウを開き、URL http://www.example.com/blog/index.php を入力します。ページのサイドバーセクションに何も表示されていないことを確認します。
  2. ログイン ハイパーリンクをクリックし、ログインフォームに入力してログインします。成功した場合、UserMenu ポートレットがサイドバーに表示され、ポートレットのタイトルにユーザー名が表示されていることを確認します。
  3. UserMenu ポートレットの 'ログアウト' ハイパーリンクをクリックします。ログアウトアクションが成功し、UserMenu ポートレットが非表示になることを確認します。

5. まとめ

作成したものは、再利用性の高いポートレットです。ほとんどまたはまったく変更せずに、別のプロジェクトで簡単に再利用できます。さらに、このポートレットの設計は、ロジックとプレゼンテーションを分離する必要があるという考え方に厳密に従っています。前のセクションでは指摘しませんでしたが、このような慣習は典型的な Yii アプリケーションのほぼすべての場所で使用されています。

タイプミスを見つけたり、このページを改善する必要があると思われますか?
github で編集する !