Thinkphp最全教程thinkphpWord格式文档下载.docx
- 文档编号:5743253
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:24
- 大小:129.55KB
Thinkphp最全教程thinkphpWord格式文档下载.docx
《Thinkphp最全教程thinkphpWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《Thinkphp最全教程thinkphpWord格式文档下载.docx(24页珍藏版)》请在冰点文库上搜索。
{
echo“Helloworld”;
}
}
>
默认访问IndexAction的index方法,所以访问http:
//server/project/index.php和访问http:
//server/project/index.php/Index/index效果是一样的(Linux区分文件名大小写,所有应该确保Action名称大小写与文件名一致)。
页面输出Helloworld。
下面我们演示一下如何用模板输出变量。
在Tpl目录下新建default目录,这是默认的模板,多模板的话就建多个文件夹。
然后在default目录下新建Index目录,该目录名与Action对应。
然后新建index.html,该文件名默认与调用的方法一致。
编写index.html内容如下:
b>
{$str}<
/b>
然后我们修改开始编写的index方法,内容如下:
functionindex()
$this->
assign(“str”,“Helloworld”);
display();
访问http:
//server/project/index.php,页面源码为<
Helloworld<
。
2Thinkphp的CURD
CURD需要涉及到数据库部分,而且模板显示内容一般也是跟数据库紧密集合的。
所以准备了一个非常简单的BBS的例子。
先看一下数据库结构。
user表很简单,只记录用户名密码和上次登录时间。
column表记录BBS分区,category记录BBS版面。
一个分区下面可以有多个版面。
page表记录BBS上的帖子。
主题帖的pid为0,跟帖的pid为主题帖的id。
2.1READ
涉及到数据库的话,就需要有Model。
在Lib的Model目录下编写PageModel.class.php
/*Thinkphp1.0的Model会自动分析数据库结构,所以写个空Model就OK了*/
classPageModelextendsModel
查询所有数据,在Lib的Action目录下编写PageAction.class.php内容如下
classPageActionextendsAction
$pagemodel=D(“Page”);
$result=$pagemodel->
findAll();
//第一个参数填写查询条件,第二个参数为结果字段
dump($result);
如果只需要查一条记录,可以使用find方法
functionbyid()
$pagemodel=D("
Page"
);
find("
id='
"
.$_GET["
id"
]."
'
更复杂一点的查询,需要结合Model和HashMap的查询条件来实现。
HashMap查询大家可以看看手册,自己多实验一下。
这里我演示一下Model相关的查询。
视图查询。
在Lib\Model目录下编写PageViewModel.class.php如下
classPageViewModelextendsModel{
protected$viewModel=true;
var$masterModel='
Page'
;
//定义视图中的字段
protected$viewFields=array('
=>
array('
id'
'
title'
category_id'
content'
user_id'
addtime'
lastmodify'
pid'
),
'
User'
loginid'
)
);
//定义基础查询条件
protected$viewCondition=array("
Page.user_id"
=>
array('
eqf'
"
User.id"
));
//定义视图主键名称
PublicfunctiongetPk(){
return'
上面定义了一个视图,将Page的user_id与user表的id对应,这样我们就可以在页面中直接查看发帖的用户的用户名了。
给PageAction实现一个pageview方法如下:
functionpageview()
$pageview=D("
PageView"
$result=$pageview->
关联查询。
关联查询有好几种关系,具体见手册,我这里演示一下关联的HAS_MANY。
(TP核心文件的Model.class.php1238行,findAll应该有10个参数,早期版本的1.0RC1少了一个参数,请检查参数个数,如果只有9个参数,请在倒数第三个参数(true)前面加一个null;
结合使用has_many和模板的sublist标签进行关联查询时,Model.class.php1238行的findAll最后一个参数应该使用false,否则数据查不出来)
我们定义一个ColumnModel.class.php,这是分区的数据表,每个分区下面有多个版面,是HAS_MANY的关系。
classColumnModelextendsModel{
var$category;
//这个变量用来存放查出来的多个版面信息
var$_link=array(//设置关联关系
array('
mapping_type'
HAS_MANY,
'
class_name'
Category'
foreign_key'
`pid`'
mapping_name'
category'
)
由于关联查询涉及到Category表,我们需要定义一个CategoryModel.class.php,内容很简单:
classCategoryModelextendsModel
下面可以开始关联查找了。
定义一个ColumnAction.class.php,内容如下:
classColumnActionextendsAction
$column=D(“Column”);
$result=$column->
xfindAll();
//xfind、xfindAll关联查询
其他关联,比如BLOGS_TO之类的,大家可以举一反三,多实验几次就能明白了。
2.2C操作
如何使用Model的add方法添加记录大家可以看看手册,这里我主要演示一下使用表格自动添加记录,后面将演示一下自动填充以及表格校验。
首先到tpl\default目录下添加一个名为Page的文件夹,添加一个add.html。
这个是发表新主题的页面,内容如下(__URL__表示当前Action,__APP__表示当前应用)注意:
所有文件都要使用UTF8编码:
h1>
发表新主题<
/h1>
formmethod=postaction="
__URL__/insert"
table>
tr>
td>
标题<
/td>
inputtype=textname="
title"
/>
/tr>
内容<
textareaname="
content"
cols="
50"
rows="
10"
/textarea>
tdcolspan="
2"
align=center>
inputtype=hiddenname="
pid"
value="
0"
/>
category_id"
{$cateid}"
inputtype=submitvalue="
发表"
/table>
/form>
需要注意的是,各个input的name默认跟数据表的字段同名,这样才能自动根据form的内容生产记录。
由于是主题帖发表,所以pid的value直接设置成0(跟帖页面上的pid的value需要设置成主题帖的id)。
category_id表示当前帖子属于那个分区,这个是在用户进入分区发帖时设置的。
给PageAction添加一个add方法,用来显示发表主题的页面,内容如下:
functionadd()
assign(“cateid”,$_GET[“cid”]);
现在以及可以正确显示发帖页面了,下面就要开始编写insert方法,将帖子添加到数据库中
functioninsert()
$Pagemodel=D("
$vo=$Pagemodel->
create();
if(false===$vo){
die($Pagemodel->
getError());
$topicid=$Pagemodel->
add();
//add方法会返回新添加的记录的主键值
if($topicid)
echo"
发表主题成功"
else
throw_exception("
发表主题失败"
下面我们修改一下PageModel,添加表格自动填充和校验的功能,修改后的PageModel.class.php文件如下
var$_auto=array(
array('
getUser'
ALL'
function'
2007-12-22'
ADD'
var$_validate=array(
require'
标题必须!
内容必须!
自动填充根据用户制定的规则填充数据表的指定字段,自动校验除了require以外,还可以使用正则表达式,详见手册。
2.3U操作
U操作与C操作大同小异,主要是使用Model的save方法保持记录。
不在赘述。
2.4D操作
D操作注意是Model的delete方法,我们演示一下根据ID删除帖子的功能,编写PageAction的delete方法如下
functiondelete()
{
$id=$_REQUEST['
];
if($Pagemodel->
deleteById($id))
echo“删帖成功”;
else
echo“删帖失败”;
3Thinkphp的模板机制
关于模板的详细介绍,请看手册关于模板的章节。
下面演示一下常用标签的使用。
最简单的是变量输出,这个在Helloworld里面以及演示过了,如果记不清楚如何输出变量,请参考第一节。
下面我们演示一下如何输出数组(对象)。
可以通过配置DATA_RESULT_TYPE,设置返回结果的类型(1:
对象,0:
数组)。
如果不配置,默认数据返回格式为数组。
一般情况下,模板中的变量无需区分其数组还是对象,Thinkphp在赋值的时候会自动判断。
使用上一节的PageAction的byid方法,我们格式化输出帖子内容。
在Tpl\default\Page目录下使用utf-8编码建一个byid.html模板,内容如下(第一行导入标签库):
tagLibname='
cx,html'
html>
head>
title>
ThinkphpDemo<
/title>
metahttp-equiv="
Content-Type"
content="
text/html;
charset=utf-8"
/head>
body>
tableborder="
1"
<
tdrowspan=2>
{$vo.user_id}<
title:
{$vo.title}<
content:
p>
{$vo.content}<
/p>
addtime:
{$vo.addtime}<
/body>
/html>
然后我们修改一下byid方法,将dump语句注释掉,添加:
$this->
assign("
vo"
$result);
//模板中我们使用的是vo变量
//加载模板,输出
下面演示一下volist的使用,同时我们演示一下include标签。
volist相当于for循环。
很多朋友可能用过require(“header.htm”),require(“footer.htm”)这样的模板操作,include标签实际上就是这个作用。
我们首先在Tpl\default目录下建立一个public目录,一些公用的文件我们放在这个目录下。
建立header.html内容如下:
建立footer.html内容如下:
palign=”center”>
copyright2008yhustc<
然后我们到Page的模板目录新建一个pageview.html,内容如下:
includefile="
../Public/header"
volistname=”result”id=”vo”>
{$vo.loginid}<
/volist>
../Public/footer"
可以看到,其实就是把刚才显示单个帖子的页面放到一个volist标签里面就可以实现循环了。
name是Action中将要赋值的变量,id是在volist内部使用的变量。
将pageview函数中的dump语句注释掉,添加:
result"
//模板中我们使用的是result变量
翻页操作
要做内容列表输出有一个很重要的问题就是分页显示。
用thinkphp做分页是很简单的。
下面我们演示一下。
还是刚才的pageview,我们修改一下函数。
在开始查询前,需要导入分页类,同时根据当前页数设置limit条件。
完整的pageview函数如下:
functionpageview()
$pageview=D("
$count=$pageview->
count();
//count函数参数是查询条件,默认没有where的条件限制
import("
ORG.Util.Page"
//导入分页类
if(!
empty($_REQUEST['
listRows'
])){
$listRows=$_REQUEST['
}else{
$listRows=2;
//listRows标识每页显示多少条记录
}
$p=newPage($count,$listRows);
//根据总数和每页显示记录数生成Page类的对象
findAll('
*'
idasc'
$p->
firstRow.'
.$p->
listRows);
$page=$p->
show();
//page类的show方法生成翻页的字符串
//dump($result);
$this->
page"
$page);
主要就是增加了生成翻页函数的操作,同时findAll函数修改一下调用方式,将limit条件传入。
倒数第二行给一个叫page的模板变量赋值,所以我们也需要在模板中添加一个page。
在<
下面一行添加{$page}。
然后刷新页面,thinkphp自动生成了翻页链接。
内置list标签
如果只是单纯的进行列表操作,例如后台管理里面查看文章列表,使用list标签是个很方便的办法。
我们试着将分区内容作为列表显示。
给ColumnAction增加一个listpage操作如下:
functionlistpage()
$column=D("
Column"
listpage操作很普通,$result是select出来的结果,将其赋值给模板中的result变量。
现在看看模板的list标签如何写。
Tpl\default\Column\listpage.html内容如下:
html:
listid="
columnlist"
datasource="
name="
show="
id:
编号,name:
名称|80%"
主要是配置datasource和show两个熟悉。
datasource就是刚才赋值的result。
show是要显示的列。
第一个是数据库select出来对应的字段,冒号后面的是标题,竖线后面的是列宽。
如果需要将字段进行函数处理,在字段后用|function的形式调用。
比如id|function:
函数处理后的编号|20%。
访问一下页面,thinkphp自动生成了一个表格。
你可以给这个表格指定css,也可以添加checkbox,添加action。
这些内容可以通过RBAC管理系统的Node的模板部分学习。
多级列表
有的时候需要用到多级列表。
比如显示一个BBS的分区,然后分区下面有很多版面。
这个时候可以使用sublist标签。
将Column的index操作的dump操作注释掉,添加:
通过上面的学习,相信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Thinkphp 教程