初识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. spring boot原理分析

    1.分析spring-boot-starter-parent <parent> <groupId>org.springframework.boot</groupId> ...

  2. spring ConfigurableListableBeanFactory 接口

    接口继承关系如上图. ConfigurableListableBeanFactory具体: 1.2个忽略自动装配的的方法. 2.1个注册一个可分解依赖的方法. 3.1个判断指定的Bean是否有资格作为 ...

  3. BZOJ1014火星人prefix Splay維護序列 + 字符串哈希

    @[Splay, 哈希] Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:\(madamimadam\), 我们将这个字符串的各个字符予以标号 ...

  4. FastDFS 使用经验分享

    原文:http://www.ttlsa.com/fastdfs/fastdfs-experience-sharing/ 应用背景 文件被上传到FastDFS后Storage服务端将返回的文件索引(FI ...

  5. 四个很好的开源app项目

    Open Source and the iOS App Store Today, we are open-sourcing 4 iOS apps: ThatInbox, an email client ...

  6. android与服务器交互总结(json,post,xUtils,Volley)

    http://www.23code.com/tu-biao-chart/ 从无到有,从来没有接触过Json,以及与服务器的交互.然后慢慢的熟悉,了解了一点.把我学到的东西简单的做个总结,也做个记录,万 ...

  7. OpenGL中FBO的概念及其应用 [转]

    http://www.cppblog.com/kongque/archive/2010/08/26/124754.html FBO一个最常见的应用就是:渲染到纹理(render to texture) ...

  8. 如何用迅雷下载在网页中的Flash动画或课件

    对于框架网页而言,看地址栏可以发现后缀不是SWF,就是说该网站没有直接把Flash给你,右击该Flash也没有下载选项.   此时虽然右下角是Flash,但是左边和上面网页部分还是正常的元素,右击这些 ...

  9. 我的Android进阶之旅------&gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:

    我的Android进阶之旅-->怎样解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...

  10. NATSserver配置具体解释

    NATSserver配置具体解释 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 虽然NATS能够无配置的执行,但也能 ...