0 关注者

创建用户菜单 Portlet

根据需求分析,我们需要三个不同的 Portlet:“用户菜单” Portlet、“标签云” Portlet 和“最新评论” Portlet。我们将通过扩展 Yii 提供的 CPortlet 小部件来开发这些 Portlet。

在本节中,我们将开发我们的第一个具体 Portlet - 用户菜单 Portlet,它显示一个仅供已验证用户使用的菜单项列表。菜单包含四个项目

  • 批准评论:一个指向待批准评论列表的超链接;
  • 创建新帖子:一个指向帖子创建页面的超链接;
  • 管理帖子:一个指向帖子管理页面的超链接;
  • 注销:一个链接按钮,用于注销当前用户。

1. 创建 UserMenu

我们创建 UserMenu 类来表示用户菜单 Portlet 的逻辑部分。该类保存在文件 /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() 方法。前者将 Portlet 标题设置为当前用户的名称;后者通过渲染名为 userMenu 的视图来生成 Portlet 的主体内容。

提示:请注意,我们必须在第一次引用它之前通过调用 Yii::import() 来显式包含 CPortlet 类。这是因为 CPortletzii 项目的一部分 - Yii 的官方扩展库。出于性能考虑,该项目中的类不会被列为核心类。因此,我们必须在第一次使用它之前导入它。

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 Portlet

现在是时候使用我们新完成的 UserMenu Portlet 了。我们将布局视图文件 /wwwroot/blog/protected/views/layouts/column2.php 修改如下

......
<div id="sidebar">
    <?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>
</div>
......

在上面,我们调用 widget() 方法来生成和执行 UserMenu 类的实例。由于 Portlet 应该只显示给已验证用户,因此我们仅在当前用户的 isGuest 属性为 false(表示用户已验证)时调用 widget()

4. 测试 UserMenu Portlet

让我们测试一下我们到目前为止所做的事情。

  1. 打开一个浏览器窗口并输入 URL http://www.example.com/blog/index.php。验证页面侧边栏部分中是否没有任何内容显示。
  2. 单击 登录 超链接并填写登录表单以登录。如果成功,请验证 UserMenu Portlet 是否出现在侧边栏中,以及 Portlet 的标题是否为用户名。
  3. 单击 UserMenu Portlet 中的“注销”超链接。验证注销操作是否成功以及 UserMenu Portlet 是否消失。

5. 总结

我们创建的是一个高度可重用的 Portlet。我们可以轻松地在其他项目中重复使用它,几乎不需要任何修改。此外,此 Portlet 的设计严格遵循逻辑和表示应分离的理念。虽然我们之前没有提到这一点,但这种做法在典型的 Yii 应用程序中几乎无处不在。

发现拼写错误或您认为此页面需要改进?
在 GitHub 上编辑它 !