vr-shopxo-source/service/Application/Home/Controller/CommonController.class.php

593 lines
15 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace Home\Controller;
use Think\Controller;
/**
* 前台
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class CommonController extends Controller
{
// 顶部导航
protected $nav_header;
// 底部导航
protected $nav_footer;
// 用户信息
protected $user;
/**
* [__construt 构造方法]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:29:53+0800
* @param [string] $msg [提示信息]
* @param [int] $code [状态码]
* @param [mixed] $data [数据]
*/
protected function _initialize()
{
// 配置信息初始化
MyConfigInit();
// 公共数据初始化
$this->CommonInit();
// 菜单
$this->NavInit();
// 视图初始化
$this->ViewInit();
// 站点状态校验
$this->SiteStateCheck();
}
/**
* [ajaxReturn 重写ajax返回方法]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-07T22:03:40+0800
* @param [string] $msg [提示信息]
* @param [int] $code [状态码]
* @param [mixed] $data [数据]
* @return [json] [json数据]
*/
protected function ajaxReturn($msg = '', $code = 0, $data = '')
{
// ajax的时候success和error错误由当前方法接收
if(IS_AJAX)
{
if(isset($msg['info']))
{
// success模式下code=0, error模式下code参数-1
$result = array('msg'=>$msg['info'], 'code'=>-1, 'data'=>'');
}
}
// 默认情况下,手动调用当前方法
if(empty($result))
{
$result = array('msg'=>$msg, 'code'=>$code, 'data'=>$data);
}
// 错误情况下,防止提示信息为空
if($result['code'] != 0 && empty($result['msg']))
{
$result['msg'] = L('common_operation_error');
}
exit(json_encode($result));
}
/**
* [Is_Login 登录校验]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-03-09T11:43:48+0800
*/
protected function Is_Login()
{
if(empty($_SESSION['user']))
{
$this->error(L('common_login_invalid'), U('Home/User/LoginInfo'));
}
}
/**
* [CommonInit 公共数据初始化]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-03-09T11:43:48+0800
*/
private function CommonInit()
{
// 用户数据
if(!empty($_SESSION['user']))
{
$this->user = I('session.user');
}
}
/**
* [ViewInit 视图初始化]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:30:06+0800
*/
public function ViewInit()
{
// 主题
$default_theme = C('DEFAULT_THEME');
$this->assign('default_theme', $default_theme);
// 控制器静态文件状态css,js
$module_css = MODULE_NAME.DS.$default_theme.DS.'Css'.DS.CONTROLLER_NAME.'.css';
$this->assign('module_css', file_exists(ROOT_PATH.'Public'.DS.$module_css) ? $module_css : '');
$module_js = MODULE_NAME.DS.$default_theme.DS.'Js'.DS.CONTROLLER_NAME.'.js';
$this->assign('module_js', file_exists(ROOT_PATH.'Public'.DS.$module_js) ? $module_js : '');
// 导航
$this->assign('nav_header', $this->nav_header);
$this->assign('nav_footer', $this->nav_footer);
// 当前页面选择导航状态
$nav_pid = 0;
$nav_id = 0;
foreach($this->nav_header as $v)
{
if(I('viewid') == $v['id'])
{
$nav_id = $v['id'];
}
if(!empty($v['item']))
{
foreach($v['item'] as $vs)
{
if(I('viewid') == $vs['id'])
{
$nav_pid = $v['id'];
$nav_id = $vs['id'];
}
}
}
}
$this->assign('nav_pid', $nav_pid);
$this->assign('nav_id', $nav_id);
// 图片host地址
$this->assign('image_host', C('IMAGE_HOST'));
// 标题
$this->assign('home_seo_site_title', MyC('home_seo_site_title'));
// 页面最大宽度
$max_width = MyC('home_content_max_width', 0, true);
$max_width_style = ($max_width == 0) ? '' : 'max-width:'.$max_width.'px;';
$this->assign('max_width_style', $max_width_style);
// 用户数据
$this->assign('user', $this->user);
// 用户中心菜单
$this->assign('user_left_menu', L('user_left_menu'));
// 用户顶部菜单
$this->assign('user_nav_menu', L('user_nav_menu'));
}
/**
* [NavInit 导航初始化]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-19T22:41:20+0800
*/
private function NavInit()
{
// 读取缓存数据
$this->nav_header = S(C('cache_common_home_nav_header_key'));
$this->nav_footer = S(C('cache_common_home_nav_footer_key'));
// 导航模型
$m = M('Navigation');
$field = array('id', 'pid', 'name', 'url', 'value', 'data_type', 'is_new_window_open');
// 缓存没数据则从数据库重新读取,顶部菜单
if(empty($this->nav_header))
{
$this->nav_header = NavDataDealWith($m->field($field)->where(array('nav_type'=>'header', 'is_show'=>1, 'pid'=>0))->order('sort')->select());
if(!empty($this->nav_header))
{
foreach($this->nav_header as $k=>$v)
{
$this->nav_header[$k]['item'] = NavDataDealWith($m->field($field)->where(array('nav_type'=>'header', 'is_show'=>1, 'pid'=>$v['id']))->order('sort')->select());
}
}
S(C('cache_common_home_nav_header_key'), $this->nav_header);
}
// 底部导航
if(empty($this->nav_footer))
{
$this->nav_footer = NavDataDealWith($m->field($field)->where(array('nav_type'=>'footer', 'is_show'=>1))->order('sort')->select());
S(C('cache_common_home_nav_footer_key'), $this->nav_footer);
}
}
/**
* [GetClassList 获取班级列表,二级]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-30T13:26:00+0800
* @return [array] [班级列表]
*/
protected function GetClassList()
{
$m = M('Class');
$data = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>0))->select();
if(!empty($data))
{
foreach($data as $k=>$v)
{
$data[$k]['item'] = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>$v['id']))->select();
}
}
return $data;
}
/**
* [GetRoomList 获取教室列表,二级]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-30T13:26:00+0800
* @return [array] [班级列表]
*/
protected function GetRoomList()
{
$m = M('Room');
$data = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>0))->select();
if(!empty($data))
{
foreach($data as $k=>$v)
{
$data[$k]['item'] = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>$v['id']))->select();
}
}
return $data;
}
/**
* [GetLayoutList 获取布局-模块列表]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-22T10:15:40+0800
* @param [string] $type [布局类型(home, channel, detail)]
* @return [array] [布局+模块数据]
*/
protected function GetLayoutList($type = 'home')
{
// 布局+模块列表
$data = M('Layout')->field(array('id', 'value'))->where(array('is_enable'=>1, 'type'=>$type))->order('sort asc, id desc')->select();
if(!empty($data))
{
// 布局模块处理驱动
$lay = \My\LayoutModule::SetInstance();
// 开始处理布局数据
foreach($data as $k=>$v)
{
// 模块
$item = M('LayoutModule')->where(array('layout_id'=>$v['id']))->select();
if(!empty($item))
{
foreach($item as $ik=>$iv)
{
// 获取文章数据
$article = LayoutArticleList($lay->GetLayoutMouleWhere($iv), $iv);
// 模块数据生成
$fun = GetViewTitleStyleFun($iv['title_style']);
if(method_exists($lay, $fun))
{
$html = $lay->$fun($article, $iv);
$iv = $lay->GetRules();
} else {
$html = '';
}
// 重新赋值
$item[$ik] = $html;
// 模板赋值
$this->assign('data_'.$iv['id'], $article);
$this->assign('rules_'.$iv['id'], $iv);
}
}
$data[$k]['item'] = $item;
}
}
return $data;
}
/**
* [GetBrowserSeoTitle 获取浏览器seo标题]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-25T14:21:21+0800
* @param [string] $title [标题]
* @param [int] $type [页面类型 0, 1, 2]
* @return [string] [浏览器seo标题]
*/
protected function GetBrowserSeoTitle($title, $type)
{
switch($type)
{
case 0:
break;
case 1:
$site_name = MyC('home_site_name');
break;
default:
$site_name = MyC('home_seo_site_title');
}
return empty($title) ? $site_name : $title.' - '.$site_name;
}
/**
* [_empty 空方法操作]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-25T15:47:50+0800
* @param [string] $name [方法名称]
*/
protected function _empty($name)
{
$this->assign('msg', L('common_unauthorized_access'));
$this->assign('is_footer', 0);
$this->display('/Public/Error');
}
/**
* [SiteStateCheck 站点状态校验]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-25T21:43:07+0800
*/
private function SiteStateCheck()
{
if(MyC('home_site_state') == 0)
{
$this->assign('msg', MyC('home_site_close_reason', L('common_site_maintenance_tips'), true));
$this->assign('is_footer', 0);
$this->display('/Public/Error');
exit;
}
}
/**
* [CommonIsImaVerify 是否开启图片验证码校验]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-03-22T15:48:31+0800
* @param [array] $verify_param [配置参数]
* @return [object] [图片验证码类对象]
*/
protected function CommonIsImaVerify($verify_param)
{
if(MyC('home_img_verify_state') == 1)
{
if(empty($_POST['verify']))
{
$this->ajaxReturn(L('common_param_error'), -10);
}
$verify = new \My\Verify($verify_param);
if(!$verify->CheckExpire())
{
$this->ajaxReturn(L('common_verify_expire'), -11);
}
if(!$verify->CheckCorrect(I('verify')))
{
$this->ajaxReturn(L('common_verify_error'), -12);
}
return $verify;
}
}
/**
* [CommonVerifyEntry 验证码显示]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-03-05T15:10:21+0800
* @param [string] $type [验证码类型]
*/
protected function CommonVerifyEntry($type = 'schoolcms')
{
$param = array(
'width' => 100,
'height' => 32,
'key_prefix' => $type,
);
$verify = new \My\Verify($param);
$verify->Entry();
}
/**
* [UserLoginRecord 用户登录记录]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-03-09T11:37:43+0800
* @param [int] $user_id [用户id]
* @return [boolean] [记录成功true, 失败false]
*/
protected function UserLoginRecord($user_id = 0)
{
if(!empty($user_id))
{
$field = array('id', 'mobile', 'email', 'nickname', 'gender', 'signature', 'describe', 'birthday', 'add_time', 'upd_time');
$user = M('User')->field($field)->find($user_id);
if(!empty($user))
{
// 基础数据处理
$user['add_time_text'] = date('Y-m-d H:i:s', $user['add_time']);
$user['upd_time_text'] = date('Y-m-d H:i:s', $user['upd_time']);
$user['gender_text'] = L('common_gender_list')[$user['gender']]['name'];
$user['birthday_text'] = empty($user['birthday']) ? '' : date('Y-m-d', $user['birthday']);
$user['mobile_security']= empty($user['mobile']) ? '' : substr($user['mobile'], 0, 3).'***'.substr($user['mobile'], -3);
$user['email_security'] = empty($user['email']) ? '' : substr($user['email'], 0, 3).'***'.substr($user['email'], -3);
// 存储session
$_SESSION['user'] = $user;
return !empty($_SESSION['user']);
}
}
return false;
}
/**
* 获取大分类
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-10
* @desc description
*/
protected function GetCommonGoodsCategory()
{
$data = $this->GetGoodsCategoryList(0);
if(!empty($data))
{
$images_host = C('IMAGE_HOST');
foreach($data as &$v)
{
$v['items'] = $this->GetGoodsCategoryList($v['id']);
if(!empty($v['items']))
{
foreach($v['items'] as &$vs)
{
$vs['items'] = $this->GetGoodsCategoryList($vs['id']);
}
}
}
}
return $data;
}
/**
* 根据pid获取商品分类列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-10
* @desc description
* @param integer $pid [description]
*/
protected function GetGoodsCategoryList($pid = 0)
{
$images_host = C('IMAGE_HOST');
$field = 'id,pid,icon,name,vice_name,describe,bg_color,big_images,sort';
$data = M('GoodsCategory')->field($field)->where(['is_enable'=>1, 'pid'=>$pid])->order('sort asc')->select();
if(!empty($data))
{
foreach($data as &$v)
{
$v['icon'] = empty($v['icon']) ? null : $images_host.$v['icon'];
$v['big_images'] = empty($v['big_images']) ? null : $images_host.$v['big_images'];
}
}
return $data;
}
/**
* 获取商品列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-10
* @desc description
* @param array $params [ 输入参数: where, field, is_photo ]
*/
protected function GetCommonGoodsList($params = [])
{
$where = empty($params['where']) ? [] : $params['where'];
$field = empty($params['field']) ? 'g.*' : $params['field'];
$is_photo = (isset($params['is_photo']) && $params['is_photo'] == true) ? true : false;
$data = M('Goods')->alias('g')->join(' INNER JOIN __GOODS_CATEGORY_JOIN__ AS gci ON g.id=gci.goods_id') ->field($field)->where($where)->order('g.id desc')->select();
if(!empty($data))
{
$images_host = C('IMAGE_HOST');
foreach($data as &$v)
{
if(isset($v['images']))
{
$v['images'] = empty($v['images']) ? null : $images_host.$v['images'];
}
if(isset($v['home_recommended_images']))
{
$v['home_recommended_images'] = empty($v['home_recommended_images']) ? null : $images_host.$v['home_recommended_images'];
}
// 获取相册
if($is_photo && !empty($v['id']))
{
$v['photo'] = M('GoodsPhoto')->where(['goods_id'=>$v['id'], 'is_show'=>1])->order('sort asc')->getField('images', true);
if(!empty($v['photo']))
{
foreach($v['photo'] as &$vs)
{
$vs = $images_host.$vs;
}
}
}
}
}
return $data;
}
/**
* 获取商品分类下的所有分类id
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-10
* @desc description
* @param [type] $category_id [商品分类ID]
*/
protected function GetCommonGoodsCategoryItemsIds($category_id)
{
$data = M('GoodsCategory')->where(['pid'=>$category_id, 'is_enable'=>1])->getField('id', true);
if(!empty($data))
{
foreach($data as $v)
{
$temp = $this->GetCommonGoodsCategoryItemsIds($v);
if(!empty($temp))
{
$data = array_merge($data, $temp);
}
}
}
return $data;
}
}
?>