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 声明本地方法 ② 添加本地支 ...
随机推荐
- MySQL创建存储过程/函数需要的权限
alter routine---修改与删除存储过程/函数 create routine--创建存储过程/函数 execute--调用存储过程/函数 下面有一篇介绍MySQL所有权限的博文 http:/ ...
- Codefroces Gym101572 I.Import Spaghetti-有向图跑最小环输出路径(Floyd)
暑假学的很多东西,现在都忘了,补这道题还要重新学一下floyd,有点难过,我暑假学的东西呢??? 好了,淡定,开始写题解. 这个题我是真的很难过啊,输入简直是有毒啊(内心已经画圈诅咒出题人无数次了.. ...
- 一起来学Spring Cloud | 第六章:服务网关 ( Zuul)
本章节,我们讲解springcloud重要组件:微服务网关Zuul.如果有同学从第一章看到本章的,会发现我们已经讲解了大部分微服务常用的基本组件. 已经讲解过的: 一起来学Spring Cloud | ...
- 算法题1+2+...+N
题目:求1+2+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). int solve(int n) { int i = 1 ...
- Activity的启动模式全解standard,singleTop,singleTask,singleInstance
在android中控制Activity的启动模式的属性主要控制两大功能: 1,控制activity 进入哪一个任务task 中, 有两种可能,进入启动task中,进入指定taskAffinity的 ...
- mysql 存储过程时间月份减法
declare startTime VARCHAR(19) default '2014-00-00 00:00:00'; declare tempTime VARCHAR(19) default NO ...
- 表现层 JSP 页面实现
一.实验介绍 1.1 实验内容 本节课程主要利用 easyUI 实现系统的前端页面. 1.2 实验知识点 easyUI JavaScript html 1.3 实验环境 JDK1.8 Eclipse ...
- 修改host文件原理 localhost,127.0.0.1之间有什么区别
修改host文件原理http://www.zhihu.com/question/19782572 localhost与127.0.0.1的区别是什么 相信有人会说是本地ip,曾有人说,用127.0.0 ...
- DataSource是什么
public interface DataSource 该工厂用于提供到此 DataSource 对象表示的物理数据源的连接.作为 DriverManager(二者区别:http://tobylxy. ...
- POJ 2309 BST
BST Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8565 Accepted: 5202 Description C ...