thinkcmf 經常使用操做

   核心文件結構:simplewind--model--lite--model.class.php /controller.class.phpphp

   Mobile---controller:html

獲取錯誤信息:$this->apiError()$this->apiSuccess()thinkphp

獲取用戶IP:get_client_ip()---model.class.php api

統計條數: $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();cookie

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

        {併發

         $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    自動判斷請求類型獲取GET、POST或者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---convention。Php

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_appad:type 1超級管理員 2 代理商  name 、content 廣告內容 time、pic圖片多張

廣告 Sp_slide:slide_name、slide_cid、slide_pic、slide_url、slide_content

廣告內容:ad_name 、ad_content、ad_status 

發佈內容 sp_classify :name 內容、uid 添加者id、time添加時間

問題:手機版本號怎麼判斷?

      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  

MVC:v層引用m層經過require-once包含文件,實例化model,調用類的方法,

      實現v層,經過Smarty,採用標籤形式實現v的展現。

模型(M):模型的定義由Model類來完成。

控制器(C):應用控制器(核心控制器App類)和Action控制器都承擔了控制器的角色,Action控制器完成業務過程控制,而應用控制器負責調度控制。

視圖(V):由View類和模板文件組成,模板作到了100%分離,能夠獨立預覽和製做。

但實際上,ThinkPHP並不依賴M或者V ,也就是說沒有模型或者視圖也同樣能夠工做。甚至也不依賴C,這是由於ThinkPHP在Action之上還有一個總控制器,即App控制器,負責應用的總調度。在沒有C的狀況下,必然存在視圖V,不然就再也不是一個完整的應用。

總而言之,ThinkPHP的MVC模式只是提供了一種敏捷開發的手段,而不是拘泥於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---0到1

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=$info【id】

問題:$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_order的status=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);

相關文章
相關標籤/搜索