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

<?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.sanweie.com

*/

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.bang4.cn

* @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.2017549.com

* @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)

相关推荐