Thinkphp编程中几种常见的实用技巧讲解

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

  1. getField

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

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

  A. 获取一个值。

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

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

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

  B. 获取一个数组

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

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

扫描二维码关注公众号,回复: 2797802 查看本文章

  $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”即可,十分方便。好了到这里就为大家讲完了,如果还是存在不理解的地方,那么大家可以咨询来寻求帮助。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

猜你喜欢

转载自blog.51cto.com/13686158/2160849
今日推荐