yblog学习——widget的实现

该日志由 xm 发表于 2009-03-22

     widget很棒,但是以前不知道怎么做。老版本的yblog就有widget支持,好像是自写的,不过当时没有仔细看。今天研究了下最新版的yblog,发现是使用的技术基于thinkphp最新的widget类,很容易就实现了。

    1.  在yblog中,所有的widget都放在Lib/Widget目录下,每个widget都有.class.php和同名的html。

widget.jpg

大小: 23.77 K
尺寸: 500 x 213
浏览: 5 次
点击打开新窗口浏览全图

    2.  以LinksWidget.class.php为例,可以看见:

  1. <?php 
  2. class LinksWidget extends Widget 
  3.     function render($data=array()) 
  4.     { 
  5.         $linkList = S("linkList"); 
  6.         if(!$linkList
  7.         { 
  8.             $Dao = D("Links"); 
  9.             $linkList = $Dao->order("link_rating ASC")->findAll(); 
  10.             S("linkList",$linkList); 
  11.         } 
  12.         $this->assign("linkList",$linkList); 
  13.         return $this->renderFile(); 
  14.     } 
  15. ?> 

  可见:所有widget类都是继承自Widget基类,并重载render函数。

  而html文件写入此widget的view。

  如Links.html:

  1. <tagLib name="cx,html" /> 
  2. <div id="links" class="widget widget_links"> 
  3. <h2 class="sidebartitle">链接</h2> 
  4. <ul> 
  5. <volist name="linkList" id="link"> 
  6.   <li><a href="{$link.link_url|Input::forTag}" 
  7. title="{$link.link_description|Input::forTag}" 
  8. target="{$link.link_target|Input::forTag}"> 
  9. {$link.link_name|Input::forShow} 
  10. </a></li> 
  11. </volist> 
  12. </ul> 
  13. </div> 

那么,在主视图如何调用此widget呢?

    3.  要在界面上显示,首先应由action控制。yblog是把它放在BaseAction里面了。

  1. /*取出widget并按保存的顺序调用挂载函数*/ 
  2.         $onWidget = S("widgets"); 
  3.         if($onWidget===false) 
  4.         { 
  5.             $pluginDao = D("PlugIn"); 
  6.             $plugins = $pluginDao->where("status=1"
  7. ->field("name,file,type")->order("priority ASC")->findAll(); 
  8.             // 缓存启用的插件数据 
  9.             $content = ''
  10.             $onWidget = array(); 
  11.             foreach($plugins as $plugin) { 
  12.                 if($plugin['type']=='plugin'
  13.         $content .= php_strip_whitespace($plugin['file']); 
  14.                 else if($plugin['type']=='widget'
  15.                 $onWidget[] = $plugin['name'];  
  16. //按照YBlog的Widget命名规范,所调用的Widget的name字段是相同的          } 
  17.     file_put_contents(APP_PATH."/Temp/~plugins.php",$content); 
  18.         S("widgets",$onWidget); 
  19.             //缓存更新成功,重新显示页面 
  20.         header("location: ".$_SERVER["REQUEST_URI"]); 
  21.         } 
  22.         $this->assign("widgets",$onWidget); 

   总的来说,从数据库中取出每个widget的相关信息,并assign到视图中。

   可以考虑就在文件夹中加一个文件保存相关信息,那么就可以复制即生效的效果,和wordpress等相同。

    4.  主视图中调用非常容易。

  1. <volist name="widgets" id="widget"> 
  2. {~W($widget)} 
  3. </volist> 

 

 标签:    yblog, thinkphp, 学习
 网摘:  Yahoo Baidu Google Bolaa 365Key Yesky Wozhai POCO ViVi Hexun Del.icio.us Furl Blogmarks 分享到饭否
相关文章: (最多只显示10条记)
thinkphp的RBAC实现的一点想法(修改中) (浏览:1886, 评论:0)
thinkphp的自动完成脚本(in Autohotkey) (浏览:1724, 评论:0)
thinkphp即将有大动作 (浏览:1713, 评论:1)
thinkphp的模板定位 (浏览:1313, 评论:0)
thinkphp的widget (浏览:639, 评论:0)
thinknew (浏览:515, 评论:0)
thinkphp 1.6 rc1发布 (浏览:690, 评论:0)
blueprint框架学习笔记 (浏览:586, 评论:0)
yblog学习——Input类的使用 (浏览:726, 评论:0)
yblog学习——action设计 (浏览:733, 评论:0)
发表评论:( 来了就留个脚印吧!你的参与是我最大的动力!)

    

我要啦免费统计