ThinkPHP Widget模块开发流程
初识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 '',
`position` varchar(50) NOT NULL,
`published` tinyint(1) NOT NULL DEFAULT '',
`module` varchar(50) NOT NULL,
`access` tinyint(3) NOT NULL DEFAULT '',
`showtitle` tinyint(3) NOT NULL DEFAULT '',
`params` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; INSERT INTO `self_modules` VALUES ('', '主菜单', '', '', 'left', '', 'Menu', '', '', 'id=1\nstyle=17joys');
INSERT INTO `self_modules` VALUES ('', '子菜单', '', '', 'left', '', 'Menu', '', '', 'id=1\nstyle=menu');
INSERT INTO `self_modules` VALUES ('', '最新文章模块', '', '''left','','LatestNews','','','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模块开发流程的更多相关文章
- AOS应用基础平台-模块开发流程
AOS平台简单介绍 AOS应用基础平台基于JavaEE技术体系,以"标准功能可复用.通用模块可配置.行业需求高速开发.异构系统无缝集成"为目标.为软件开发团队提供高效可控.随需应变 ...
- ThinkPHP创建应用的一般开发流程及实例
Thinkphp是免费开源的php框架,提供了建站所需要的各种组件,方便用户快速建设部署网站. Thinkphp简介:http://thinkphp.cn/Manual/16 官方完全开发手册:htt ...
- ThinkPHP创建应用的一般开发流程
使用ThinkPHP创建应用的一般开发流程是: 系统设计.创建数据库和数据表:(可选) 项目命名并创建项目入口文件,开启调试模式: 完成项目配置: 创建项目函数库:(可选) 开发项目需要的扩展(模式. ...
- 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程
JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作.项目管 ...
- Python基础之模块:7、项目开发流程和项目需求分析及软件开发目录
一.项目开发流程 1.项目需求分析 明确项目具体功能: 明确到底要写什么东西,实现什么功能,在这个阶段的具体要询问项目经理和客户的需求 参与人员: 产品经理.架构师.开发经理 技术人员主要职责: 引导 ...
- 小谈Scrum敏捷开发流程
一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...
- 软件开发流程 Software development process
软件开发流程(Software development process)即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法.软件的总体结构设计和模块设计.编程和调试.程序联调和测试以 ...
- ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程
ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问 http://<serverIp>/My/index.php/Index/s ...
- Android jni简便开发流程
<Android jni helloworld>中介绍了开发jni helloworld的步骤,本文将介绍jni简便开发流程 ① 写java代码 native 声明本地方法 ② 添加本地支 ...
随机推荐
- AC日记——飞行员配对方案问题 洛谷 P2756
题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...
- 洛谷——P1216 [USACO1.5]数字三角形 Number Triangles
P1216 [USACO1.5]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左 ...
- char 转string
c++: string.c_str() ---------> c: char c; string str;stringstream stream;stream << ...
- [转载]中情局数千份机密文档泄露:各种0day工具、恶意程序应有尽有
转载:http://www.freebuf.com/news/128802.html 维基解密最近再度获取到了数千份文件——据说这些文件是来自CIA(中央情报局),文件细数了CIA所用的网络入侵工具及 ...
- Aws Dynamodb数据导出到S3
本节将描写叙述怎样从一个或多个DynamoDB的表导出数据到S3的bucket中.在运行导出之前你须要提前创建好S3的bucket. 注意 假设你还没有使用过AWS Data Pipeline,在运行 ...
- 如何使用电骡eMule上传资源
1 在电脑中创建一个文件夹专门为上传资源使用 在里面放入任意文件并右击显示ED2K链接 链接效果如下 2 登陆verycd网站,并点击上传资源 复制ED2K地址并选择分类
- angular - 介绍
导入全局样式,生产环境和浏览器环境都导入了. 不知否你还记得index.html那个里面的节点 熟悉吗? 很熟悉吧
- angular - 编辑html文件-4
启动服务器: angular默认端口:4200 ng serve --port 3000 --open 输入本条命令后,会自动打开默认浏览器以及打开APP页 推荐开发工具webStorm,全平台兼容M ...
- Solaris磁盘配额
磁盘配额:就跟汽车行驶速度一样.我们设定. 添加rq标志,使其支持配额功能. 命令:quota ,打开就是quotaon 对ZFS文件系统进行设置配额: 当设置quota=none 则可以取消配额设置 ...
- JavaScript 工厂模式和订阅模式
设计模式的好处: 代码规范 // 例如表单验证,两个 input ,一个用户名,一个密码 // 通常做法是 function checkUser(){ //..... } function check ...