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 声明本地方法 ② 添加本地支 ...
随机推荐
- 死磕 java同步系列之AQS起篇
问题 (1)AQS是什么? (2)AQS的定位? (3)AQS的实现原理? (4)基于AQS实现自己的锁? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Jav ...
- python学习笔记1-numpy/enumerate
1. np.size和np.prod import numpy as np x = np.zeros((3, 5, 2), dtype=np.complex128) # ndarray.size is ...
- 【redis】4.spring boot集成redis,实现数据缓存
参考地址:https://spring.io/guides/gs/messaging-redis/ ================================================== ...
- iOS -- 开源项目和库
TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 ...
- win7 32位配置apache+wsgi+django环境
1下载xampp,里面有apache,mysql,phpmyadmin, 2 下载wsgi,http://download.csdn.net/download/copter/9192361 将对应的模 ...
- 一天时间用OpenFire打造自己的IM聊天工具
Openfire采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理.单台服务器可支持上万并发用户. 好友界面 ...
- How to set the initial value of a select element using AngularJS ng-options & track by
原文: https://www.gurustop.net/blog/2014/01/28/common-problems-and-solutions-when-using-select-element ...
- 转:android studio入门合集
http://blog.csdn.net/column/details/zsl-androidstudio.html
- install nfs and share file
介绍一下NFS的安装,以及共享文件 NFS(Net File System),通过使用NFS,可以像使用本地文件一样访问远程文件. 它主要解决了数据共享的问题,可以备份容灾. 安装配置 1.以linu ...
- 关于JavaScript禁止点击事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...