thinkcmf 常用操作

11-16  thinkcmf  

   核心文件结构:simplewind--model--lite--model.class.php /controller.class.php

   Mobile---controller:

获取错误信息:$this->apiError()$this->apiSuccess()

获取用户IPget_client_ip()---model.class.php 

统计条数: $count = M('Order')->where($where_s)->count();

条件判断:$where_s['id'] = array('in',$ids);

 分页: $page = $this->page($count,10);

 查找: $info = M('Order')->where($where_s)->order('vip desc,createtime desc')->limit($page->firstRow.','.$page->listRows)->select();

 if ( $_GET['p']>ceil($count/10) )

        {

         $this->apiError( 'over' );

        }else{

         $this->apiSuccess( '获取成功',array('info'=>$info) );

        }

查找:$data = array( 'uid'=>$this->user['id'],'orderid'=>$_POST['id'] );

       $info = M('grab_order')->where($data)->find();

$vo['grab_user_nicename'] =M('users')->where(array('id'=>$grab['uid']))->field('user_nicename')->find();

查找: $user_login = M('users')->where("id=".$order['userid'])->getField('user_login');

添加: $data['time'] = NOW_TIME;   $res = M('grab_order')->add($data);

保存: $rel = M('order')->where($where)->save($data);

更改设置: M('order')->where(array('id'=>$_POST['id']))->setField('status',1);

图片地址: $vo['avatar'] = "http://".C('SERVER_NAME').C('GRAB_SET_PATH').$user['avatar'];

推送消息: $user_login = M('users')->where("id=".$order['userid'])->getField('user_login');

  $mes = array( 'orderid'=>$_POST['id'],'msg'=>'您派发的订单已被抢,快去看看吧','type'=>2); if( (int)$this->pushcontent_test($user_login) ){

    $re = pushcontent( 0,$user_login,$mes,array(),2 );}

写入数据过滤:filter()  $this->data($data)->filter('strip_tags')->add();

I方法:I('变量类型.变量名',['默认值'],['过滤方法'])变量类型是指请求方式或者输入类型,   

       意为{input}是避免输入数据出现安全隐患的重要手段,I函数默认的过滤方法是

        Htmlspecialchars strip_tags interval

get    获取GET参数               post    获取POST参数    

request    获取REQUEST 参数      put    获取PUT 参数    

session    获取 $_SESSION 参数    cookie    获取 $_COOKIE 参数    

server    获取 $_SERVER 参数      globals    获取 $GLOBALS参数 

param    自动判断请求类型获取GETPOST或者PUT参数 param类型变量还可以用数字索引的方式获取URL参数(必须是PATHINFO模式参数有效,无论是GET还是POST方式都有效) 

注意:变量类型不区分大小写。变量名严格区分大小写。默认值和过滤方法均属于可选参数。

echo I('get.name');// 相当于 $_GET['name']

I('session.user_id',0);// 获取$_SESSION['user_id'] 如果不存在则默认为0

echo I('get.name','','htmlspecialchars');// 采用htmlspecialchars方法对$_GET['name'] 进行过滤,如果不存在则返回空字符串

http://serverName/index.php/New/2013/06/01 

echo I('param.1');// 输出2013   

param变量类型的写法可简化:I('id');// I('param.id')I('name');// I('param.name')

Thinkphp3.2添加了一个I方法,取义Input,用来获取前台提交过来的数据。
I方法是放在了/ThinkPHP/Common/function.php之中

C()方法:C方法是ThinkPHP用于设置、获取,以及保存配置参数的方法,使用频率较高。

     设置参数 

C('DB_NAME','thinkphp');

表示设置DB_NAME配置参数的值为thinkphp,由于配置参数不区分大小写

$config['user_id'] = 1;   $config['user_type'] = 1;   C($config);

如果C方法的第一个参数传入数组,就表示批量赋值,上面的赋值相当于:

C('USER_ID',1);    C('USER_TYPE',1);

获取参数   要获取设置的参数,可以用:

$userId = C('USER_ID');    $userType = C('USER_TYPE');

如USER_ID参数尚未定义过,则返回NULL。如传入的配置参数为空,表示获取全部的参数:

$config = C();

保存设置 
3.1版本增加了一个永久保存设置参数的功能,仅针对批量赋值的情况,例如:

$config['user_id'] = 1;    $config['user_type'] = 1;    C($config,'name');

在批量设置了config参数后,会连同当前所有的配置参数保存到缓存文件(或者其他配置的缓存方式)。保存之后,如果要取回保存的参数,可以用

$config = C('','name');

其中name就是前面保存参数时用的缓存的标识,必须一致才能正确取回保存的参数。取回的参数会和当前的配置参数合并,无需手动合并

惯例配置文件:simplewind--core---conf---conventionPhp

require SPAPP_PATH.'Core/ThinkPHP.php';//载入框架核心文件

R()方法在其他控制器里面调用这个操作方法(一般R方法用于跨模块调用是A()升级)

R('[项目://][分组/]模块/操作','参数','控制器层名称') 

R('Admin/User/detail',array('5'));

表示调用Admin分组下面的User控制器的detail方法。

R('Admin://User/detail',array('5'));

表示调用Admin项目下面的User控制器的detail方法。

官方建议不要在同一层多太多调用,会引起逻辑的混乱,被公共调用的部分应该封装成单独的接口,可以借助3.1的新特性多层控制器,单独添加一个控制器层用于接口调用,例如,我们增加一个Api控制器层,

class UserApi extends Action {   public function detail($id){       return M('User')->find($id);   }  }

然后,使用R方法调用。也就是说,R方法的第三个参数支持指定调用的控制器层。

$data = R('User/detail',array('5'),'Api');

别名定义:application-common-conf-alias.php   "Dir" => SPAPP_PATH.'Lib/Util/Dir.class.php',

文件加载:导入文件,一般来说lib目录下的文件可以实现自动加载,

方法一:impor (‘ page ’) ;   $obj = new \page(); 

 

方法二:import("ORG.ThinkSDK.ThinkOauth");$qq = \ThinkOauth::getInstance('qq', $token);也可以直接实例化:$htt = new Org\Net\Http(); 

方法三:  import("Org.Net.Http",dirname(__FILE__),".class.php");

            $htt = new \Http();  //反斜线代表跳出当前命名空间

            $htt::download($file_path,$file_name);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

registerController.class.php

获取验证码: getMsgcode()

       $map['time'] = array( 'lt',$time - 300 );

        M('msgcode')->where($map)->delete();

        $where['tel'] = $_POST['tel'];

        $info = M('msgcode')->where($where)->find();

注册:doregister()

$data['user_login'] = $_POST['tel'];

        $data['create_time'] = date( 'Y-m-d H:i:s',$time );

        $data['user_status'] = 1;

        $data['user_type'] = 2;

        $res = M('users')->add($data);

问题:注册验证码没变?

登陆:login()登陆--版本升级--session--广告--发布内容--头像证件等地址--会员级别--

        $where['user_login'] = $_POST['user_login'];

        $info = M('Users')->where($where)->find();

      //判断手机端的版本号和服务端最大的版本号是否相等

        if( isset($_REQUEST['version']) && $_REQUEST['version'] != $version['id'])

        {    

            //返回版本文件路径

            $info['ver_file'] =     "http://".C('SERVER_NAME').C('USER_APP_PATH').$version['filename'].".apk";

            $info['force_update'] = $version['is_force_update'];

        }

//登陆查找数据

        $_SESSION['user'] = $info['id'];

        $data = array( 'last_login_ip'=>get_client_ip(),'last_login_time'=>date( 'Y-m-d H:i:s') );

        $adminappad = M('appad')->where(array('type'=>1))->field('content,pic')->find();

//广告

       $sp_slide=M('slide');

    $data=$sp_slide->select();

        if($adminappad['pic']){

         $ads = explode(';',$adminappad['pic']);

         $appad['pic1'] =  "http://".C('SERVER_NAME').$data[0]['slide_pic'];

$appad['adrr1']=  $data[0]['slide_url'];}

  /*Begin Edit for[增加显示广告的内容和链接] At[2015-10-17]*/

$content_ad=M('ad')->field('ad_name,ad_content')->find();

$appad['content']=$content_ad['ad_name'];

$appad['ad_url']=$content_ad['ad_content'];

广告表单 Sp_appadtype 1超级管理员 代理商  name content 广告内容 timepic图片多张

广告 Sp_slideslide_nameslide_cidslide_picslide_urlslide_content

广告内容:ad_name ad_contentad_status 

发布内容 sp_classify :name 内容、uid 添加者idtime添加时间

问题:手机版本号怎么判断?

      getCityId()在哪?

      获取图片和地址为什么是二维数组?

  为什么添加那么多表单?

版本检测:appversion()

 

orderController.class.php:订单控制页

推送列表:index()  过期时间-发单分页- 遍历每条消息-推送时间

//发单分页

        $count = M('Order')->where($where)->count();

        $page = $this->page($count,10);

$info=M('Order')->where($where)->order('createtime')->limit($page->firstRow.','.$page->listRows)->select();

问题:分页limit后的数据怎么回事?

11-17  thinkcmf  

MVCv层引用m层通过require-once包含文件,实例化model,调用类的方法,

      实现v层,通过Smarty,采用标签形式实现v的展示。

模型(M):模型的定义由Model类来完成。

控制器(C):应用控制器(核心控制器App类)和Action控制器都承担了控制器的角色,Action控制器完成业务过程控制,而应用控制器负责调度控制。

视图(V):由View类和模板文件组成,模板做到了100%分离,可以独立预览和制作。

但实际上,ThinkPHP并不依赖M或者,也就是说没有模型或者视图也一样可以工作。甚至也不依赖C这是因为ThinkPHPAction之上还有一个总控制器,即App控制器,负责应用的总调度。在没有C的情况下,必然存在视图V,否则就不再是一个完整的应用。

总而言之,ThinkPHPMVC模式只是提供了一种敏捷开发的手段,而不是拘泥于MVC本身。

OrderController.class.php 订单控制页

 

推送列表:index()  过期时间-发单分页- 遍历每条消息-推送时间

pushcontent_test($people):判断推送人推送时间是否过期

$where_content['user_login']=$people;

        $condition_content=M('users')->where($where_content)->find();

        $condition_stime=strtotime( $condition_content['pushstime']);

推送时间判断:pushstime推送开始时间<time<pushetime推送结束时间

 Push:是否接受推送

grab_list() :抢单列表  显示抢单分页列表--单条抢单信息--多余的显示到历史

$where['uid'] = $this->user['id'];   //推送用户

if ( $user['avatar'] ){ //用户头像路径

$vo['avatar'] = "http://".C('SERVER_NAME').C('GRAB_SET_PATH').$user['avatar'];}

Add():派单推送消息  判断content 内容time任务时间不为空--VIP用户判断--添加到 sp_order--添加后根据要求查询推送用户---推送信息到用户

 $where['lng'] = array( array( 'gt',$lng - 0.5 ),array( 'lt',$lng + 0.5 ),'and' );

         $where['lat'] = array( array( 'gt',$lat - 0.5 ),array( 'lt',$lat + 0.5 ) );

 $order = 'ACOS(SIN(('.$lat.' * 3.1415) / 180 ) *SIN((lat * 3.1415) / 180 ) +COS(('.$lat.' * 3.1415) / 180 ) * COS((lat * 3.1415) / 180 ) *COS(('.$lng.'* 3.1415) / 180 - (lng * 3.1415) / 180 ) ) * 6380 asc';

 $info = M('Users')->where($where)->field('id,user_login')->order($order)->select();

查询条件中有比较采用数组$where['id'] = array( 'neq',$this->user['id'] );

          $mes = array( 'orderid'=>$res,'msg'=>'有新的订单了' );

           foreach ( $info as $vo ) { if( (int)$this->pushcontent_test($vo['user_login']) ){

     推送消息  pushcontent( 0,$vo['user_login'],$mes,array(),2 );     }}

sendone() :推送给指定人员

if(empty($_POST['user_login'])){   $this->apiError('非法操作');  }

$mes = array( 'orderid'=>$_POST['orderid'],'msg'=>'有新的订单指定发给你了','type'=>2);

$res = pushcontent( 0,$_POST['user_login'],$mes,array(),2 );

switchState():派单和抢单状态切换 --statue1接单切换到0---01

isset($_post[‘statue’]) 

 $res = M('Users')->where(array('id'=>$this->user['id']))->setField( 'state',$state );

$this->apiSuccess( array('state'=>$state) );

grab_set()  :抢单设置 --接收图片--名字、证件照、验证,保存至user

 $filetype = pathinfo( $_FILES['pic']['name'] );

加载文件 import ( 'UploadFile' );

      $upload = new \UploadFile(); // 实例化上传类

      $upload->maxSize = 8388608; // 最大上传文件为8M

      $upload->allowExts = array('jpg', 'png', 'jpeg'); //上传类型只能为".apk"格式的文件

      $upload->savePath = SITE_PATH.C('GRAB_SET_PATH');  

      $upload->saveRule = $name;

      $info = $upload->upload();

11-18  thinkcmf  

OrderController.class.php 订单控制页

grab_index() :抢单列表--判断验证审核、抢单设置--根据条件查找推送用户(半径确定派单用户)--将派单用户显示并显示用户详情  $juli=round(6378.138*2*asin(sqrt(pow(sin(($lat1*pi()/180-$v['lat']*pi()/180)/2),2)+cos($lat1*pi()/180)*cos($v['lat']*pi()/180)*   pow(sin( ($lng1*pi()/180-$v['lng']*pi()/180)/2),2)))*1000)

           //不能看到自己抢过的订单

         $where_grab['orderid'] = $v['id'];      订单id

         $where_grab['uid'] = $this->user['id'];  用户id

         $grab_list = M('grab_order')->where($where_grab)->find();

            //5个人抢过的订单不显示,根据orderid查找grab_order中的人数

         $where_gr['orderid'] = $v['id'];

         $total = M('grab_order')->where($where_gr)->count();        

         //搜索一点距离以内的所有订单

         if(($juli<$r) && (empty($grab_list)) && $total<5){

         $ids[]=$v['id'];}

grab_add() :立即抢单--判断权限、订单存在、判断是否已抢单--添加抢单人信息至 grab_order表,同时更改order表的status=1--推送消息给派单人

推送消息: $user_login = M('users')->where("id=".$order['userid'])->getField('user_login');

$mes = array( 'orderid'=>$_POST['id'],'msg'=>'您派发的订单已被抢,快去看看吧','type'=>2);

if( (int)$this->pushcontent_test($user_login) ){

    $re = pushcontent( 0,$user_login,$mes,array(),2 );

order_his():历史发单列表---分页历史发单信息---遍历抢单信息

   $where['status'] = array('neq',0);

    $where['userid'] = $this->user['id'];。。。。。。

        $vo['grabnum'] = count( $grabInfo );

foreach ( $grabInfo as $grab ){    $vo['grab_user_nicename'] = M('users')->where(array('id'=>$grab['uid']))->field('user_nicename')->find();  }

$info[$k]['grab'] = $vo;

grab_order_his()  :历史抢单列表--分页抢单信息---遍历显示发单信息    

$order_hisInfo=M('order_his')->where(array('orderid'=>$v['orderid']))->field('userid,ordernum,content,status')->find();

    $info[$k]['ordernum'] = $order_hisInfo['ordernum'];

        $info[$k]['content'] = $order_hisInfo['content'];

         $info[$k]['user_nicename'] = M('users')->where(array('id'=>$order_hisInfo['userid']))->getField('user_nicename');

        $info[$k]['status'] = $order_hisInfo['status'];

del_orderHis():历史发单列表删除--查找order_his,将status=0删除

   $where['id'] = I( 'post.id' );  //等同$_post[‘id’]

del_grabHis():历史发单列表删除--查找del_grabHis,将status=0删除

show_lnglat() :获取用户附近派单信息----根据条件查找sp_user派单用户---计算半径--将范围内的用户发出去

   $surplus_time = ($createtime+($limit_time*24*3600))-time();

   $where_time['_string']="id!=$userid AND grab_status=3 AND push=1 AND user_status=1 AND user_type!=1 AND state=1 AND cityid=$cityid AND find_in_set('$classid',classid)";

$usersInfo = M('users')->where($where_time ->field('id,user_login,user_nicename,lng,lat,sex,grab_grade,classid')->select();

问题:不是时间戳也可以相减吗?

多个条件还可以用$arr[_string]=’...and...and’ ?

order_del():取消派单或者取消接单  ---取消派单---取消接单

   if($info['userid']==$_SESSION['user']){   //判断是取消派单

           $id = I('post.id');

           $info = M('order')->where("id=$id")->find();

           if(empty($info)){   $this->apiError( '订单不存在' ); }

           unset($info['id']);   $info['orderid'] = $id;}

   注销id是因为$info包含了order的信息,查询order_grab orderID=$infoid

问题:$info['userid']在哪查找?

order_complaint():派单人投诉-----添加投诉信息

$res = M('order_his')->add($info);

问题:应该用setfield 更新投诉,为什么用add()?? 因为没有判断历史里面有没有

grab_grade():派单人评价订单----将评价的订单添加到历史中更改状态同时删除order中数据----grab_order中的添加到历史,更改状态,同时删除

        $data['grab_grade'] = round(($user['grab_grade']+$_POST['grab_grade'])/2,1);

$data['grab_assess'] = $_POST['grab_assess'];

M('users')->where('id='.$user['id'])->save($data);。。。。。。

$order['orderid'] = $order['id'];

unset($order['id']);

$order['status'] = 6;//订单结束(任务完成,已经评价完)

$res = M('order_his')->add($order);

问题:为什么可以直接保存或者添加数据,会不会覆盖原来数据???

add_errorlog():对抢单人评价 不用了

11-19 thinkcmf

user_gettoken():融云聊天---判断gettoken存在发起的联系人获取通讯录---不存在创建(添加好友至通讯录,更新maillist,反向添加好友)

$uidsarr = explode(',',$uids);

foreach($uidsarr as $v){    $user = M('users')->where('id='.$v)->field('user_nicename,gettoken,user_login')->find();$list[] = $user;

$this->apiSuccess('获取成功',array('token'=>$res['gettoken'],'list'=>$list));

confirm_grabuser():确定抢单人,并推送消息   ---确定抢单人后加钱并发送消息,-- 修改grab_orderstatus=10请派单人验收任务-----遍历其他抢单人信息添加到历史抢单信息中,删除grab_order中信息

$v['status'] = 0;

$res = M('grab_order_his')->add($v);

if($res){   M('grab_order')->where('id='.$id)->delete()   }

confirm_check():派单人验收工作  ---- 判断是确认还是评价---验收完成结算钱发消息---等待验收

//flag=0确认工作完成,派单人要验收工作

//flag=1派单人点击验收按键提交,推送给抢单人

       if($_POST['flag']==1){

if(!$res || $res['status']!=4){  $this->apiError('非法操作');}

$data['status'] = 5;//等待评价(派单人去评价抢单人完成任务的状况)

}else{   if(!$res || $res['status']!=2){    $this->apiError('非法操作');}

$data['status'] = 4;//等待您验收任务(抢单人已经完成任务,等待派单人验收) }

 

CenterController.class.php 个人中心页

setInfo(): 接收图片---修改密码

      if ( isset( $_FILES['pic'] ) ) 

        {

            if ( empty( $_FILES['pic']['tmp_name'] ) )

            {

                $this->apiError( '图片不能为空' );

            }

            $filetype = pathinfo( $_FILES['pic']['name'] );

            $name = $this->user['user_login'].'_'.NOW_TIME;

            import ( 'UploadFile' );

            $upload = new \UploadFile(); // 实例化上传类

            $upload->maxSize = 8388608; // 最大上传文件为8M

            $upload->allowExts = array('jpg', 'png', 'jpeg'); //上传类型只能为".apk"格式的文件

            $upload->savePath = SITE_PATH.C('GRAB_SET_PATH');  

            $upload->saveRule = $name;

            $info = $upload->upload();

            if ( !$info ) 

            { // 上传错误提示错误信息

                $this->apiError( $upload->getErrorMsg() );

            }

            $avatar = $name.'.'.$filetype['extension'];

            $res = M('users')->where(array('id'=>$this->user['id']))->setField('avatar',$avatar );

            if ( $res ) 

            {

                $url = "http://".$_SERVER['HTTP_HOST'].sp_get_user_avatar_url($avatar);

                $this->apiSuccess( '头像保存成功',array('avatar'=>$url));

            }

            else

            {

                $this->apiError( '头像保存失败' );

            } }。。。。

$key = array_keys( $_POST ); 

$res = M('Users')->where( array( 'id'=>$this->user['id'] ) )->setField( $key[0],$_POST[$key[0]] );  

问题:最后不知道修改的什么????

set_grab():添加抢单设置----修改抢单状态

$res = M('users')->where($where)->save($_POST);

get_ErrorMsg():得到系统错误信息

     $filename =$person['user_login'].'_'.date('Ymd_His').'.txt';

        $full_path =C('CRASH_FILE').$filename;

        $fp = fopen( $full_path,'w' );

        fwrite( $fp, $_POST['stack'] );

        fclose($fp);

转载于:https://www.cnblogs.com/jingzi111/p/5044814.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值