在Thinkphp编程中集成了很多用起来非常方便的方法。对于刚接触的编程人员来说,可谓是只要掌握并灵活运用了,那么就可以达到事半功倍的效果了,下面就来为大家详细的讲解一下。

1. getField

getField的方便之处在于可以获取一个值,一个数组,或者一组键值对。

接下来举三个例子简单说明。

A. 获取一个值。

在修改密码的方法中,要验证旧密码是否匹配。现已知用户id为$uid。

则$old_pass = $Model->where(“uid=’$uid’”)->getField(‘password’);

即可获取旧密码来进行验证。

B. 获取一个数组

如果一级分类下有二级分类,现在给出一级分类,要求搜索到一级分类下的所有产品。

解决方法就是首先获得所有的二级分类ID,这时候用getField是非常方便的。

$arr_types = $Model->where(“pid=’$type_id’”)->getField(‘id’,true);

$map[‘type_id’] = array(‘in’,$arr_types);

$products = M(‘product’)->where($map)->select();

这样就获取到了这个一级分类下的所有产品,该方法仅限二级分类,如果有三级分类请用其他方法解决。

C. 获取一组键值对

鉴于水平有限,目前主要用于关联查询的信息展示中,可以在一定程度上给数据库减压。

比如要展示一个用户的购物车,然而从购物车表中仅仅能查到商品的ID,但我想要展示商品的名字。这时候从商品表中获取一组键值对即可解决这个问题。

$arr_product = $Model->getField(‘id,product_name’,true);

输出的时候,对应商品的名字为$arr_product[$product_id];

当然,用join也能解决这个问题。

2. page

顾名思义,这是thinkphp封装好的一个分页类,用起来非常方便。不同版本用法不同,详细用法可以查看手册。这里要讲的是一个终极解决方案。无论哪个版本,甚至是原生的php都可以解决分页问题。

假设要分页的结果是$product_list(数据类型array)。

当前页码:$page = I(‘page’)?I(‘page’):1;

每页信息条数:$per_page = 10;

获得分页结果:$product_list = array_slice($product_list,($page-1)* $per_page, $per_page);

Array_slice参数:数组名,起始位置(0开始),分割的数量。

3. setField

有时候需要改变一组数据中或一类数据中的某个字段,这时候用save方法有点大材小用。

比如我只需要修改一个状态值,将某个或某类的status值修改为1,表示可用。

$Model->where($map)->setField(‘status’,1);

如果同时我想把修改时间也记录下来怎么办。

$data[‘status’] = 1;

$data[‘edittime’] = time();

$Model->where($map)->setField($data);

setField可以修改一个字段,也可以修改多个字段。

4. setInc、setdec

SetInc,常用来统计阅读量点击量。每次请求文章的时候,只需要:

$Model->where(“id=’$id’”)->setInc(‘readnum’);

默认增加1,也可以自定义。详细用法可以看手册。

Setdec用法一样。

5. 后台有关于添加、编辑一类控制器的技巧

做后台开发的都知道,添加一条数据需要用两个控制器,一个用来展示页面,另一个用来操作,其实两个控制器可以合二为一的。现在已添加为例:

常规写法:

Public function addproduct(){

$this->display();

}

Public function do_addproduct(){

$Model = M(‘product’);

$data = array(

‘name’ => I(‘name’),

‘price’ => I(‘price’),

……

);

$result = $Model->add($data);

If($result){

Success(‘添加成功’,U(‘product_list’));

}else{

Error(‘添加失败’);

}

}

合二为一的写法:

Public function addproduct(){

If(IS_POST){

$Model = M(‘product’);

$data = array(

‘name’ => I(‘name’),

‘price’ => I(‘price’),

……

);

$result = $Model->add($data);

If($result){

Success(‘添加成功’,U(‘product_list’));

}else{

Error(‘添加失败’);

}

}else{

$this->display();

}

}

以上是添加一类的控制器的写法,接下来同样的思路,展示修改控制器的写法。

Public function editproduct(){

$id = I(‘id’);

$Model = M(‘product’);

If(IS_POST){

$data = array(

‘id’ => $id,

‘name’ => I(‘name’),

‘price’ => I(‘price’),

……

‘addtime’=>time()

);

$result = $Model->save(‘data’);

If($result){

Success(‘修改成功’,U(‘product_list’));

}else{

Error(‘添加失败’,U(‘editproduct’,array(‘id’=>$id)));

}

}else{

$this->info = $Model->find($id);

$this->display();

}

}

最后需要跟各位编程人员讲解一些注意事项:

a.展示页面的时候,id以input[hidden]形式展示,提交的时候一并提交上去,写起来会轻松很多。

b.如果在$data数组中有主键存在,直接save方法即可。

c.为了避免没有任何修改导致返回结果失败的情况,加上时间即可解决。

合二为一的方法,最大的好处就是在模板中写

表单的时候,action=”/Admin/Technology/edit/id/507.html”即可,十分方便。