初识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模块开发流程的更多相关文章

  1. AOS应用基础平台-模块开发流程

    AOS平台简单介绍 AOS应用基础平台基于JavaEE技术体系,以"标准功能可复用.通用模块可配置.行业需求高速开发.异构系统无缝集成"为目标.为软件开发团队提供高效可控.随需应变 ...

  2. ThinkPHP创建应用的一般开发流程及实例

    Thinkphp是免费开源的php框架,提供了建站所需要的各种组件,方便用户快速建设部署网站. Thinkphp简介:http://thinkphp.cn/Manual/16 官方完全开发手册:htt ...

  3. ThinkPHP创建应用的一般开发流程

    使用ThinkPHP创建应用的一般开发流程是: 系统设计.创建数据库和数据表:(可选) 项目命名并创建项目入口文件,开启调试模式: 完成项目配置: 创建项目函数库:(可选) 开发项目需要的扩展(模式. ...

  4. 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程

    JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作.项目管 ...

  5. Python基础之模块:7、项目开发流程和项目需求分析及软件开发目录

    一.项目开发流程 1.项目需求分析 明确项目具体功能: 明确到底要写什么东西,实现什么功能,在这个阶段的具体要询问项目经理和客户的需求 参与人员: 产品经理.架构师.开发经理 技术人员主要职责: 引导 ...

  6. 小谈Scrum敏捷开发流程

    一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...

  7. 软件开发流程 Software development process

    软件开发流程(Software development process)即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法.软件的总体结构设计和模块设计.编程和调试.程序联调和测试以 ...

  8. ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程

    ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问 http://<serverIp>/My/index.php/Index/s ...

  9. Android jni简便开发流程

    <Android jni helloworld>中介绍了开发jni helloworld的步骤,本文将介绍jni简便开发流程 ① 写java代码 native 声明本地方法 ② 添加本地支 ...

随机推荐

  1. 关于[WinError 10054] 远程主机强迫关闭了一个现有的连接。

    之前一直用python实现qq邮箱自动发送,都弄的好好的,然后今天一打开,就出现如题的错误,百度了许多,说,可能发送邮件次数过多,被当作是攻击,建议换个邮箱,换了也不行, 最后用手机给电脑分享Wifi ...

  2. SPOJ 7001 VLATTICE【莫比乌斯反演】

    题目链接: http://www.spoj.com/problems/VLATTICE/ 题意: 1≤x,y,z≤n,问有多少对(x,y,z)使得gcd(x,y,z)=1 分析: 欧拉搞不了了,我们用 ...

  3. Network | NAT

    在计算机网络中,网络地址转换(Network Address Translation或简称NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP封包通过路由器或防火墙时重 ...

  4. 同源策略Same-origin policy

     同源策略Same-origin policy 同源策略Same-origin policy是Web应用的一种安全基础策略.它规定同一源中,页面包含的脚本可以访问该源下的其他页面的数据.只有当网址中的 ...

  5. 某考试 T3 bitboard

                    bitboardDiscription    天才发明家小K 制造了一块比特板.板子上有2^n个比特元,编号为0 ∼ 2^n−1.每个比特元

  6. mac下报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

    如题mac下遇到错误: 解决办法:安装mac的命令行工具CommandLineTools xcode-select --install

  7. DLL注入新姿势:反射式DLL注入研究

    在分析koadic渗透利器时,发现它有一个注入模块,其DLL注入实现方式和一般的注入方式不一样.搜索了一下发现是由HarmanySecurity的Stephen Fewer提出的ReflectiveD ...

  8. OpenSceneGraph FAQ 【转】

    1.地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗? 答:计算一个空间点的屏幕坐标,使用osgAPEx::GetScreenPosition函数.当空间点处于相机视空间内(不管它是 ...

  9. 百科知识 .e,.ec文件如何打开

    1 .e是易语言源文件,你可以从以下网址下载e语言编程环境: http://www.xiazaiba.com/html/409.html   2 安装之后会自动关联.e文件.   3 打开一个e语言文 ...

  10. 安装mongoDB遇见的一个路径问题

    如果安装路径不存在,则不会解压EXE软件! 安装monogoDB后,它不会自动添加执行路径! 意思就是安装路径是D盘下面的mongoDB文件夹,假如不存在这个文件夹,则不会安装成功 你需要添加路径: ...