分享

php通用用户首页及模板输出代码实例

 董小宝的日常 2021-08-02

<?php

namespace Common\Controller;

use Think\Controller;

class DefaultController extends Controller {

    public function __construct(){

        header("Content-type: text/html; charset=UTF-8");

        parent::__construct();

        if(!defined('__URL__')) define('__URL__', __CONTROLLER__);

        if(!defined('__PUBLIC__')) define('__PUBLIC__', __ROOT__.'/Public');

        $this->initial();

    }

    private function initial(){

        global $publicData;

        if(empty($publicData['peizhi'])){

            $peizhi=SL('Param')->getPZ();

            if(empty($peizhi['logopath'])) $peizhi['logopath']='/Public/index/night/logo.png';

            $publicData['peizhi']=$peizhi;

        }

    }

    /**

     * 编辑器图片上传

     */

    public function upload(){

        $dir=$_GET['dir'];

        if(empty($dir)) $dir='images';

        //logo上传

        if ($_FILES) {

            $path = SL('Upload')->uploadImage($dir);

            if (!strstr($path, 'Uploads')) {

                $buffer=[0,

                    $path];

            }else{

                $buffer=[1,$path];

            }

        }else{

            $buffer=[0,'请上传文件'];

        }

        $this->reback($buffer,!IS_AJAX);

    }

    /**

     * 描述:对不存在的方法进行处理

     * @author fengxing

* https://www.

     */

    function __call($functionName, $args){

        //getCookie方法

        if(strpos($functionName,'getCookie')===0){

            return $this->getCookieCommon($functionName,$args);

        }

        //setCookie方法

        if(strpos($functionName,'setCookie')===0){

            return $this->setCookieCommon($functionName,$args);

        }

        //获取接口方法

        if(strpos($functionName,'getApi')===0){

            return getApi($functionName,$args);

        }

        if( 0 === strcasecmp($functionName,ACTION_NAME.C('ACTION_SUFFIX'))) {

            if(method_exists($this,'_empty')) {

                // 如果定义了_empty操作 则调用

                $this->_empty($functionName,$args);

            }elseif(file_exists_case($this->view->parseTemplate())){

                // 检查是否存在默认模版 如果有直接输出模版

                $this->display();

            }else{

                if(C('SHOW_PAGE_ERROR_MORE')==1){

                    E(L('_ERROR_ACTION_').':'.ACTION_NAME);

                    return;

                }

                //记录错误信息

                D('Base')->addErrorLog(array('description'=>'ActionName:'.ACTION_NAME.' FunctionName:'.$functionName.'('.serialize($args).') source:'.$_SERVER['HTTP_REFERER']));

                emptyUrl();

                return;

            }

        }else{

            if(C('SHOW_PAGE_ERROR_MORE')==1){

                E(__CLASS__.':'.$functionName.L('_METHOD_NOT_EXIST_'));

                return;

            }

            //记录错误信息

            D('Base')->addErrorLog(array('description'=>__CLASS__.':'.$functionName.'('.serialize($args).')'));

            emptyUrl();

            return;

        }

    }

    /**

     * 描述:获取分组下的对应Cookie内容

     * @return array

     * @author fengxing

     */

    private function getCookie($cookieName,$style='USER'){

        return cookie(C('FX_'.$style.'_AUTH_KEY').$cookieName);

    }

    /**

     * 通用获取cookie方法 用于__call

     * @param string $functionName 当前调用的方法名称

     * @param string $args 参数数组

     * @return mixed

     * @author fengxing

     */

    private function getCookieCommon($functionName,$args){

        $function=preg_replace('/^getCookie/','',$functionName);

        $moduleName = '';

        if(isset($args[0])){

            $moduleName = $args[0];

        }

        //以下方法判断存在的方法

        switch($function){

            case 'UserID':

                $userID = $this->getCookie('_UID',$moduleName);

                if(!$userID && isset($_POST['userID'])) $userID = $_POST['userID'];

                return $userID;

                break;

            case 'Code':

                $code=$this->getCookie('_CODE',$moduleName);

                if(!$code && isset($_POST['userCode'])) $code=$_POST['userCode'];

                return $code;

                break;

            case 'Time':

                return $this->getCookie('_TIME',$moduleName);

                break;

            default:

                return $this->getCookie('_'.strtoupper($function),$moduleName);

        }

    }

    /**

     * 描述:设置分组下的对应Cookie内容

     * @return array

     * @author fengxing

     */

    private function setCookie($cookieName,$value='',$option=null,$moduleName='USER'){

        if(empty($moduleName)){

            $moduleName='USER';

        }

        cookie(C('FX_'.$moduleName.'_AUTH_KEY').$cookieName,$value,$option);

    }

    /**

     * 通用获取cookie方法 用于__call

     * @param string $functionName 当前调用的方法名称

     * @param string $args 参数数组

     * @return mixed

     * @author fengxing

     */

    private function setCookieCommon($functionName,$args){

        $function=preg_replace('/^setCookie/','',$functionName);

        //以下方法判断存在的方法

        switch($function){

            case 'UserID':

                return $this->setCookie('_UID',$args[0],$args[1],$args[2]);

                break;

            case 'Code':

                $code=$this->setCookie('_CODE',$args[0],$args[1],$args[2]);

                return $code;

                break;

            case 'Time':

                return $this->setCookie('_TIME',$args[0],$args[1],$args[2]);

                break;

            default:

                return $this->setCookie('_'.strtoupper($function),$args[0],$args[1],$args[2]);

        }

    }

    /**

     * 返回错误码

     * @param string $errorNum 错误码 多个则以逗号间隔

     * @param int $flag 类型 默认0返回错误页面 1返回ajax数据 2返回字符串

     * @param string $url 跳转路径

     * @param string $replace 错误码中%s替换 多个则以逗号间隔

     * @return string|json

     * @author fengxing

     */

    protected function setError($errorNum,$flag=0,$url='',$replace='') {

        $this->ajaxSetError($errorNum,$flag,$url,$replace);

    }

    /**

     * 返回正确数据

     * @param string $data 需要返回的数据

     * @return json

     * @author fengxing

     */

    protected function setBack($data, $url = '', $second = 3, $moreData = array()) {

        if( IS_AJAX || $data['return']==2) {

            $return = [$data, $url, $second, $moreData];

            $this->ajaxSetBack($return);

            exit();

        }

        $this->ajaxSetBack($data, $url, $second, $moreData);

        exit();

    }

    /**

     * 通用返回数据

     * @param array $buffer 返回数组

     *              错误array(0,'错误编号','跳转地址',替换数据,跳转默认时间)

     *              正确array(1,'正确提示|模板数据','跳转地址','跳转默认时间','更多数据包括cookie数据')

     *              模板数据格式 array('pageName'=>'页面标题','buffer'=>array('数据内容'))

     * @param int $ifTemplate 是否有可能模板输出 1是 0否

     * @param int $ifFetch 是否返回模板输出数据 1是 0否

     * @param array $moreData 更多的数据输出

     * @return null

     * @author fengxing

     */

    public function reback($buffer, $ifTemplate = 0, $ifFetch = 0) {

        if ($buffer[0] === 0) {  //输出错误

            if (empty($buffer[4]) || !is_numeric($buffer[4]))

            $this->setError($buffer[1], IS_AJAX, $buffer[2], $buffer[3], $buffer[4]);

        }else {

            if ($ifTemplate == 1) {  //输出模板

                /* 载入模板标签 */

                if ($ifFetch)

                    return $this->loadTemplate($buffer[1], $buffer[2], $ifFetch);

                $this->loadTemplate($buffer[1], $buffer[2]);

            }else { //输出成功

                if (empty($buffer[3]) || !is_numeric($buffer[3]))

                    $buffer[3] = 3;

                $this->setBack($buffer[1], $buffer[2], $buffer[3],$buffer[4]);

            }

        }

    }

    /**

     * 载入模板数据

     * @param int $buffer 模板数据

     * @param int $tempFile 模板文件

     * @param int $ifFetch 是否返回模板输出数据 1是 0否

* https://www.

     * @author fengxing

     */

    public function loadTemplate($params, $tempFile = '', $ifFetch = 0) {

        foreach ($params as $i => $param) {

            $this->assign($i, $param); //模板标识

        }

        if ($ifFetch === 0)

            $this->display($tempFile);

        return $this->fetch($tempFile);

    }

    /**

     * ajax 返回所有错误码

     * @param string $errorNum 错误码 多个则以逗号间隔

     * @param int $flag=0 类型 默认0返回错误页面 1返回ajax数据 2返回字符串

     * @param string $url 跳转路径

     * @param string $replace 错误码中%s替换 多个则以逗号间隔

     * @param string $diplayContent='Public/error' 默认加载模板

     * @return string|json

     * @author demo

     */

    public function ajaxSetError($errorNum,$flag=0,$url='',$replace='',$displayContent=''){

        if(!$errorNum) return ; //错误码为空

        //兼容多个错误码

        if(!is_array($errorNum)) $numArray=explode(',',$errorNum);

        else $numArray=$errorNum;

        $error = implode(',', $numArray);

        if (!$error)

            $error = '未知错误!'; //错误描述为空

        if(empty($error)){

            $error=$errorNum; //错误描述为空

            $errorNum=0;

        }

        if ($flag === false)

            $flag = 0;

        if ($flag === true)

            $flag = 1;

        //返回类型

        switch($flag){

            case 0:

                $this->showPageMsg($error, $url,3,$displayContent);

                break;

            case 1:

                if($url){

                    $data=[$error, $url, 3];

                }else{

                    $data=$error;

                }

                $newData['data']=$data;

                $newData['status']=0;

                $this->ajaxReturn($newData,'json',JSON_UNESCAPED_UNICODE);

                break;

            case 2:

                return $error;

                break;

        }

    }

    /**

     * 返回正确数据

     * @param string $data 需要返回的数据

     * @param string $url 跳转地址

     * @param int $second 跳转间隔时间

     * @return json

     * @author demo

     */

    public function ajaxSetBack($data,$url='',$second=3, $moreData = array()) {

        if( IS_AJAX || $data['return']==2) {

            $newData['data']=$data;

            $newData['status']=1;

            if(!empty($moreData)) $newData['code']=$moreData;

            $this->ajaxReturn($newData,'json',JSON_UNESCAPED_UNICODE);

        }

        $this->showPageMsg($data,$url,$second);

    }

    /**

     * 返回json数据

     * @param array $data 需要返回的数据

     * @return json

     * @author demo

     */

    public function ajaxBack($data) {

        $this->ajaxReturn($data,'json',JSON_UNESCAPED_UNICODE);

    }

    /**

     * 提示信息

     * @param string $msgDetail 错误提示标题

     * @param string $link 跳转地址

     * @param bool $autoRedirect = true 跳转地址

     * @param int $seconds=3 等待时间

     * @param sting $displayContent 调取模板名称

* https://www.

     * @return bool

     * @author demo

     */

    public function showPageMsg($msgDetail, $link='',  $seconds = 3,$displayContent=''){

        if(empty($displayContent)) $displayContent=MODULE_NAME.'@Public/msg';

        if ($link) {

            $links[0]['text'] = '进入>>';

            $links[0]['href'] = $link;

            $links[0]['target'] = '_self';

        }else{

            $links[0]['text'] = '返回上一页';

            $links[0]['href'] = 'javascript:history.go(-1)';

            $links[0]['target'] = '_self';

        }

        $this->assign('msg', $msgDetail);

        $this->assign('links', $links);

        $this->assign('jumpUrl', $links[0]['href']);

        $this->assign('waitSecond', $seconds);

        $this->display($displayContent);

        exit;

    }

    /**

     * 验证码显示

     * @param $imageMsg array 验证码设置属性

     * @author fengxing

     */

    public function verify($imageMsg=''){

        import("Common.Tool.Image");

        if(!empty($imageMsg)){

            extract($imageMsg);

            \Image :: buildImageVerify($total,$num,$style,$width,$height,$action);

        }else{

            \Image :: buildImageVerify();

        }

    }

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约