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 主體內容。

提示: 請注意,我們必須在第一次引用 CPortlet 類別之前,透過呼叫 Yii::import() 明確地包含它。這是因為 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 上編輯 !