Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

YiiFrameworkBlog开发向导:建立Portlet架构

Posted on 2010-02-24 21:48  analyzer  阅读(629)  评论(0编辑  收藏  举报

像最新评论列表和tag列表等,用Portlet实现是个不错的选择。一个Portlet就是一个可插入的用户界面组件,显示为聚合的一段HTML片段。在本节中,我们讲述了如何为我们的blog应用。建立portlet构架

根据需求分析,我们需要四个不同的 portlet(为方便,以下翻译为模块)。分别是登陆,用户菜单,tag列表和最新评论。这些模块(portlet)会在每个页面的侧边栏显示。

建立portlet类

我们建立一个名字为portlet的类作为我们开发所有portlet的基类。该基类包含了所有portlet的公共属性和方法。比如定义一个tittle属性来描述每个Portlet的标题,比如定义了如何用深色背景的区块修饰模块。

下面的代码显示了portlet基类的定义,因为一个portlet往往包含逻辑处理和展示两个部分,我们让portlet继承自CWidget。这意味portlet作为一个widget,可以在用widget()方法在页面中插入。

 
  1. class Portlet extends CWidget
  2. {
  3.     public $title// the portlet title
  4.     public $visible=true; // whether the portlet is visible
  5.     // ...other properties...
  6.  
  7.     public function init()
  8.     {
  9.         if($this->visible)
  10.         {
  11.             // render the portlet starting frame
  12.             // render the portlet title
  13.         }
  14.     }
  15.  
  16.     public function run()
  17.     {
  18.         if($this->visible)
  19.         {
  20.             $this->renderContent();
  21.             // render the portlet ending frame
  22.         }
  23.     }
  24.  
  25.     protected function renderContent()
  26.     {
  27.         // child class should override this method
  28.         // to render the actual body content
  29.     }
  30. }

 

在上面代码中,init()和run()是CWidget必须实现的方法,当widget在视图文件中被显示时,他们会被自动调用。Portlet的子类主要重写renderContent() 方法的实现来生成真正的模块内容。

修改页面显示。

现在我们需要调整一下页面布局,以便我们把portlet放到侧边栏。布局页面由视图文件blog/protected/views/layouts/main.php中定义。它展示了不同页面公用的区块(比如顶部的header,底部的footer),并在适当的地方,嵌入由某个对应的方法和视图产生的动态内容

我们的blog应用的页面布局如下

 
  1. <html>
  2. <head>
  3. ......
  4. <?php echo CHtml::cssFile(Yii::app()->baseUrl.'/css/main.css'); ?>
  5. <title><?php echo $this->pageTitle; ?></title>
  6. </head>
  7.  
  8. <body>
  9.  
  10. ...header...
  11.  
  12. <div id="sidebar">
  13. ...list of portlets...
  14. </div>
  15.  
  16. <div id="content">
  17. <?php echo $content; ?>
  18. </div>
  19.  
  20. ...footer...
  21.  
  22. </body>
  23. </html>

 

除了修改页面的结构之外我们还需要修改blog/css/main.css处的css文件。以便整体的显示看起来像示例程序中那样,在此不做详细介绍。

我要啦免费统计