入口文件: define('APP_DEBUG',true); #开发是建议大家设为调试模式 define('THINK_PATH', dirname(__FILE__).'/ThinkPHP/'); #设置你的框架目录地址 define('APP_NAME','home');#设置你的项目名称 define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/'.APP_NAME.'/');#设置你的项目地址 require_once THINK_PATH.'ThinkPHP.php'; #加载框架核心文件 项目目录介绍: home --Common 你的函数库 ---Conf 你的配置文件 --- Lang 你的语言包文件 通常我们使用数组方式来实现国际化 ---Lib 你项目逻辑实现文件目录 在该目录下面,包含你的控制器,你的模型,你的第三方 当然你也可以将第三方的放置在ThinkPHP 框架中 我们通常这么做 ------Action 你的控制器 ------Model 你的模型 ------widget 你的组件 Runtime Thinkphp为你项目编译的文件在这里 ---Tpl 你模板在这里 Public 你的公告资料目录 ---css ---js ---images Uploads 你的上传文件目录 ThinkPHP 框架目录 做个简单的新闻发布: 创建你的数据库: create database cms; 选择你的数据库 use cms; 创建你的表 create table think_news( id int primary key auto_increment, #id title varchar(120) not null, #标题 content text not null, #内容 sendtime datetime not null, #发送时间 author varchar(30) not null, #作者 fromto varchar(30) not null, #来自 hits int not null default 0 #点击量 )engine=myisam charset=utf8; 插入测试数据 mysql> insert into think_news values(null,'my one news','hello word',now(),'admin','admin',default),(null,'my 2 news','hello words dddddddddddd0',now(),'admin','admin',default); 链接数据库: 配置你的数据库: //数据库配置信息 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => 'cms', // 数据库名 'DB_USER' => 'root', // 用户名 'DB_PWD' => 'test123', // 密码 'DB_PORT' => 3306, // 端口 'DB_PREFIX' => 'think_', // 数据库表前缀,目的:区分多个数据库的表 //模板相关配置 'TMPL_PARSE_STRING' =>array( '__PUBLIC__' => '/Public', // 更改默认的__PUBLIC__ 替换规则 '__JS__' => '/Public/js', // 增加新的JS类库路径替换规则 '__CSS__' => '/Public/css', // 增加新的JS类库路径替换规则 '__IMAGES__' => '/Public/images', // 增加新的JS类库路径替换规则 '__UPLOAD__' => '/Uploads', // 增加新的上传路径替换规则 ), 编写你的模型: 编写模型的文件命名规则: 表名Model.php 首字母大写,驼峰命名法 class NewsModel extends Model { // 定义你的字段 protected $fields=array('id','title','content','sendtime','author','fromto','hits'); } 编写你的控制器: class IndexAction extends Action { public function index(){ //链接数据库 $News=D('News'); //实例化模型类 NewsModel $id=$this->_param('id'); //获取你的参数 $data=$News->where('id='.$id)->find(); //查询返回数据 $this->assign('newsbody',$data); //装载变量 $this->display('default:Index:index'); //发送到default/Index/index.html 中 } } 访问你的url 路由: http://127.0.0.1/index.php/Index/index/id/2 编写你的视图: Tpl/deault/Index/index.html <!DOCTYPE html> <html> <head> <title></title> <css href="__CSS__/main.css" /> </head> <body> <div class="content"> <h2><p class="title">{$newsbody.title}</p></h2> <p class="title"> 作者:<span>{$newsbody.author}</span> 发表时间:<span>{$newsbody.sendtime}</span> 来源:<span >{$newsbody.fromto}</span> 点击量:<span>{$newsbody.hits}</span></p> <hr style="border: 1px solid #000000;"> <div class="body"> {$newsbody.content} </div> </div> </body> </html> 名词解释: ORM: O-object(对象) R-Relation(关系) M-Model(模型) - 简单理解为: 提供了一套对象与关系型数据库连接的一种映射中间件。我们在操作对象的属性也即是在操作数据库表中的字段列。它的主要目的在对数据库操作的一种持久化。使程序员最大限度的离开sql语句,通过对象模型来操纵你的数据库。ORM对性能的影响是极其有限的. 其他名词参见手册 ------------------------------------------------------------------------------------------------------------------------------ 紧接着上一天,来实现curd. <?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action { public function index(){ $this->display('default:Index:index'); #导航首页 } public function newsList(){ $Model=M('News'); $newsList=$Model->field('id,title')->select(); $this->assign('newsList',$newsList); $this->display('default:Index:list'); #显示所有新闻的标题 } public function show(){ //链接数据库 $News=D('News'); //实例化模型类 NewsModel $id=$this->_param('id'); $data=$News->where('id='.$id)->find(); $this->assign('newsbody',$data); $this->display('default:Index:show'); #依据id 显示具体的新闻内容 } public function addNews(){ $this->display('default:Index:addNews'); #添加新闻模板 } } Tpl/default/Index/index.html 导航模板 <div class="content"> <a href="{:U('Index/newsList')}">显示新闻</a> <!-- {:U('Index/newsList')} 在模板中使用U方法实现你的url --> <a href="">发布新闻</a> <a href="">管理新闻</a> </div> Tpl/default/Index/list.html 新闻列表模板 <ul> <volist name="newsList" id="vo"> <li><a href="{:U('Index/show',array('id'=>$vo[id]))}" id="{$vo.id}">{$vo.title}</a></li> </volist> </ul> Tpl/deautl/Index/show.html (上面有案例) 新闻显示模板 Tpl/default/Index/addNews.html 添加新闻模板 带编辑器和时间插件 <!DOCTYPE html> <html> <head> <title></title> <css href="__CSS__/main.css" /> <css href="__PLUGS__/kindeditor/themes/default/default.css"/> </head> <body> <form action="{:U('AddNews/index')}" method="post" name="from1"> #数据提交到添加新闻类的index方法中 <p><lable>标题:</lable><input type="text" name="title" size="20" /></p> <p><lable>作者:</lable><input type="text" name='author' size="20" /></p> <p><lable>时间:</lable><input class="Wdate" type="text" name='sendtime' onClick="WdatePicker({dateFmt:'yyyy/MM/dd/ HH:mm:ss'})" /></p> <p><lable>来源:</lable><input type="text" name='fromto' size="20" /></p> <p> <textarea name="content" style="width:600px;height:300px;visibility:hidden;">请发布你的内容:</textarea> </p> <p><input type="submit" name="sub" value="提交" /></p> </form> <js href="__PLUGS__/My97DatePicker/WdatePicker.js" /> <js href="__PLUGS__/kindeditor/kindeditor-min.js" /> <js href="__PLUGS__/kindeditor/lang/zh_CN.js" /> <script> var editor; KindEditor.ready(function(K){ editor = K.create('textarea[name="content"]', { allowFileManager : true }); }); </script> </body> </html> -------------------- class AddNewsAction extends Action{ public function _before_index(){ #在index之前执行该方法 //在提交之前先自动验证 if($this->isPost()){ header("content-type: text/html; charset=utf8"); $News=D("News"); $validate = array( array('title','require','标题必须必须填写!',1), array('author','require','作者必须填写!',1), array('fromto','require','来源必须现!',1), ); $News->setProperty("_validate",$validate); $result=$News->create(); if($result){ // 获取数据 $newsData['title']=$this->_post('title'); $newsData['content']=$this->_post('content'); $newsData['sendtime']=$this->_post('sendtime'); $newsData['author']=$this->_post('author'); $newsData['fromto']=$this->_post('fromto'); $newsId=$News->add($newsData); if( ! $newsId){ $this->error("插入失败",__APP__.'Index/addNews',3); #3秒后跳转 }else{ $this->success("添加新闻成功", __APP__.'/Index/index',3); } }else{ exit($News->getError()); } } } public function index(){} class NewsModel extends Model { protected $fields=array('id','title','content','sendtime','author','fromto','hits'); //自动填充 protected $_auto = array ( array('hits','createDefault',3,'callback'), // 对u_time字段在更新的时候写入当前时间戳 ); //实现函数createTime public function createDefault(){ return 'default'; } } 空模块操作 class EmptyAction extends Action{ public function index(){ $this->error('你访问的模块:'.MODULE_NAME.'不存在'); } } 空操作: 模块下面没有Action,系统自动执行下面的方法 public function _empty(){ $this->error('你访问的操作不存在'); } 比如访问如下url http://127.0.0.1/index.php/Index/show/id/1 /** * 优化系统自带的系统提示错误 */ <!DOCTYPE html> <head> <meta charset=utf-8" /> <title>页面提示</title> <script type="text/javascript"> function refresh(){ location.href = "{$jumpUrl}"; } setTimeout("refresh()",{$waitSecond}000); </script> <style type="text/css"> *{margin:0px;padding:0px;font-size:12px;font-family:Arial,Verdana;} #wrapper{width:450px;height:200px;background:#F5F5F5;border:1px solid #D2D2D2;position:absolute;top:40%;left:50%;margin- top:-100px;margin-left:-225px;} p.msg-title{width:100%;height:30px;line-height:30px;text-align:center;color:#EE7A38;margin-top:40px;font:14px Arial,Verdana;font-weight:bold;} p.message{width:100%;height:40px;line-height:40px;text-align:center;color:blue;margin-top:5px;margin-bottom:5px;} p.error{width:100%;height:40px;line-height:40px;text-align:center;color:red;margin-top:5px;margin-bottom:5px;} p.notice{width:100%;height:25px;line-height:25px;text-align:center;} </style> </head> <body> <div id="wrapper"> <p class="msg-title">{$msgTitle}</p> <present name="message"> <p class="message">{$message}</p> </present> <present name="error"> <p class="error">{$error}</p> </present> <present name="closeWin"> <p class="notice">系统将在 <span style="color:blue;font-weight:bold">{$waitSecond}</span> 秒后自动关闭,如果不想等待, 直接点击 <a href="{$jumpUrl}">这里</a> 关闭</p> </present> <notpresent name="closeWin"> <p class="notice">系统将在 <span style="color:blue;font-weight:bold">{$waitSecond}</span> 秒后自动跳转,如果不想等待, 直接点击 <a href="{$jumpUrl}">这里</a> 关闭</p> </notpresent> </div>