首页 > Web开发 > 详细

ThinkPHP Widget模块开发流程

时间:2015-11-06 16:10:58      阅读:363      评论:0      收藏:0      [点我收藏+]

初识ThinkPHP的Widget,现把模块开发的流程发布如下,也方便以后自己查阅:

一、新建数据库表self_modules,sql代码如下

CREATE TABLE `self_modules` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` text NOT NULL,
  `content` text NOT NULL,
  `order` int(11) NOT NULL DEFAULT 0,
  `position` varchar(50) NOT NULL,
  `published` tinyint(1) NOT NULL DEFAULT 1,
  `module` varchar(50) NOT NULL,
  `access` tinyint(3) NOT NULL DEFAULT 0,
  `showtitle` tinyint(3) NOT NULL DEFAULT 1,
  `params` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;


INSERT INTO `self_modules` VALUES (1, 主菜单, ‘‘, 0, left, 1, Menu, 0, 1, id=1\nstyle=17joys);
INSERT INTO `self_modules` VALUES (2, 子菜单, ‘‘, 0, left, 1, Menu, 0, 1, id=1\nstyle=menu);
INSERT INTO `self_modules` VALUES (3, 最新文章模块, ‘‘, 0‘‘left,1,LatestNews,0,1,sid=2\ncid=3\nstyle=latestnews);

2、前台项目home/Lib/Action目录下建立ModulesAction.class.php,代码如下

class ModulesAction extends CommonAction{
    function index(){
        $mod = new Model(‘Modules‘);
        $list = $mod->where("position=‘left‘")->select();
        $this->assign(‘modlist‘,$list);
        $this->display();    
    }
}

3、/home/Tpl/default/Modules目录下建立index.html模板文件,代码如下(注意模块的调用方法)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>模块</title>
</head>

<body>
<volist name="modlist" id="row">
    <h3>{$row[‘title‘]}</h3>
    {:W($row[‘module‘],array(‘params‘=>$row[‘params‘],))}
</volist>

</body>
</html>

4、/home/Lib目录下建立Widget目录,在该目录下建立菜单模板文件MenuWidget.class.php,代码如下

class MenuWidget extends Widget{
    function render($data){
        //return ‘<font color="‘.$data[‘color‘].‘">aaa</font>‘;
        $params = $data[‘params‘];
        $p = explode("\n",$params);
        $pv = array();
        foreach($p as $v){
            $tmp = explode("=",$v);
            $pv[$tmp[0]] = $tmp[1];    
        }
        //dump($pv);
        
        $menuitem = new Model(‘MenuItem‘);
        $list = $menuitem->field("id,name,link,concat(path,‘-‘,id) as bpath")->order(‘bpath,id‘)->where(‘menuid=‘.$pv[‘id‘])->select();
        foreach($list as $key=>$val){
            $list[$key][‘signnum‘] = count(explode(‘-‘,$val[‘bpath‘]))-1;
            $list[$key][‘marginnum‘] = (count(explode(‘-‘,$val[‘bpath‘]))-1)*10;
        }
        $data[‘milist‘] = $list;
        $content = $this->renderFile($pv[‘style‘],$data);
        return $content;    
    }
}

5、/home/Lib/Widget/目录下建立菜单模块的模板目录Menu,并在该目录下建立菜单模块模板menu.html和17joys.html(这里建两个主要是多套模板可以选择)代码分别如下:

menu.html

<ul>
    <volist name="milist" id="row">
        <li style="margin-left:{$row[‘marginnum‘]}px"><a href="{$row[‘link‘]}">{$row[‘name‘]}</a></li>
    </volist>
</ul>

17joys.html

<ol>
    <volist name="milist" id="row">
        <li style="margin-left:{$row[‘marginnum‘]}px"><a href="{$row[‘link‘]}">{$row[‘name‘]}</a></li>
    </volist>
</ol>

至此模块开发完成,下面再写一个最新文章模块可以用来练习使用:

1、/home/Lib/Widget/目录下建立最新文章模块的Widget文件LatestNewsWidget.class.php,代码如下

class LatestNewsWidget extends Widget{
    function render($data){
        $params = $data[‘params‘];
        $p = explode("\n",$params);
        $pv = array();
        foreach($p as $v){
            $tmp = explode("=",$v);
            $pv[$tmp[0]] = $tmp[1];    
        }
        
        $article = new Model(‘Article‘);
        $list = $article->where(‘sectionid=‘.$pv[‘sid‘].‘ and catid=‘.$pv[‘cid‘])->select();
        //dump($list);
        $data[‘alist‘] = $list;
        
        $content = $this->renderFile(‘latestnews‘,$data);
        return $content;
    }
}

2、/home/Lib/Widget/目录下建立最新文章的模板目录LatestNews,并在该目录下建立最新文章模块的模板文件latestnews.html,代码如下:

<ul>
    <volist name="alist" id="row">
        <li>{:U(‘Article/view/id/‘.$row[‘id‘])}<a href="__APP__/Articl/view/id/{$row[‘id‘]}">{$row[‘title‘]}</a></li>
    </volist>
</ul>

至此最新文章模块完成,其实感觉也挺简单的,就两部,关键点就是处理好控制器模板穿过来的参数:{:W($row[‘module‘],array(‘params‘=>$row[‘params‘],))}

文章的静态化要在home项目的配置文件配置静态化设置:/home/Conf/config.php

 

‘URL_HTML_SUFFIX‘=>‘.html‘,

 

ThinkPHP Widget模块开发流程

原文:http://www.cnblogs.com/longfeiPHP/p/4942825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!