常用php函数
2024-11-24 18:44:24
<?php
/**
* 格式化多文件数组
*/
function dr_get_files($value) {
$data = array();
$value = dr_string2array($value);
if (!$value) {
return $data;
} elseif (!isset($value['file'])) {
return $value;
}
foreach ($value['file'] as $i => $file) {
$data[] = array(
'file' => $file, // 对应文件或附件id
'title' => $value['title'][$i] // 对应标题描述
);
}
return $data;
}
// rp函数
function dr_rp($str, $o, $t) {
return str_replace($o, $t, $str);
}
/**
* 静态生成时权限认证字符(加密)
*/
function dr_html_auth($is = 0) {
$file = WEBPATH.'cache/templates/'.md5($_SERVER['HTTP_USER_AGENT']).'.auth';
if ($is) {
// 存储值
return @file_put_contents($file, SYS_TIME);
} else {
// 读取判断
$time = (int)file_get_contents($file);
if (SYS_TIME - $time <= 10000) {
return 1; // 3小时有效
} else {
return 0;
}
}
}
// 帮助手册
function dr_help_url($id) {
return 'http://help.poscms.net/'.$id.'.html';
}
// 翻译入口
function baidu_translate($query, $from, $to)
{
$args = array(
'q' => $query,
'appid' => BAIDU_FANYI_ID,
'salt' => rand(10000,99999),
'from' => $from,
'to' => $to,
);
$args['sign'] = baidu_buildSign($query, BAIDU_FANYI_ID, $args['salt'], BAIDU_FANYI_KEY);
$ret = baidu_call('http://api.fanyi.baidu.com/api/trans/vip/translate', $args);
$ret = json_decode($ret, true);
return $ret;
}
//加密
function baidu_buildSign($query, $appID, $salt, $secKey)
{/*{{{*/
$str = $appID . $query . $salt . $secKey;
$ret = md5($str);
return $ret;
}/*}}}*/
//发起网络请求
function baidu_call($url, $args=null, $method="post", $testflag = 0, $timeout = CURL_TIMEOUT, $headers=array())
{/*{{{*/
$ret = false;
$i = 0;
while($ret === false)
{
if($i > 1)
break;
if($i > 0)
{
sleep(1);
}
$ret = baidu_callOnce($url, $args, $method, false, $timeout, $headers);
$i++;
}
return $ret;
}/*}}}*/
function baidu_callOnce($url, $args=null, $method="post", $withCookie = false, $timeout = CURL_TIMEOUT, $headers=array())
{/*{{{*/
$ch = curl_init();
if($method == "post")
{
$data = baidu_convert($args);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_POST, 1);
}
else
{
$data = baidu_convert($args);
if($data)
{
if(stripos($url, "?") > 0)
{
$url .= "&$data";
}
else
{
$url .= "?$data";
}
}
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(!empty($headers))
{
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
if($withCookie)
{
curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
}
$r = curl_exec($ch);
curl_close($ch);
return $r;
}/*}}}*/
function baidu_convert(&$args)
{/*{{{*/
$data = '';
if (is_array($args))
{
foreach ($args as $key=>$val)
{
if (is_array($val))
{
foreach ($val as $k=>$v)
{
$data .= $key.'['.$k.']='.rawurlencode($v).'&';
}
}
else
{
$data .="$key=".rawurlencode($val)."&";
}
}
return trim($data, "&");
}
return $args;
}/*}}}*/
function dr_baidu_fanyi($string) {
if (SITE_LANGUAGE == 'zh-cn') {
return $string;
}
return get_instance()->baidu_fanyi($string);
}
/**
* 多语言输出
*
* @param 多个参数
* @return string|NULL
*/
function fc_lang() {
$param = func_get_args();
if (empty($param)) {
return NULL;
}
// 取第一个作为语言名称
$string = $param[0];
unset($param[0]);
// 调用语言包内容
$lang = get_instance()->lang->line($string);
$string = $lang ? $lang : $string;
// 替换
$string = get_instance()->replace_lang($string);
$string = $param ? vsprintf($string, $param) : $string;
if (BAIDU_FANYI_ID) {
return dr_baidu_fanyi($string);
}
return $string;
}
/**
* 多语言输出
*
* @param 多个参数
* @return string|NULL
*/
function dr_lang() {
$param = func_get_args();
if (empty($param)) {
return NULL;
}
if (count($param) == 1) {
$string = lang($param[0]);
if (BAIDU_FANYI_ID) {
return dr_baidu_fanyi($string);
}
return $string;
}
// 取第一个作为语言名称
$string = $param[0];
unset($param[0]);
$string = vsprintf(lang($string), $param);
if (BAIDU_FANYI_ID) {
return dr_baidu_fanyi($string);
}
//
return $string;
}
/**
* 网站风格目录
*
* @return string|NULL
*/
function dr_get_theme() {
if (!function_exists('dr_dir_map')) {
return array('default');
}
return array_diff(dr_dir_map(WEBPATH.'statics/', 1), array('avatar', 'admin', 'comment', 'emotions', 'js', 'oauth', 'watermark', 'space'));
}
/*********************以上为兼容函数(兼容v3 Larval框架结构算法)*******************/
/**
* 模块评论js调用
*
* @param intval $id
* @return string
*/
function dr_module_comment($dir, $id) {
$url = SITE_URL."index.php?s=".$dir."&c=comment&m=index&r=1&id={$id}&js=dr_ajax_module_comment_{$id}";
return "<div id=\"dr_module_comment_{$id}\"></div><script type=\"text/javascript\">
function dr_ajax_module_comment_{$id}(type, page) {
$.ajax({type: \"GET\", url: \"{$url}&type=\"+type+\"&page=\"+page+\"&\"+Math.random(), dataType:\"jsonp\",
success: function (data) {
$(\"#dr_module_comment_{$id}\").html(data.html);
}
});
}
dr_ajax_module_comment_{$id}(0, 1);
</script>";
}
/**
* 模块扩展评论js调用
*
* @param intval $id
* @return string
*/
function dr_extend_comment($dir, $id) {
$url = SITE_URL."index.php?s=".$dir."&c=ecomment&m=index&r=1&id={$id}&js=dr_ajax_extend_comment_{$id}";
return "<div id=\"dr_extend_comment_{$id}\"></div><script type=\"text/javascript\">
function dr_ajax_extend_comment_{$id}(type, page) {
$.ajax({type: \"GET\", url: \"{$url}&type=\"+type+\"&page=\"+page+\"&\"+Math.random(), dataType:\"jsonp\",
success: function (data) {
$(\"#dr_extend_comment_{$id}\").html(data.html);
}
});
}
dr_ajax_extend_comment_{$id}(0, 1);
</script>";
}
/**
* 获取6位数字随机验证码
*/
function dr_randcode() {
return rand(100000, 999999);
}
/**
* 获取镜像下载地址
*
* @param string $name 字段名称
* @param intval $value 文件id
* @param string $dirname 模块目录
* @param intval $catid 栏目id
* @return array
*/
function dr_down_server($name, $value, $dirname = APP_DIR) {
if (!is_numeric($value)) {
return array();
}
$file = get_attachment($value);
$file = $file['_attachment'];
$server = array();
$module = get_module($dirname, SITE_ID);
if ($module['field'][$name]) {
$server = $module['field'][$name]['setting']['option']['server'];
} elseif ($module['extend'][$name]) {
$server = $module['extend'][$name]['setting']['option']['server'];
}
if (!$server) {
return array();
}
$ci = &get_instance();
$data = $ci->get_cache('downservers');
if (!$data) {
return array();
}
$return = array();
foreach ($server as $id) {
$return[] = array(
'name' => $data[$id]['name'],
'url' => trim($data[$id]['server'], '/').'/'.$file
);
}
return $return;
}
/**
* 删除目录及目录下面的所有文件
*
* @param string $dir 路径
* @return bool 如果成功则返回 TRUE,失败则返回 FALSE
*/
function dr_dir_delete($dir) {
$dir = str_replace('\\', '/', $dir);
if (substr($dir, -1) != '/') {
$dir = $dir . '/';
}
if (!is_dir($dir)) {
return FALSE;
}
$list = glob($dir . '*');
foreach ($list as $v) {
is_dir($v) ? dr_dir_delete($v) : @unlink($v);
}
return @rmdir($dir);
}
/**
* discuz加密/解密
*/
function dr_authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
if (!$string) {
return '';
}
$ckey_length = 4;
$key = md5(SYS_KEY);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya . md5($keya . $keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('0d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for ($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for ($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for ($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result.= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if ($operation == 'DECODE') {
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc . str_replace('=', '', base64_encode($result));
}
}
/**
* 统计模块表单数量
*
* @param intval $cid 模块内容id
* @param intval $mid 模块表单id
* @param string $module 模块目录
* @param intval $cache 缓存时间
* @return string
*/
function dr_mform_total($cid, $mid, $module = APP_DIR, $cache = 10000) {
$ci = &get_instance();
$name = 'mform-total-'.$module.'-'.$mid.'-'.$cid;
$data = $ci->get_cache_data($name);
if (!$data) {
$data = $ci->db->where('cid', (int)$cid)->count_all_results(SITE_ID.'_'.$module.'_form_'.$mid);
$ci->set_cache_data($name, $data, $cache ? $cache : 10000);
}
return $data;
}
function dr_array2array($a1, $a2) {
if (!$a1 || !$a2) {
return array();
} elseif ($a1 && !$a2) {
return $a1;
} elseif (!$a1 && $a2) {
return $a2;
}
return array_merge($a1, $a2);
}
/**
* 两数组覆盖合并
*/
function dr_array22array($a1, $a2) {
$a = array();
$a = $a1 ? $a1 : $a;
if ($a2) {
foreach ($a2 as $i => $t) {
$a[$i] = $t;
}
}
return $a;
}
/**
* 调用模块的评论数
*
* @param intval $dir 目录
* @param intval $cid 主题id
* @return string
*/
function dr_module_comment_total($dir, $cid, $name = 0) {
$ci = &get_instance();
$name = 'module-comment-total-'.$cid.$dir;
$data = $ci->get_cache_data($name);
if (!$data) {
$ci->load->model('comment_model');
$ci->comment_model->module($dir);
$data = $ci->comment_model->total_info($cid);
$ci->set_cache_data($name, $data, (int)SYS_CACHE_COMMENT);
}
return $name ? (isset($data[$name]) ? $data[$name] : '') : '';
}
/**
* 调用模块扩展的评论数
*
* @param intval $dir 目录
* @param intval $cid 主题id
* @param intval $cache 缓存时间
* @return string
*/
function dr_extend_comment_total($dir, $cid, $name = 0) {
$ci = &get_instance();
$name = 'extend-comment-total-'.$cid.$dir;
$data = $ci->get_cache_data($name);
if (!$data) {
$ci->load->model('comment_model');
$ci->comment_model->extend($dir);
$data = $ci->comment_model->total_info($cid);
$ci->set_cache_data($name, $data, (int)SYS_CACHE_COMMENT);
}
return $name ? (isset($data[$name]) ? $data[$name] : '') : '';
}
/**
* 调用会员详细信息(自定义字段需要手动格式化)
*
* @param intval $uid 会员uid
* @param intval $cache 缓存时间
* @return string
*/
function dr_member_info($uid, $cache = -1) {
$ci = &get_instance();
$data = $ci->get_cache_data('member-info-'.$uid);
if (!$data) {
$data = $ci->member_model->get_member($uid);
$ci->set_cache_data('member-info-'.$uid, $data, $cache > 0 ? $cache : SYS_CACHE_MEMBER);
}
return $data;
}
/**
* 调用会员实名认证信息(自定义字段需要手动格式化)
*
* @param intval $uid 会员uid
* @param intval $cache 缓存时间
* @return string
*/
function dr_member_auth($uid, $cache = -1) {
$ci = &get_instance();
$data = $ci->get_cache_data('member-auth-'.$uid);
if (!$data) {
$data = $ci->db->where('uid', $uid)->get('member_auth')->row_array();
if (!$data) {
return array();
}
$ci->set_cache_data('member-auth-'.$uid, $data, $cache > 0 ? $cache : SYS_CACHE_MEMBER);
}
return $data;
}
/**
* 获取到上级邀请者的信息
*
* @param intval $uid 我的uid
* @param string $name 字段信息
* @return
*/
function dr_get_invite($uid, $name = 'uid') {
if (!dr_is_app('invite')) {
return '';
}
$ci = &get_instance();
$data = $ci->db->where('rid', $uid)->get('member_invite')->row_array();
return $data[$name] ? $data[$name] : '';
}
/**
* 调用会员空间详细信息(自定义字段需要手动格式化)
*
* @param intval $uid 会员uid
* @param intval $cache 缓存时间
* @return string
*/
function dr_space_info($uid, $cache = -1) {
if (!MEMBER_OPEN_SPACE) {
return '';
}
$ci = &get_instance();
$data = $ci->get_cache_data('space-info-'.$uid);
if (!$data) {
$data = $ci->db->where('uid', $uid)->limit(1)->get('space')->row_array();
if (!$data) {
return NULL;
}
$data['url'] = dr_space_url($uid);
$ci->set_cache_data('space-info-'.$uid, $data, $cache > 0 ? $cache : SYS_CACHE_MEMBER);
}
return $data;
}
/**
* 调用会员SNS的详细信息
*
* @param intval $uid 会员uid
* @param intval $cache 缓存时间
* @return string
*/
function dr_sns_info($uid, $cache = -1) {
if (!MEMBER_OPEN_SPACE) {
return '';
}
$ci = &get_instance();
$data = $ci->get_cache_data('sns-info-'.$uid);
if (!$data) {
$data = $ci->member_model->get_sns($uid);
$ci->set_cache_data('sns-info-'.$uid, $data, $cache > 0 ? $cache : SYS_CACHE_MEMBER);
}
return $data;
}
/**
* 模块内容收费内容js调用
*
* @param intval $id
* @return string
*/
function dr_show_buy($id) {
$url = SITE_URL."index.php?s=".MOD_DIR."&c=api&m=buy&id={$id}";
return "<div id=\"dr_buy_html_{$id}\"></div><script type=\"text/javascript\">
$.ajax({type: \"GET\", url: \"{$url}&\"+Math.random(), dataType:\"jsonp\",
success: function (data) {
$(\"#dr_buy_html_{$id}\").html(data.html);
}
});
</script>";
}
/**
* 模块扩展内容收费内容js调用
*
* @param intval $id
* @return string
*/
function dr_extend_buy($eid) {
$url = SITE_URL."index.php?s=".MOD_DIR."&c=api&m=buy&eid={$eid}";
return "<div id=\"dr_buy_html_{$eid}\"></div><script type=\"text/javascript\">
$.ajax({type: \"GET\", url: \"{$url}&\"+Math.random(), dataType:\"jsonp\",
success: function (data) {
$(\"#dr_buy_html_{$eid}\").html(data.html);
}
});
</script>";
}
/**
* 检测会员在线情况
*/
function dr_member_online($uid, $type) {
return "<script type=\"text/javascript\" src=\"".SITE_URL."index.php?s=member&c=api&m=online&uid={$uid}&type={$type}\"></script>";
}
/**
* 用于视频播放器字段输出
*
* @param array $value 字段值
* @param intval $width 宽度
* @param intval $height 高度
* @param intval $auto 是否自动播放
* @param intval $time 是否显示广告,值为广告倒计时
* @param string $next_url 下一集url
* @param string $thumb 视频分享图片
* @return array
*/
function dr_player($value, $width, $height, $auto = 0, $time = 5, $next_url = '', $thumb = '') {
if (!is_array($value)) {
$value = dr_string2array($value);
}
$name = md5($value['file']);
$file = dr_get_file($value['file']);
$width = $width ? $width : '100%';
$height = $height ? $height : '100%';
// 模板数据
$data = array(
'file' => $file,
'name' => $name,
'width' => $width,
'height' => $height,
'next_url' => $next_url,
'thumb' => dr_get_file($thumb),
'server_url' => SITE_URL.'api/ckplayer/',
'params' => '',
);
// 自动播放
$data['params'].='p:\''.$auto.'\','.PHP_EOL;
// 下一集
if (!$next_url) {
$data['params'].='e:\'5\','.PHP_EOL;
} else {
$data['params'].='e:\'0\','.PHP_EOL;
}
// 解析地址
$data['params'].=' f:\''.$file.'\','.PHP_EOL;
// 定时点处理
if ($value['point']) {
$k = $n = '';
foreach ($value['point'] as $i => $note) {
$k.= $i.'|';
$n.= $note.'|';
}
$data['params'].=' k:\''.trim($k, '|').'\','.PHP_EOL;
$data['params'].=' n:\''.trim($n, '|').'\',';
}
// 广告效果
if ($time) {
$ci = &get_instance();
$video = $ci->get_cache('poster-video-'.SITE_ID);
if ($video && dr_is_app('adm')) {
$ci->load->add_package_path(FCPATH.'app/adm/');
$ci->load->model('poster_model');
$poster = $ci->poster_model->poster($video);
if ($poster) {
$value = dr_string2array($poster['value']);
$ad = array(
'url' => urlencode($ci->poster_model->get_url($poster['id'])),
'file' => dr_get_file($value['file']),
);
// 前置广告
$data['params'].=' l:\''.$ad['file'].'\','.PHP_EOL;
$data['params'].=' t:\''.$time.'\','.PHP_EOL;
$data['params'].=' r:\''.$ad['url'].'\','.PHP_EOL;
// 暂停广告
$data['params'].=' d:\''.$ad['file'].'\','.PHP_EOL;
$data['params'].=' u:\''.$ad['url'].'\','.PHP_EOL;
}
}
}
// 引入JS
if (!defined('CKPLAYER_JS')) {
define('CKPLAYER_JS', 1);
$data['js_code'] = '<script type="text/javascript" src="'.SITE_URL.'index.php?c=api&m=ckplayer&at=js"></script>';
$data['js_code'].= '<script type="text/javascript" src="'.$data['server_url'].'config/offlights.js" charset="utf-8"></script>';
$data['js_code'].= '<script type="text/javascript" src="'.$data['server_url'].'ckplayer.js" charset="utf-8"></script>';
}
$code = file_get_contents(WEBPATH.'api/ckplayer/config/code.html');
// 兼容php5.5
if (version_compare(PHP_VERSION, '5.5.0') >= 0) {
$rep = new php5replace($data);
$code = preg_replace_callback('#{([a-z_0-9]+)}#U', array($rep, 'php55_replace_data'), $code);
unset($rep);
} else {
extract($data);
$code = preg_replace('#{([a-z_0-9]+)}#Ue', "\$\\1", $code);
}
return $code;
}
/**
* 验证码图片获取
*/
function dr_code($width, $height, $url = '') {
$url = '/index.php?c=api&m=captcha&width='.$width.'&height='.$height;
return '<img align="absmiddle" style="cursor:pointer;" onclick="this.src=\''.$url.'&\'+Math.random();" src="'.$url.'" />';
}
/**
* 排序操作
*/
function ns_sorting($name) {
$value = $_GET['order'] ? $_GET['order'] : '';
if (!$value) {
return 'sorting';
}
if (strpos($value, $name) === 0 && strpos($value, 'asc') !== FALSE) {
return 'sorting_asc';
} elseif (strpos($value, $name) === 0 && strpos($value, 'desc') !== FALSE) {
return 'sorting_desc';
}
return 'sorting';
}
/**
* 移除order字符串
*/
function dr_member_order($url) {
$data = @explode('&', $url);
if ($data) {
foreach ($data as $t) {
if (strpos($t, 'order=') === 0) {
$url = str_replace('&' . $t, '', $url);
} elseif (strpos($t, 'action=') === 0) {
$url = str_replace('&' . $t, '', $url);
}
}
}
return $url;
}
/**
* 统计图表调用
*/
function dr_chart($file, $width, $height) {
}
/**
* 视频文件地址
*/
function dr_get_video_url($value) {
if (!is_array($value)) {
$value = dr_string2array($value);
}
if (isset($value['file'])) {
return dr_get_file($value['file']);
}
return '';
}
/**
* 百度地图调用
*/
function dr_baidu_map($value, $zoom = 5, $width = 600, $height = 400) {
if (!$value) {
return NULL;
}
$id = 'dr_map_'.rand(0, 99);
$width = $width ? $width : '100%';
list($lngX, $latY) = explode(',', $value);
return '<script type=\'text/javascript\' src=\'http://api.map.baidu.com/api?v=1.4\'></script>
<div id="' . $id . '" style="width:' . $width . 'px; height:' . $height . 'px; overflow:hidden"></div>
<script type="text/javascript">
var mapObj=null;
lngX = "' . $lngX . '";
latY = "' . $latY . '";
zoom = "' . $zoom . '";
var mapObj = new BMap.Map("'.$id.'");
var ctrl_nav = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
mapObj.addControl(ctrl_nav);
mapObj.enableDragging();
mapObj.enableScrollWheelZoom();
mapObj.enableDoubleClickZoom();
mapObj.enableKeyboard();//启用键盘上下左右键移动地图
mapObj.centerAndZoom(new BMap.Point(lngX,latY),zoom);
drawPoints();
function drawPoints(){
var myIcon = new BMap.Icon("' . THEME_PATH . 'admin/images/mak.png", new BMap.Size(27, 45));
var center = mapObj.getCenter();
var point = new BMap.Point(lngX,latY);
var marker = new BMap.Marker(point, {icon: myIcon});
mapObj.addOverlay(marker);
}
</script>';
}
/**
* 任意字段的选项值(用于options参数的字段,如复选框、下拉选择框、单选按钮)
*
* @param intval $id
* @return array
*/
function dr_field_options_id($id, $name = '') {
$id = (int)$id;
if (!$id) {
return NULL;
}
$ci = &get_instance();
$data = $ci->get_cache_data('field-info-'.$id);
if (!$data) {
$data = $ci->db->where('id', $id)->get('field')->row_array();
if (!$data) {
return NULL;
}
$data['setting'] = dr_string2array($data['setting']);
$option = $data['setting']['option']['options'];
if (!$option) {
return NULL;
}
$data = explode(
PHP_EOL,
str_replace(
array(chr(13), chr(10)),
PHP_EOL,
$option
)
);
$return = array();
foreach ($data as $t) {
if ($t) {
if (strpos($t, '|') !== FALSE) {
list($n, $v) = explode('|', $t);
$v = is_null($v) || !strlen($v) ? '' : trim($v);
} else {
$v = $n = trim($t);
}
$return[$v] = trim($n);
}
}
$ci->set_cache_data('field-info-'.$id, $return, 10000);
return $return;
}
return $name && isset($data[$name]) ? $data[$name] : $data;
}
/**
* 模块字段的选项值(用于options参数的字段,如复选框、下拉选择框、单选按钮)
*
* @param string $name
* @param intval $catid
* @param string $dirname
* @return array
*/
function dr_field_options($name, $catid = 0, $dirname = MOD_DIR) {
if (!$name) {
return NULL;
}
$module = get_module($dirname, SITE_ID);
if (!$module) {
return NULL;
}
$field = $catid && isset($module['category'][$catid]['field'][$name]) ? $module['category'][$catid]['field'][$name] : $module['field'][$name];
if (!$field) {
return NULL;
}
$option = $field['setting']['option']['options'];
if (!$option) {
return NULL;
}
$data = explode(
PHP_EOL,
str_replace(
array(chr(13), chr(10)),
PHP_EOL,
$option
)
);
$return = array();
foreach ($data as $t) {
if ($t) {
if (strpos($t, '|') !== FALSE) {
list($n, $v) = explode('|', $t);
$v = is_null($v) || !strlen($v) ? '' : trim($v);
} else {
$v = $n = trim($t);
}
$return[$v] = trim($n);
}
}
return $return;
}
/**
* 会员字段的选项值(用于options参数的字段,如复选框、下拉选择框、单选按钮)
*
* @param string $name
* @param intval $catid
* @param string $dirname
* @return array
*/
function dr_member_field_options($name) {
if (!$name) {
return NULL;
}
$ci = &get_instance();
$field = $ci->get_cache('member', 'field', $name);
if (!$field) {
return NULL;
}
$option = $field['setting']['option']['options'];
if (!$option) {
return NULL;
}
$data = explode(
PHP_EOL,
str_replace(
array(chr(13), chr(10)),
PHP_EOL,
$option
)
);
$return = array();
foreach ($data as $t) {
if ($t) {
if (strpos($t, '|') !== FALSE) {
list($n, $v) = explode('|', $t);
$v = is_null($v) || !strlen($v) ? '' : trim($v);
} else {
$v = $n = trim($t);
}
$return[$v] = trim($n);
}
}
return $return;
}
/**
* 空间字段的选项值(用于options参数的字段,如复选框、下拉选择框、单选按钮)
*
* @param string $name
* @param intval $catid
* @param string $dirname
* @return array
*/
function dr_space_field_options($name) {
if (!$name) {
return NULL;
}
$ci = &get_instance();
$field = $ci->get_cache('member', 'spacefield', $name);
if (!$field) {
return NULL;
}
$option = $field['setting']['option']['options'];
if (!$option) {
return NULL;
}
$data = explode(
PHP_EOL,
str_replace(
array(chr(13), chr(10)),
PHP_EOL,
$option
)
);
$return = array();
foreach ($data as $t) {
if ($t) {
if (strpos($t, '|') !== FALSE) {
list($n, $v) = explode('|', $t);
$v = is_null($v) || !strlen($v) ? '' : trim($v);
} else {
$v = $n = trim($t);
}
$return[$v] = trim($n);
}
}
return $return;
}
/**
* 资料块内容
*
* @param intval $id
* @return array
*/
function dr_block($id, $type = 0, $site = 0) {
$ci = &get_instance();
$site = $site ? $site : SITE_ID;
return $ci->get_cache('block-'.$site, $id, $type);
}
/**
* 输出广告
*
* @param intval $id
* @return array
*/
function dr_poster($id) {
if (!dr_is_app('adm')) {
return;
}
$ci = &get_instance();
$ci->load->add_package_path(FCPATH.'app/adm/');
$ci->load->model('poster_model');
return $ci->poster_model->code($id);
}
/**
* 输出广告列表
*
* @param intval $id
* @return array
*/
function dr_poster_list($id, $all = 99) {
if (!dr_is_app('adm')) {
return;
}
$ci = &get_instance();
$ci->load->add_package_path(FCPATH.'app/adm/');
$ci->load->model('poster_model');
$data = $ci->poster_model->poster($id, $all ? $all : 1);
if (!$data) {
return array();
}
$r = array();
foreach ($data as $t) {
$v = dr_string2array($t['value']);
$r[] = array(
'name' => $t['name'],
'file' => dr_get_file($v['file']),
'url' => $ci->poster_model->get_url($t['id']),
);
}
return $r;
}
/**
* 联动菜单调用
*
* @param string $code 菜单代码
* @param intval $id 菜单id
* @param intval $level 调用级别,1表示顶级,2表示第二级,等等
* @param string $name 菜单名称,如果有显示它的值,否则返回数组
* @return array
*/
function dr_linkage($code, $id, $level = 0, $name = '') {
if (!$id) {
return false;
}
$ci = &get_instance();
$link = $ci->get_cache('linkage-'.SITE_ID.'-'.$code);
$cids = $ci->get_cache('linkage-'.SITE_ID.'-'.$code.'-id');
if (is_numeric($id)) {
// id 查询
$id = $cids[$id];
$data = $link[$id];
} else {
// 别名查询
$data = $link[$id];
}
$pids = @explode(',', $data['pids']);
if ($level == 0) {
return $name ? $data[$name] : $data;
}
if (!$pids) {
return $name ? $data[$name] : $data;
}
$i = 1;
foreach ($pids as $pid) {
if ($pid) {
$pid = $cids[$pid]; // 把id转化成cname
if ($i == $level) {
return $name ? $link[$pid][$name] : $link[$pid];
}
$i++;
}
}
return $name ? $data[$name] : $data;
}
/**
* 记录信息调用
*
* @param string $string
* @return string
*/
function dr_lang_note($string) {
return $string;
}
/**
* 会员头像
*
* @param intval $uid
* @param string $size
* @return string
*/
function dr_avatar($uid, $size = '45') {
if ($uid) {
if (defined('UCSSO_API')) {
return ucsso_get_avatar($uid);
}
// 判断Ucenter公共头像
$size = $size > 100 ? 180 : $size;
if (defined('UC_API')) {
$data = dr_member_info($uid);
if ($data) {
list($ucenter) = uc_get_user($data['username']);
return UC_API.'/avatar.php?uid='.$ucenter.'&size='.($size == 45 ? 'small' : 'big');
}
} else {
foreach (array('png', 'jpg', 'gif', 'jpeg') as $ext) {
if (is_file(SYS_UPLOAD_PATH.'/member/'.$uid.'/'.$size.'x'.$size.'.'.$ext)) {
return SYS_ATTACHMENT_URL.'member/'.$uid.'/'.$size.'x'.$size.'.'.$ext;
}
}
}
}
return $size == 45 ? THEME_PATH.'admin/images/avatar_45.png' : THEME_PATH.'admin/images/avatar_90.png';
}
/**
* 是否是一个有效的应用
*
* @param string $name
* @return bool
*/
function dr_is_app($name) {
$ci = &get_instance();
if (!$name || !is_dir(FCPATH.'app/'.$name)) {
return FALSE;
} elseif (@in_array($name, $ci->get_cache('app'))) {
return TRUE;
} else {
return FALSE;
}
}
/**
* 显示星星
*
* @param intval $num
* @param intval $starthreshold 星星数在达到此阈值(设为 N)时,N 个星星显示为 1 个月亮、N 个月亮显示为 1 个太阳。
* @return string
*/
function dr_show_stars($num, $starthreshold = 4) {
$str = '';
$alt = 'alt="Rank: '.$num.'"';
for ($i = 3; $i > 0; $i--) {
$numlevel = intval($num / pow($starthreshold, ($i - 1)));
$num = ($num % pow($starthreshold, ($i - 1)));
for ($j = 0; $j < $numlevel; $j++) {
$str.= '<img align="absmiddle" src="'.THEME_PATH.'admin/images/star_level'.$i.'.gif" '.$alt.' />';
}
}
return $str;
}
/**
* 模块内容阅读量显示js
*
* @param intval $id
* @return string
*/
function dr_show_hits($id, $dir = MOD_DIR) {
return "<span id=\"dr_show_hits_{$id}\">0</span><script type=\"text/javascript\">
$.ajax({
type: \"GET\",
url:\"".SITE_URL."index.php?c=api&m=hits&module=".$dir."&id={$id}\",
dataType: \"jsonp\",
success: function(data){
$(\"#dr_show_hits_{$id}\").html(data.html);
},
error: function(){ }
});
</script>";
}
/**
* 模块内容阅读量显示js
*
* @param intval $id
* @return string
*/
function dr_extend_hits($id, $dir = MOD_DIR) {
return "<span id=\"dr_extend_hits_{$id}\">0</span><script type=\"text/javascript\">
$.ajax({
type: \"GET\",
async: false,
url:\"".SITE_URL."index.php?c=api&m=ehits&module=".$dir."&id={$id}\",
dataType: \"jsonp\",
success: function(data){
$(\"#dr_extend_hits_{$id}\").html(data.html);
},
error: function(){ }
});
</script>";
}
/**
* 模型内容阅读量显示js
*
* @param intval $id
* @return string
*/
function dr_space_show_hits($mid, $id) {
return "<span id=\"dr_space_show_hits_{$id}\">0</span><script type=\"text/javascript\">
$.ajax({
type: \"GET\",
async: false,
url:\"".SITE_URL."index.php?s=member&c=api&m=hits&mid=".$mid."&id={$id}\",
dataType: \"jsonp\",
success: function(data){
$(\"#dr_space_show_hits_{$id}\").html(data.html);
},
error: function(){ }
});
</script>";
}
/**
* 调用远程数据
*
* @param string $url
* @return string
*/
function dr_catcher_data($url) {
// fopen模式
if (ini_get('allow_url_fopen')) {
$data = @file_get_contents($url);
if ($data !== FALSE) {
return $data;
}
}
// curl模式
if (function_exists('curl_init') && function_exists('curl_exec')) {
$ch = curl_init($url);
$data = '';
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
return NULL;
}
/**
* 附件信息
*
* @param intval $id
* @return array
*/
function get_attachment($id) {
if (!$id) {
return NULL;
}
$ci = &get_instance();
$info = $ci->get_cache_data("attachment-{$id}");
if ($info) {
// 附件缓存
return $info;
}
$data = $ci->db->where('id', (int)$id)->get('attachment')->row_array();
if (!$data) {
return NULL;
}
$info = $ci->db->where('id', (int)$id)->get('attachment_'.(int)$data['tableid'])->row_array();
if (!$info) {
// 未使用的文件查找
$info = $ci->db->where('id', (int)$id)->get('attachment_unused')->row_array();
}
if (!$info) {
return NULL;
}
// 合并变量
$info = $data + $info;
$info['_attachment'] = trim($info['attachment'], '/');
// 远程图片
$url = $info['remote'] ? $ci->get_cache('attachment', $data['siteid'], 'data', $info['remote'], 'url') : '';
$info['attachment'] = $url ? $url.'/'.$info['_attachment'] : dr_ck_attach($info['_attachment']);
// 附件属性信息
$attachinfo = dr_string2array($info['attachinfo']);
// 验证图片是否具有高宽属性
if (in_array($info['fileext'], array('jpg', 'gif', 'png'))
&& (!isset($attachinfo['width']) || !$attachinfo['width'])) {
list($attachinfo['width'], $attachinfo['height']) = @getimagesize(dr_file($info['attachment']));
// 更新到数据表
}
unset($info['attachinfo']);
$info = $attachinfo ? $info + $attachinfo : $info;
$ci->set_cache_data("attachment-{$id}", $info, SYS_CACHE_ATTACH); // 保存附件缓存
return $info;
}
function dr_ck_attach($file) {
if (!SYS_UPLOAD_DIR) {
return $file;
} elseif (strpos($file, SYS_UPLOAD_DIR) === 0) {
return trim(str_replace(SYS_UPLOAD_DIR, '', $file), '/');
} elseif (strpos($file, 'member/uploadfile/') === 0) {
return trim(str_replace('member/uploadfile/', '', $file), '/');
} else {
return $file;
}
}
/**
* 调用缩略图函数
*/
function dr_image($id, $size = 0) {
if (IS_FUNC_IMAGE) {
if (!$id) {
return THEME_PATH.'admin/images/nopic.gif';
}
$info = get_attachment($id);
if (!$info) {
return THEME_PATH.'admin/images/nopic.gif';
}
// 远程图片
if (isset($info['remote']) && $info['remote']) {
$file = $info['attachment'];
} else {
$file = SYS_ATTACHMENT_URL.$info['attachment'];
}
if ($size) {
return str_replace(
basename($info['attachment']),
basename($info['attachment'], '.'.$info['fileext']).'_'.$size.'.'.$info['fileext'],
$file
);
} else {
return $file;
}
} else {
return dr_get_file($id);
}
}
/**
* 生成缩略图函数
* @param $img 图片路径
* @param $width 缩略图宽度
* @param $height 缩略图高度
* @param $autocut 是否自动裁剪 默认裁剪,当高度或宽度有一个数值为0是,自动关闭
*/
function dr_thumb2($img, $width = 100, $height = 100, $autocut = 1) {
return dr_thumb($img, $width, $height);
}
/**
* 图片显示
*
* @param string $img 图片id或者路径
* @param intval $width 输出宽度
* @param intval $height 输出高度
* @param intval $water 是否水印
* @param intval $size 缩略图尺寸
* @return url
*/
function dr_thumb($img, $width = NULL, $height = NULL, $water = 0, $size = 0) {
if (!$img) {
return THEME_PATH.'admin/images/nopic.gif';
}
if (is_numeric($img)) { // 表示附件id
$thumb_file = trim(SYS_THUMB_DIR, '/').'/'.md5($img).'/'.dr_safe_filename("$width-$height-$water-$size").'.jpg';
if (is_file(WEBPATH.$thumb_file)) {
return SITE_URL.$thumb_file;
}
$ci = &get_instance();
return $ci->html_thumb("$img-$width-$height-$water-$size");
}
$img = dr_file($img);
return $img ? $img : THEME_PATH.'admin/images/nopic.gif';
}
/**
* 安全过滤文件及目录名称函数
*/
function dr_safe_filename($string) {
return str_replace(
array('..', "/", '\\', ' ', '<', '>', "{", '}', ';', '[', ']'),
'',
$string
);
}
/**
* 下载文件
*
* @param string $id
* @return array
*/
function dr_down_file($id) {
if (!$id) {
return '';
}
if (is_numeric($id)) { // 表示附件id
$info = get_attachment($id);
if ($info) {
return SITE_URL."index.php?s=member&c=api&m=file&id=$id";
}
}
$file = dr_file($id);
return $file ? $file : '';
}
/**
* 文件真实地址
*
* @param string $id
* @return array
*/
function dr_get_file($id) {
if (!$id) {
return '';
}
if (is_numeric($id)) { // 表示附件id
$info = get_attachment($id);
$id = $info['attachment'] ? $info['attachment'] : '';
}
$file = dr_file($id);
return $file ? $file : '';
}
/**
* 完整的文件路径
*
* @param string $url
* @return string
*/
function dr_file($url) {
if (!$url || strlen($url) == 1) {
return NULL;
} elseif (substr($url, 0, 7) == 'http://' || substr($url, 0, 8) == 'https://') {
return $url;
} elseif (strpos($url, SITE_PATH) !== FALSE && SITE_PATH != '/') {
return $url;
} elseif (substr($url, 0, 1) == '/') {
return SITE_PC.substr($url, 1);
}
return SYS_ATTACHMENT_URL . $url;
}
/**
* 全局变量调用
*
* @param string $name 别名
* @return
*/
function dr_var($name) {
return get_instance()->get_cache('sysvar', $name);
}
/**
* 格式化自定义字段内容
*
* @param string $field 字段类型
* @param string $value 字段值
* @param array $cfg 字段配置信息
* @param string $dirname模块目录
* @return
*/
function dr_get_value($field, $value, $cfg = NULL, $dirname = NULL) {
$ci = &get_instance();
$ci->load->library('dfield', array($dirname ? $dirname : MOD_DIR));
$obj = $ci->dfield->get($field);
if (!$obj) {
return $value;
}
return $obj->output($value, $cfg);
}
function dr_is_memcache() {
if (defined('SYS_MEMCACHE') && SYS_MEMCACHE) {
if (class_exists('Memcached', FALSE))
{
return 1;
}
elseif (class_exists('Memcache', FALSE))
{
return 1;
}
}
return 0;
}
/**
* 安全过滤函数
*
* @param $string
* @return string
*/
function dr_safe_replace($string) {
$string = str_replace('%20', '', $string);
$string = str_replace('%20', '', $string);
$string = str_replace('%27', '', $string);
$string = str_replace('%2527', '', $string);
$string = str_replace('*', '', $string);
$string = str_replace('"', '"', $string);
$string = str_replace("'", '', $string);
$string = str_replace('"', '', $string);
$string = str_replace(';', '', $string);
$string = str_replace('<', '<', $string);
$string = str_replace('>', '>', $string);
$string = str_replace("{", '', $string);
$string = str_replace('}', '', $string);
return $string;
}
/**
* 安全list查询过滤函数
*
* @param $string
* @return string
*/
function dr_safe_list_tag($string) {
$string = str_replace(PHP_EOL, '', $string);
$string = str_replace('()', '', $string);
$string = str_replace('**', '', $string);
$string = str_replace('union', '', $string);
$string = str_replace(';', '', $string);
$string = str_replace('#', '', $string);
$string = str_replace('/', '', $string);
return $string;
}
/**
* 字符截取
*
* @param string $str
* @param intval $length
* @param string $dot
* @return string
*/
function dr_strcut($string, $length, $dot = '...') {
$charset = 'utf-8';
if (strlen($string) <= $length) {
return $string;
}
$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
$strcut = '';
if (strtolower($charset) == 'utf-8') {
$n = $tn = $noc = 0;
while ($n < strlen($string)) {
$t = ord($string[$n]);
if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1;
$n++;
$noc++;
} elseif (194 <= $t && $t <= 223) {
$tn = 2;
$n += 2;
$noc += 2;
} elseif (224 <= $t && $t <= 239) {
$tn = 3;
$n += 3;
$noc += 2;
} elseif (240 <= $t && $t <= 247) {
$tn = 4;
$n += 4;
$noc += 2;
} elseif (248 <= $t && $t <= 251) {
$tn = 5;
$n += 5;
$noc += 2;
} elseif ($t == 252 || $t == 253) {
$tn = 6;
$n += 6;
$noc += 2;
} else {
$n++;
}
if ($noc >= $length)
break;
}
if ($noc > $length)
$n -= $tn;
$strcut = substr($string, 0, $n);
} else {
for ($i = 0; $i < $length; $i++) {
$strcut.= ord($string[$i]) > 127 ? $string[$i] . $string[++$i] : $string[$i];
}
}
$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
return $strcut . $dot;
}
/**
* 清除HTML标记
*
* @param string $str
* @return string
*/
function dr_clearhtml($str) {
$str = str_replace(
array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $str
);
$str = preg_replace("/\<[a-z]+(.*)\>/iU", "", $str);
$str = preg_replace("/\<\/[a-z]+\>/iU", "", $str);
$str = preg_replace("/{.+}/U", "", $str);
$str = str_replace(array(chr(13), chr(10), ' '), '', $str);
$str = strip_tags($str);
return trim($str);
}
/**
* 模块缓存数据
*
* @param string $dirname 名称
* @param intval $siteid 站点id
* @return array
*/
function get_module($dirname, $siteid = SITE_ID) {
$ci = &get_instance();
$dirname = $dirname == 'MOD_DIR' && defined('MOD_DIR') ? MOD_DIR : $dirname;
return $ci->get_cache('module-'.$siteid.'-'.$dirname);
}
/**
* 随机颜色
*
* @return string
*/
function dr_random_color() {
$str = '#';
for ($i = 0; $i < 6; $i++) {
$randNum = rand(0, 15);
switch ($randNum) {
case 10: $randNum = 'A';
break;
case 11: $randNum = 'B';
break;
case 12: $randNum = 'C';
break;
case 13: $randNum = 'D';
break;
case 14: $randNum = 'E';
break;
case 15: $randNum = 'F';
break;
}
$str.= $randNum;
}
return $str;
}
/**
* 友好时间显示函数
*
* @param int $time 时间戳
* @return string
*/
function dr_fdate($sTime, $formt = 'Y-m-d') {
if (!$sTime) {
return '';
}
//sTime=源时间,cTime=当前时间,dTime=时间差
$cTime = time();
$dTime = $cTime - $sTime;
$dDay = intval(date('z',$cTime)) - intval(date('z',$sTime));
$dYear = intval(date('Y',$cTime)) - intval(date('Y',$sTime));
//n秒前,n分钟前,n小时前,日期
if ($dTime < 60 ) {
if ($dTime < 10) {
return '刚刚';
} else {
return intval(floor($dTime / 10) * 10).'秒前';
}
} elseif ($dTime < 3600 ) {
return intval($dTime/60).'分钟前';
} elseif( $dTime >= 3600 && $dDay == 0 ){
return intval($dTime/3600).'小时前';
} elseif( $dDay > 0 && $dDay<=7 ){
return intval($dDay).'天前';
} elseif( $dDay > 7 && $dDay <= 30 ){
return intval($dDay/7).'周前';
} elseif( $dDay > 30 ){
return intval($dDay/30).'个月前';
} elseif ($dYear==0) {
return date('m月d日', $sTime);
} else {
return date($formt, $sTime);
}
}
/**
* 时间显示函数
*
* @param int $time 时间戳
* @param string $format 格式与date函数一致
* @param string $color 当天显示颜色
* @return string
*/
function dr_date($time = NULL, $format = SITE_TIME_FORMAT, $color = NULL) {
$time = (int) $time;
if (!$time) {
return '';
}
$format = $format ? $format : SITE_TIME_FORMAT;
$string = date($format, $time);
if (strpos($string, '1970') !== FALSE) {
return '';
}
return $color && $time >= strtotime(date('Y-m-d 00:00:00')) && $time <= strtotime(date('Y-m-d 23:59:59')) ? '<font color="' . $color . '">' . $string . '</font>' : $string;
}
/**
* JSON数据输出
*
* @param int $status 状态
* @param string|array $code 返回数据
* @param string|int $id 表单名称|返回Id
* @return string
*/
function dr_json($status, $code = '', $id = 0, $rid = 0) {
if (defined('IS_API_AUTH') && IS_API_AUTH) {
$data = array(
'msg' => $code,
'field' => strpos($id, 'http') === 0 ? '' : $id,
'code' => $status ? 1 : 0,
'status' => $status ? 1 : 0,
'id' => (int)$rid,
);
$return = $_GET['return'];
if ($return) {
$temp = $data;
$data = array();
foreach ($temp as $i => $t) {
$data[$i.'_'.$return] = $t;
}
}
return json_encode($data);
}
return json_encode(array('status' => $status, 'code' => $code, 'id' => $id));
}
/**
* 将对象转换为数组
*
* @param object $obj 数组对象
* @return array
*/
function dr_object2array($obj) {
$_arr = is_object($obj) ? get_object_vars($obj) : $obj;
if ($_arr && is_array($_arr)) {
foreach ($_arr as $key => $val) {
$val = (is_array($val) || is_object($val)) ? dr_object2array($val) : $val;
$arr[$key] = $val;
}
}
return $arr;
}
/**
* 将字符串转换为数组
*
* @param string $data 字符串
* @return array
*/
function dr_string2array($data) {
if (is_array($data)) {
return $data;
} elseif (!$data) {
return array();
} elseif (strpos($data, 'a:') === 0) {
return unserialize(stripslashes($data));
} else {
return @json_decode($data, true);
}
}
/**
* 将数组转换为字符串
*
* @param array $data 数组
* @return string
*/
function dr_array2string($data) {
return $data ? json_encode($data) : '';
}
/**
* 递归创建目录
*
* @param string $dir 目录名称
* @return bool|void
*/
function dr_mkdirs($dir) {
if (!$dir) {
return FALSE;
}
if (!is_dir($dir)) {
dr_mkdirs(dirname($dir));
if (!is_dir($dir)) {
mkdir($dir, 0777);
}
}
}
/**
* 设置表单 input 或者 textarea 字段的值
*
* @param string $name 表单名称data[$name]
* @param string $value 修改时的值$data[$name]
* @return string
*/
function dr_set_value($name, $value = NULL) {
return isset($_POST['data'][$name]) ? $_POST['data'][$name] : $value;
}
/**
* 设置表单 select 字段的值
*
* @param string $name 表单名称data[$name]
* @param string $value 修改时的值$data[$name]
* @return string
*/
function dr_set_select($name, $value = NULL, $field = NULL, $default = FALSE) {
$value = dr_set_value($name, $value);
if ($value === NULL && $default == TRUE) {
return ' selected';
}
if ($value == $field) {
return ' selected';
}
}
/**
* 设置表单 radio 字段的值
*
* @param string $name 表单名称data[$name]
* @param string $value 修改时的值$data[$name]
* @param string $field 当前选项的value值
* @param string $default 默认选中状态
* @return string|void
*/
function dr_set_radio($name, $value = NULL, $field = NULL, $default = FALSE) {
$value = dr_set_value($name, $value);
if ($value === NULL && $default == TRUE) {
return ' checked';
}
if ($value == $field) {
return ' checked';
}
}
/**
* 设置表单 checkbox 字段的值
*
* @param string $name 表单名称data[$name]
* @param array $value 修改时的值$data[$name] 复选框为数组格式值
* @param string $field 当前选项的value值
* @param string $default 默认选中状态
* @return string|void
*/
function dr_set_checkbox($name, $value = NULL, $field = NULL, $default = FALSE) {
$value = dr_set_value($name, $value);
if ($value === NULL && $default == TRUE) {
return ' checked';
}
if (@is_array($value) && in_array($field, $value)) {
return ' checked';
}
}
/**
* 汉字转为拼音
*
* @param string $word
* @return string
*/
function dr_word2pinyin($word) {
if (!$word) {
return '';
}
$ci = &get_instance();
$ci->load->library('pinyin');
return $ci->pinyin->result($word);
}
/**
* 格式化输出文件大小
*
* @param int $fileSize 大小
* @param int $round 保留小数位
* @return string
*/
function dr_format_file_size($fileSize, $round = 2) {
if (!$fileSize) {
return 0;
}
$i = 0;
$inv = 1 / 1024;
$unit = array(' Bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB');
while ($fileSize >= 1024 && $i < 8) {
$fileSize *= $inv;
++$i;
}
$temp = sprintf("%.2f", $fileSize);
$value = $temp - (int) $temp ? $temp : $fileSize;
return round($value, $round) . $unit[$i];
}
/**
* 关键字高亮显示
*
* @param string $string 字符串
* @param string $keyword 关键字
* @return string
*/
function dr_keyword_highlight($string, $keyword) {
return $keyword != '' ? str_ireplace($keyword, '<font color=red><strong>' . $keyword . '</strong></font>', $string) : $string;
}
function dollar($value, $include_cents = TRUE) {
if (!$include_cents) {
return "$" . number_format($value);
} else {
return "$" . number_format($value, 2, '.', ',');
}
}
/**
* Base64加密
*
* @param string $string
* @return string
*/
function dr_base64_encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+', '/', '='), array('-', '_', ''), $data);
return $data;
}
/**
* Base64解密
*
* @param string $string
* @return string
*/
function dr_base64_decode($string) {
$data = str_replace(array('-', '_'), array('+', '/'), $string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data.= substr('====', $mod4);
}
return base64_decode($data);
}
// 兼容老版本
/**
* 将语言转为实际内容
*
* @param array $_name 语言名称
* @param string $lang 语言名称
* @return string
*/
function dr_lang2name($_name, $lang = SITE_LANGUAGE) {
if (!$_name) {
return NULL;
}
$name = dr_string2array($_name);
if (!$name) {
return lang($_name);
}
return isset($name[$lang]) ? $name[$lang] : $name['zh-cn'];
}
/**
* 将实际内容转为语言
*
* @param string $value 实际内容
* @param array $data 原语言数据
* @return string
*/
function dr_name2lang($value, $data = array()) {
if (!is_array($data)) {
$data = dr_string2array($data);
}
if (!isset($data['zh-cn'])) {
$data['zh-cn'] = $value;
}
$data[SITE_LANGUAGE] = $value;
return dr_array2string($data);
}
/**
* 将数组转化为xml格式
*
* @param array $arr 数组
* @param bool $htmlon 是否开启html模式
* @param bool $isnormal 是否不全空格
* @param intval $level 当前级别
* @return string
*/
function dr_array2xml($arr, $htmlon = TRUE, $isnormal = FALSE, $level = 1) {
$space = str_repeat("\t", $level);
$string = $level == 1 ? "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<result>\r\n" : '';
foreach ($arr as $k => $v) {
if (!is_array($v)) {
$string.= $space."<$k>".($htmlon ? '<![CDATA[' : '').$v.($htmlon ? ']]>' : '')."</$k>\r\n";
} else {
$name = is_numeric($k) ? 'item' . $k : $k;
$string.= $space."<$name>\r\n".dr_array2xml($v, $htmlon, $isnormal, $level + 1).$space."</$name>\r\n";
}
}
$string = preg_replace("/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/", ' ', $string);
return $level == 1 ? $string.'</result>' : $string;
}
if (!function_exists('gethostbyname')) {
function gethostbyname($domain) {
return $domain;
}
}
/**
*
* 正则替换和过滤内容
*
* @param $html
*/
function dr_preg_html($html){
$p = array("/<[a|A][^>]+(topic=\"true\")+[^>]*+>#([^<]+)#<\/[a|A]>/",
"/<[a|A][^>]+(data=\")+([^\"]+)\"[^>]*+>[^<]*+<\/[a|A]>/",
"/<[img|IMG][^>]+(src=\")+([^\"]+)\"[^>]*+>/");
$t = array('topic{data=$2}','$2','img{data=$2}');
$html = preg_replace($p, $t, $html);
$html = strip_tags($html, "<br/>");
return $html;
}
/**
* 格式化微博内容中url内容的长度
* @param string $match 匹配后的字符串
* @return string 格式化后的字符串
*/
function _format_feed_content_url_length($match) {
return '<a href="'.$match[1].'" target="_blank">'.$match[1].'</a>';
}
// 替换互动内容
function dr_sns_content($content) {
// 替换话题URL
if (preg_match_all('/\[TOPIC\-URL\-([0-9]+)\]/Ui', $content, $match)) {
foreach ($match[1] as $t) {
$url = defined('IS_SPACE') ? dr_space_sns_url(IS_SPACE, 'topic', $t) : dr_member_url('sns/topic', array('id' => $t));
$content = str_replace('[TOPIC-URL-'.$t.']', $url, $content);
}
}
// 替换表情
if (preg_match_all('/\[([a-z0-9]+)\]/Ui', $content, $match)) {
foreach ($match[1] as $t) {
if (is_file(WEBPATH.'api/emotions/'.$t.'.gif')) {
$content = str_replace('['.$t.']', '<img src="'.SITE_URL.'api/emotions/'.$t.'.gif" />', $content);
}
}
}
return $content;
}
/**
* 动态详情
*
* @param intval $id 动态id
* @param intval $cache 缓存时间
* @return string
*/
function dr_sns_feed($id, $cache = -1) {
$ci = &get_instance();
$data = $ci->get_cache_data('sns-feed-'.$id);
if (!$data) {
$data = $ci->db->where('id', $id)->get('sns_feed')->row_array();
$ci->set_cache_data('sns-feed-'.$id, $data, $cache > 0 ? $cache : SYS_CACHE_MEMBER);
}
return $data;
}
/**
* 好友关系
*
* @param intval $uid 我的id
* @param intval $uid2 对方id
* @return string
*/
function dr_sns_follow($uid, $uid2) {
if (!$uid || !$uid2
|| $uid == $uid2) {
// id不存在或者是自己时表示未关注吧
return -1;
}
$ci = &get_instance();
$data = $ci->db->select('isdouble')->where('fid', $uid)->where('uid', $uid2)->get('sns_follow')->row_array();
if (!$data) {
return -1; // 未关注
} elseif ($data['isdouble']) {
return 1; // 相互关注
} else {
return 0; // 已经关注
}
}
// 二维码
function dr_qrcode_url($text, $uid = 0, $level = 'L', $size = 5) {
return SITE_URL.'index.php?c=api&m=qrcode&uid='.urlencode($uid).'&text='.urlencode($text).'&size='.$size.'&level='.$level;
}
// 过滤非法字段
function dr_get_order_string($str, $order) {
if (substr_count($str, ' ') >= 2
|| strpos($str, '(') !== FALSE
|| strpos($str, 'undefined') === 0
|| strpos($str, ')') !== FALSE ) {
return $order;
}
return $str ? $str : ($order ? $order : 'id desc');
}
// 兼容性判断
if (!function_exists('ctype_digit')) {
function ctype_digit($num) {
if (strpos($num, '.') !== FALSE) {
return false;
}
return is_numeric($num);
}
}
// 兼容性判断
if (!function_exists('ctype_alpha')) {
function ctype_alpha($num) {
if (strpos($num, '.') !== FALSE) {
return false;
}
return is_numeric($num);
}
}
// 极验验证调用方式
function dr_geetest($product = 'embed', $submit = '') {
$add = '';
$rid = rand(0, 99);
$product == 'popup' && $add = 'gt_captcha_obj.bindOn("#'.$submit.'");';
$http = defined('SYS_HTTPS') && SYS_HTTPS ? 'https' : 'http';
return '
<div class="box" id="div_geetest_lib_'.$rid.'">
<div id="div_id_embed_'.$rid.'"></div>
<script type="text/javascript">
var gtFailbackFrontInitial = function(result) {
var s = document.createElement("script");
s.id = "gt_lib";
s.src = "'.$http.'://static.geetest.com/static/js/geetest.0.0.0.js";
s.charset = "UTF-8";
s.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(s);
var loaded = false;
s.onload = s.onreadystatechange = function() {
if (!loaded && (!this.readyState|| this.readyState === "loaded" || this.readyState === "complete")) {
loadGeetest(result);
loaded = true;
}
};
}
var loadGeetest = function(config) {
window.gt_captcha_obj = new window.Geetest({
gt : config.gt,
challenge : config.challenge,
lang: "'.SITE_LANGUAGE.'",
product : "'.$product.'",
offline : !config.success
});
gt_captcha_obj.appendTo("#div_id_embed_'.$rid.'");
'.$add.'
}
s = document.createElement("script");
s.src = "'.$http.'://api.geetest.com/get.php?callback=gtcallback";
$("#div_geetest_lib_'.$rid.'").append(s);
var gtcallback =( function() {
var status = 0, result, apiFail;
return function(r) {
status += 1;
if (r) {
result = r;
setTimeout(function() {
if (!window.Geetest) {
apiFail = true;
gtFailbackFrontInitial(result)
}
}, 1000)
}
else if(apiFail) {
return
}
if (status == 2) {
loadGeetest(result);
}
}
})()
$.ajax({url : "/index.php?s=member&c=api&m=geetest&rand="+Math.round(Math.random()*100),
type : "get",
dataType : "JSON",
success : function(result) {
console.log(result);
gtcallback(result)
}
})
</script>
</div>';
}
// 两数折扣
function dr_discount($price, $nowprice) {
if ($nowprice <= 0) {
return 0;
}
return round(10 / ($price / $nowprice), 1);
}
// 提取tag
function dr_tag_list($dir, $keyword) {
if (!$keyword) {
return array();
}
$mod = get_module($dir);
if (!$mod) {
return array();
}
$data = array();
$array = explode(',', $keyword);
foreach ($array as $t) {
$t = trim($t);
if ($t) {
$data[$t] = dr_tag_url($mod, $t);
}
}
return $data;
}
/**
* 邮箱或手机号码登录
*
* @param string $dir 目录名称
* @return bool|void
*/
function dr_vip_login($db, $value) {
if (preg_match('/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/', $value)) {
// 邮箱登录
return $db->select('`uid`, `password`, `salt`, `email`, `username`')
->where('email', $value)
->limit(1)
->get('member')
->row_array();
} else {
// 手机登录
$phone = (int)$value;
if (strlen($phone) == 11) {
return $db->select('`uid`, `password`, `salt`, `email`, `username`')
->where('phone', $phone)
->limit(1)
->get('member')
->row_array();
}
return NULL;
}
}
/**
* 获取站点表单内容函数
*
* @param intval $id 表单id
* @param string $form 表单表名称
* @param string $field 显示字段,默认为全部数组
* @param intval $sid 站点id,默认为当前站点
* @param intval $cache 缓存时间,默认为10000秒
* @return array|void
*/
function dr_vip_form($id, $form, $field = 0, $sid = 0, $cache = 0) {
$ci = &get_instance();
$sid = $sid ? $sid : SITE_ID;
$name = 'form-data-'.$sid.'-'.$form.'-'.$id;
$data = $ci->get_cache_data($name);
if (!$data) {
$data = $ci->db->where('id', $id)->get($sid.'_form_'.$form)->row_array();
$data2 = $ci->db->where('id', $id)->get($sid.'_form_'.$form.'_data_'.(int)$data['tableid'])->row_array();
if ($data2) {
$data = array_merge($data, $data2);
}
if (!$data) {
return false;
}
$ci->set_cache_data($name, $data, $cache ? $cache : SYS_CACHE_FORM);
}
return $field && isset($data[$field]) ? $data[$field] : $data;
}
/**
* 获取模块表单内容函数
*
* @param intval $id 表单id
* @param string $dir 模块目录
* @param string $form 表单表名称
* @param string $field 显示字段,默认为全部数组
* @param intval $sid 站点id,默认为当前站点
* @param intval $cache 缓存时间,默认为10000秒
* @return array|void
*/
function dr_vip_mform($id, $dir, $form, $field = 0, $sid = 0, $cache = 0) {
$ci = &get_instance();
$sid = $sid ? $sid : SITE_ID;
$name = 'mform-data-'.$sid.'-'.$form.'-'.$id.'-'.$dir;
$data = $ci->get_cache_data($name);
if (!$data) {
$data = $ci->db->where('id', $id)->get($sid.'_'.$dir.'_form_'.$form)->row_array();
$data2 = $ci->db->where('id', $id)->get($sid.'_'.$dir.'_form_'.$form.'_data_'.(int)$data['tableid'])->row_array();
if ($data2) {
$data = array_merge($data, $data2);
}
if (!$data) {
return false;
}
$ci->set_cache_data($name, $data, $cache ? $cache : SYS_CACHE_FORM);
}
return $field && isset($data[$field]) ? $data[$field] : $data;
}
// 获取栏目数据及自定义字段
function dr_cat_value() {
$get = func_get_args();
if (empty($get)) {
return NULL;
}
if (is_numeric($get[0]) && MOD_DIR) {
// 值是栏目id时,表示当前模块
$name = 'module-'.SITE_ID.'-'.MOD_DIR;
} else {
// 指定模块
$name = strpos($get[0], '-') ? 'module-'.$get[0] : 'module-'.SITE_ID.'-'.$get[0];
unset($get[0]);
}
$i = 0;
$param = array();
foreach ($get as $t) {
if ($i == 0) {
$param[] = $name;
$param[] = 'category';
}
$param[] = $t;
$i = 1;
}
$ci = &get_instance();
return call_user_func_array(array($ci, 'get_cache'), $param);
}
// 获取共享栏目数据及自定义字段
function dr_share_cat_value($id, $field='') {
$get = func_get_args();
if (empty($get)) {
return NULL;
}
$i = 0;
$param = array();
foreach ($get as $t) {
if ($i == 0) {
$param[] = 'module-'.SITE_ID.'-share';
$param[] = 'category';
}
$param[] = $t;
$i = 1;
}
$ci = &get_instance();
return call_user_func_array(array($ci, 'get_cache'), $param);
}
/**
* @desc 根据两点间的经纬度计算距离
* @param float $lat 纬度值
* @param float $lng 经度值
*/
function dr_distance($lat1, $lng1, $lat2, $lng2, $mark = '米,千米') {
$earthRadius = 6367000; // approximate radius of earth in meters
/*
Convert these degrees to radians
to work with the formula
*/
$lat1 = ($lat1 * pi() ) / 180;
$lng1 = ($lng1 * pi() ) / 180;
$lat2 = ($lat2 * pi() ) / 180;
$lng2 = ($lng2 * pi() ) / 180;
/*
Using the
Haversine formula
http://en.wikipedia.org/wiki/Haversine_formula
calculate the distance
*/
$calcLongitude = $lng2 - $lng1;
$calcLatitude = $lat2 - $lat1;
$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
$calculatedDistance = $earthRadius * $stepTwo;
$value = round($calculatedDistance);
if (!$mark) {
return $value;
}
$dw = '';
$mark = @explode(',', $mark);
if ($value < 1000) {
$dw = isset($mark[0]) ? $mark[0] : '';
} elseif ($value >= 1000) {
$dw = isset($mark[1]) ? $mark[1] : '';
$dw && $value = $value / 1000;
}
return $value.$dw;
}
/**
*计算某个经纬度的周围某段距离的正方形的四个点
*
*@param lng float 经度
*@param lat float 纬度
*@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
*@return array 正方形的四个点的经纬度坐标
*/
function dr_square_point($lng, $lat, $distance = 0.5){
$distance = $distance ? $distance : 1;
$r = 6371; //地球半径,平均半径为6371km
$dlng = 2 * asin(sin($distance / (2 * $r)) / cos(deg2rad($lat)));
$dlng = rad2deg($dlng);
$dlat = $distance/$r;
$dlat = rad2deg($dlat);
return array(
'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
);
}
// ajax调用动态内容
function dr_ajax_html($id, $tpl, $params = array()) {
$params = dr_array2string($params);
if (strlen($params) > 100) {
return '<font color="red">【'.$id.'】参数太多</font>';
}
$url = SITE_URL."index.php?c=api&m=html&name=".$tpl."¶ms=".urlencode($params);
return "<script type=\"text/javascript\">
$.ajax({type: \"GET\", url: \"{$url}&\"+Math.random(), dataType:\"jsonp\",
success: function (data) {
$(\"#{$id}\").html(data.html);
}
});
</script>";
}
// 链接菜单默认图标
function dr_get_icon($uri) {
if (strpos($uri, 'admin/module/index')) {
return 'fa fa-cogs';
} elseif (strpos($uri, 'verify')) {
return 'fa fa-retweet';
} elseif (strpos($uri, 'draft')) {
return 'fa fa-edit';
} elseif (strpos($uri, 'category')) {
return 'fa fa-list';
} elseif (strpos($uri, 'tag')) {
return 'fa fa-tags';
} elseif (strpos($uri, 'page')) {
return 'fa fa-adn';
} elseif (strpos($uri, 'form')) {
return 'fa fa-table';
} elseif (strpos($uri, 'html')) {
return 'fa fa-html5';
} elseif (strpos($uri, 'field')) {
return 'fa fa-plus';
} elseif (strpos($uri, 'config')) {
return 'fa fa-cogs';
} elseif (strpos($uri, 'tpl')) {
return 'fa fa-folder-close';
} elseif (strpos($uri, 'theme')) {
return 'fa fa-file-photo-o';
}elseif (strpos($uri, 'recycle')) {
return 'fa fa-trash';
}
return 'fa fa-th-large';
}
// 模块默认图标
function dr_get_icon_m($dir) {
if ($dir == 'news') {
return 'fa fa-tasks';
} elseif ($dir == 'book') {
return 'fa fa-book';
} elseif ($dir == 'bbs' || $dir == 'weixin') {
return 'fa fa-comments';
} elseif ($dir == 'buy' || $dir == 'shop' || $dir == 'sell') {
return 'fa fa-shopping-cart';
} elseif ($dir == 'down') {
return 'fa fa-file-code-o';
} elseif ($dir == 'fang') {
return 'fa fa-reorder';
} elseif ($dir == 'music') {
return 'fa fa-music';
} elseif ($dir == 'photo') {
return 'fa fa-file-photo-o';
} elseif ($dir == 'video') {
return 'fa fa-file-video-o';
}
return 'fa fa-table';
}
//
function dr_get_icon_left($name) {
if (strpos($name, '新闻') !== FALSE ) {
return 'fa fa-tasks';
} elseif (strpos($name, '图书') !== FALSE) {
return 'fa fa-book';
} elseif (strpos($name, '微') !== FALSE) {
return 'fa fa-comments';
} elseif (strpos($name, '商') !== FALSE) {
return 'fa fa-shopping-cart';
} elseif (strpos($name, '下载') !== FALSE) {
return 'fa fa-file-code-o';
} elseif (strpos($name, '房') !== FALSE) {
return 'fa fa-reorder';
} elseif (strpos($name, '音') !== FALSE) {
return 'fa fa-music';
} elseif (strpos($name, '图') !== FALSE) {
return 'fa fa-file-photo-o';
} elseif (strpos($name, '视频') !== FALSE) {
return 'fa fa-file-video-o';
} elseif (strpos($name, '评论') !== FALSE) {
return 'fa fa-comments-o';
} elseif (strpos($name, '功能') !== FALSE) {
return 'fa fa-cog';
} elseif (strpos($name, '风格') !== FALSE) {
return 'fa fa-folder';
} elseif (strpos($name, ' ') !== FALSE) {
return 'icon';
}
return 'fa fa-table';
}
// 替换菜单字符
function dr_replace_m_uri($link, $id, $dir) {
if (strpos($link['uri'], '{id}') === FALSE
&& strpos($link['uri'], '{dir}') === FALSE) {
return trim($dir.'/'.$link['uri'], '/');
} else {
return str_replace(array('{id}', '{dir}'), array($id, $dir), $link['uri']);
}
}
// 格式化生成文件
function dr_format_html_file($file, $is_mobile = 0) {
if (strpos($file, 'http://') !== false
|| strpos($file, 'index.php') !== false) {
return;
}
$dir = dirname($file);
$file = basename($file);
$root = WEBPATH;
// 多网站时生成到指定目录
if (SITE_ID > 1 && is_file(WEBPATH.'config/html.php')) {
$html = require WEBPATH.'config/html.php';
if (isset($html[SITE_ID]) && $html[SITE_ID] && is_file($html[SITE_ID].'index.php')) {
$root = $html[SITE_ID];
}
}
// 移動端生成
if ($is_mobile) {
$root.= 'mobile/';
}
if ($dir != '.' && !is_dir($root.$dir)) {
dr_mkdirs($root.$dir, TRUE);
}
$hfile = str_replace('./', '', $root.$dir.'/'.$file);
// 判断是否为目录形式
if (strpos($file, '.html') === FALSE
&& strpos($file, '.htm') === FALSE
&& strpos($file, '.shtml') === FALSE) {
dr_mkdirs($hfile, TRUE);
}
// 如果是目录就生成一个index.html
if (is_dir($hfile)) {
$dir.= '/'.$file;
$file = 'index.html';
$hfile = str_replace('./', '', $root.$dir.'/'.$file);
}
return str_replace("//", "/", $hfile);
}
// 删除静态文件
function dr_delete_html_file($url) {
$file = dr_format_html_file($url);
if (is_file($file)) {
unlink($file);
}
}
// 获取当前模板目录
function dr_tpl_path($file) {
$path = IS_MEMBER ? TPLPATH.(IS_MOBILE ? 'mobile' : 'pc').'/member/'.MEMBER_TEMPLATE.'/' : TPLPATH.(IS_MOBILE ? 'mobile' : 'pc').'/web/'.SITE_TEMPLATE.'/';
APP_DIR && APP_DIR != 'member' ? $path.= APP_DIR.'/' : $path.= 'common/';
if (is_file($path.$file)) {
return $path.$file;
}
return false;
}
// 判断满足定向跳转的条件 1单页,2模块首页,3栏目页,4内容,5扩展
function dr_is_redirect($type, $url) {
if (!defined('SITE_URL_301') || !SITE_URL_301) {
return;
}
// 不调整的条件
if (!$url || strpos($url, 'http') === FALSE) {
return; // 为空时排除
} elseif (IS_MOBILE || SITE_MOBILE === TRUE) {
return; // 排除移动端
} elseif ($type > 1 && defined('CT_HTML_FILE')) {
return; // 排除生成
} elseif (intval($_GET['page']) > 1) {
return; // 排除分页
} elseif (intval($_GET['cache']) > 1) {
return; // 排除cache
} elseif (SITE_FID && in_array($type, array(2, 3))) {
return; // 排除分站
}
// 跳转
$url != dr_now_url() && redirect($url, 'location', '301');
}
// 文件上传临时目录
function dr_upload_temp_path() {
if (function_exists('ini_get')) {
$path = ini_get('upload_tmp_dir');
if ($path) {
$path = rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
if (is_dir($path)) {
return $path;
}
}
}
return WEBPATH.'cache/file/';
}
// 字段表单控件输出
function dr_field_form($id, $value = '', $html = '{value}') {
$id = (int)$id;
if (!$id) {
return NULL;
}
$ci = &get_instance();
$data = $ci->get_cache_data('field-value-'.$id);
if (!$data) {
$data = $ci->db->where('id', $id)->get('field')->row_array();
if (!$data) {
return NULL;
}
$data['setting'] = dr_string2array($data['setting']);
$ci->set_cache_data('field-value-'.$id, $data, 10000);
}
$ci->load->library('Dfield', array(APP_DIR));
$field = $ci->dfield->get($data['fieldtype']);
if (!is_object($field)) {
return NULL;
}
if ($html) {
$field->set_input_format($html);
}
return preg_replace('/(<div class="on.+<\/div>)/U', '', $field->input($data['name'], $data['fieldname'], $data['setting'], $value, 0));
}
// http模式
function dr_http_prefix($url) {
return (defined('SYS_HTTPS') && SYS_HTTPS ? 'https://' : 'http://').$url;
}
// 评论汇总信息
function dr_comment($name, $id) {
if (!$id || !$name) {
return NULL;
}
$ci = &get_instance();
$data = $ci->get_cache_data('comment-'.$name.'-'.$id);
if (!$data) {
$data = $ci->db->where('cid', $id)->get($name.'_comment_index')->row_array();
if (!$data) {
return NULL;
}
$ci->set_cache_data('comment-'.$name.'-'.$id, $data, 10000);
}
return $data;
}
// 处理带Emoji的数据,type=0表示写入数据库前的emoji转为HTML,为1时表示HTML转为emoji码
function dr_weixin_emoji($msg, $type = 1){
if ($type == 0) {
$msg = json_encode($msg);
} else {
$txt = json_decode($msg);
if ($txt !== null) {
$msg = $txt;
}
}
return $msg;
}
/**
* 过滤emoji表情
* @param type $str
* @return type
*/
function dr_clear_emoji($str){
$tmpStr = json_encode($str); //暴露出unicode
$tmpStr = preg_replace("#(\\\ud[0-9a-f]{3})#i","", $tmpStr);
$new_str = json_decode($tmpStr);
$new_str = str_replace(' ', '', $new_str);
return $new_str;
}
// 判断是否支持回复
function dr_comment_is_reply($reply, $member, $cuid) {
if ($reply == 1) {
// 都允许
return 1;
} elseif ($reply == 2) {
// 仅自己
if ($member['uid'] == $cuid) {
// 自己的评论
return 1;
} elseif ($member['adminid']) {
return 1; // 管理员可以回复
} else {
return 0;
}
} else {
// 禁止所有
return 0;
}
}
// 将同步代码转为数组
function dr_member_sync_url($string) {
if (preg_match_all('/src="(.+)"/iU', $string, $match)) {
return $match[1];
}
return array();
}
function dr_weixin_get_token() {
$ci = &get_instance();
$cfg = $ci->get_cache('weixin-'.SITE_ID,'config');
return $cfg['account'];
}
function dr_weixin_show_url($id) {
return SITE_URL.'index.php?c=weixin&m=show&id='.$id;
}
// 微信端的错误码转中文解释
function dr_error_msg($return, $more_tips = '') {
$msg = array (
'-1' => '系统繁忙,此时请开发者稍候再试',
'0' => '请求成功',
'40001' => '获取access_token时AppSecret错误,或者access_token无效',
'40002' => '不合法的凭证类型',
'40003' => '不合法的OpenID,请开发者确认OpenID(该用户)是否已关注公众号,或是否是其他公众号的OpenID',
'40004' => '不合法的媒体文件类型',
'40005' => '不合法的文件类型',
'40006' => '不合法的文件大小',
'40007' => '不合法的媒体文件id',
'40008' => '不合法的消息类型',
'40009' => '不合法的图片文件大小',
'40010' => '不合法的语音文件大小',
'40011' => '不合法的视频文件大小',
'40012' => '不合法的缩略图文件大小',
'40013' => '不合法的AppID,请开发者检查AppID的正确性,避免异常字符,注意大小写',
'40014' => '不合法的access_token,请开发者认真比对access_token的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口',
'40015' => '不合法的菜单类型',
'40016' => '不合法的按钮个数',
'40017' => '不合法的按钮个数',
'40018' => '不合法的按钮名字长度',
'40019' => '不合法的按钮KEY长度',
'40020' => '不合法的按钮URL长度',
'40021' => '不合法的菜单版本号',
'40022' => '不合法的子菜单级数',
'40023' => '不合法的子菜单按钮个数',
'40024' => '不合法的子菜单按钮类型',
'40025' => '不合法的子菜单按钮名字长度',
'40026' => '不合法的子菜单按钮KEY长度',
'40027' => '不合法的子菜单按钮URL长度',
'40028' => '不合法的自定义菜单使用用户',
'40029' => '不合法的oauth_code',
'40030' => '不合法的refresh_token',
'40031' => '不合法的openid列表',
'40032' => '不合法的openid列表长度',
'40033' => '不合法的请求字符,不能包含\uxxxx格式的字符',
'40035' => '不合法的参数',
'40038' => '不合法的请求格式',
'40039' => '不合法的URL长度',
'40050' => '不合法的分组id',
'40051' => '分组名字不合法',
'40117' => '分组名字不合法',
'40118' => 'media_id大小不合法',
'40119' => 'button类型错误',
'40120' => 'button类型错误',
'40121' => '不合法的media_id类型',
'40132' => '微信号不合法',
'40137' => '不支持的图片格式',
'41001' => '缺少access_token参数',
'41002' => '缺少appid参数',
'41003' => '缺少refresh_token参数',
'41004' => '缺少secret参数',
'41005' => '缺少多媒体文件数据',
'41006' => '缺少media_id参数',
'41007' => '缺少子菜单数据',
'41008' => '缺少oauth code',
'41009' => '缺少openid',
'42001' => 'access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明',
'42002' => 'refresh_token超时',
'42003' => 'oauth_code超时',
'43001' => '需要GET请求',
'43002' => '需要POST请求',
'43003' => '需要HTTPS请求',
'43004' => '需要接收者关注',
'43005' => '需要好友关系',
'44001' => '多媒体文件为空',
'44002' => 'POST的数据包为空',
'44003' => '图文消息内容为空',
'44004' => '文本消息内容为空',
'45001' => '多媒体文件大小超过限制',
'45002' => '消息内容超过限制',
'45003' => '标题字段超过限制',
'45004' => '描述字段超过限制',
'45005' => '链接字段超过限制',
'45006' => '图片链接字段超过限制',
'45007' => '语音播放时间超过限制',
'45008' => '图文消息超过限制',
'45009' => '接口调用超过限制',
'45010' => '创建菜单个数超过限制',
'45015' => '回复时间超过限制',
'45016' => '系统分组,不允许修改',
'45017' => '分组名字过长',
'45018' => '分组数量超过上限',
'46001' => '不存在媒体数据',
'46002' => '不存在的菜单版本',
'46003' => '不存在的菜单数据',
'46004' => '不存在的用户',
'47001' => '解析JSON/XML内容错误',
'48001' => 'api功能未授权,请确认公众号已获得该接口,可以在公众平台官网-开发者中心页中查看接口权限',
'50001' => '用户未授权该api',
'50002' => '用户受限,可能是违规后接口被封禁',
'61451' => '参数错误(invalid parameter)',
'61452' => '无效客服账号(invalid kf_account)',
'61453' => '客服帐号已存在(kf_account exsited)',
'61454' => '客服帐号名长度超过限制(仅允许10个英文字符,不包括@及@后的公众号的微信号)(invalid kf_acount length)',
'61455' => '客服帐号名包含非法字符(仅允许英文+数字)(illegal character in kf_account)',
'61456' => '客服帐号个数超过限制(10个客服账号)(kf_account count exceeded)',
'61457' => '无效头像文件类型(invalid file type)',
'61450' => '系统错误(system error)',
'61500' => '日期格式错误',
'61501' => '日期范围错误',
'9001001' => 'POST数据参数不合法',
'9001002' => '远端服务不可用',
'9001003' => 'Ticket不合法',
'9001004' => '获取摇周边用户信息失败',
'9001005' => '获取商户信息失败',
'9001006' => '获取OpenID失败',
'9001007' => '上传文件缺失',
'9001008' => '上传素材的文件类型不合法',
'9001009' => '上传素材的文件尺寸不合法',
'9001010' => '上传失败',
'9001020' => '帐号不合法',
'9001021' => '已有设备激活率低于50%,不能新增设备',
'9001022' => '设备申请数不合法,必须为大于0的数字',
'9001023' => '已存在审核中的设备ID申请',
'9001024' => '一次查询设备ID数量不能超过50',
'9001025' => '设备ID不合法',
'9001026' => '页面ID不合法',
'9001027' => '页面参数不合法',
'9001028' => '一次删除页面ID数量不能超过10',
'9001029' => '页面已应用在设备中,请先解除应用关系再删除',
'9001030' => '一次查询页面ID数量不能超过50',
'9001031' => '时间区间不合法',
'9001032' => '保存设备与页面的绑定关系参数错误',
'9001033' => '门店ID不合法',
'9001034' => '设备备注信息过长',
'9001035' => '设备申请参数不合法',
'9001036' => '查询起始值begin不合法'
);
if ($more_tips) {
$res = $more_tips . ': ';
} else {
$res = '';
}
if (isset ( $msg [$return ['errcode']] )) {
$res .= $msg [$return ['errcode']];
} else {
$res .= $return ['errmsg'];
}
$res .= ', 返回码:' . $return ['errcode'];
return $res;
}
function dr_post_data($url, $param, $is_file = false, $return_array = true) {
if ($is_file) {
$header [] = "content-type: multipart/form-data; charset=UTF-8";
} else {
$header [] = "content-type: application/json; charset=UTF-8";
}
$ch = curl_init ();
if (class_exists('\CURLFile')) {
foreach ($param as $key => $value) {
if ($is_file && strpos($value, '@') === 0) {
$file = substr($value, 1);
if (is_file($file)) {
$param[$key] = new \CURLFile($file);
}
}
}
} else {
if (defined('CURLOPT_SAFE_UPLOAD')) {
echo 2;exit;
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
}
}
if (! $is_file && is_array ( $param )) {
$param = JSON ( $param );
}
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $param );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
$res = curl_exec ( $ch );
$flat = curl_errno ( $ch );
if ($flat) {
$data = curl_error ( $ch );
}
curl_close ( $ch );
$return_array && $res = json_decode ( $res, true );
return $res;
}
function dr_get_access_token() {
$name = WEBPATH.'cache/data/access_token.'.SITE_ID;
$data = @json_decode(@dr_catcher_data($name), true);
if (isset($data['time']) && $data['time'] > SYS_TIME && isset($data['access_token']) && $data['access_token']) {
return $data['access_token'];
}
$ci = &get_instance();
$cfg = $ci->get_cache('weixin-'.SITE_ID, 'config');
!$cfg['key'] && $ci->admin_msg('没有配置账号参数');
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$cfg['key'].'&secret='.$cfg['secret'];
$data = json_decode(wx_get_https_json_data($url), true);
if (!$data) {
@unlink($name);
$ci->admin_msg('获取access_token失败,请检查服务器是否支持远程链接');
}
if (isset($data['errmsg']) && $data['errmsg']) {
@unlink($name);
$ci->admin_msg('错误代码('.$data['errcode'].'):'.$data['errmsg']);
}
$data['time'] = SYS_TIME + $data['expires_in'];
@file_put_contents($name, json_encode($data));
return $data['access_token'];
}
function dr_weixin_jssdk() {
$ci = &get_instance();
$ci->load->library('jssdk');
$signPackage = $ci->jssdk->GetSignPackage();
return $signPackage;
}
// 处理带Emoji的数据,type=0表示写入数据库前的emoji转为HTML,为1时表示HTML转为emoji码
function dr_deal_emoji($msg, $type = 1){
if ($type == 0) {
$msg = (str_replace('\\', '|', json_encode($msg)));
} else {
$txt = json_decode(str_replace('|', '\\', $msg));
if ($txt !== null) {
$msg = $txt;
} else {
$msg = '未知昵称';
}
}
return $msg;
}
/**
* 将数组转换为JSON字符串(兼容中文)
*/
function JSON($array) {
arrayRecursive ( $array, 'urlencode', true );
$json = json_encode ( $array );
return urldecode ( $json );
}
/**
* 使用特定function对数组中所有元素做处理
*/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false) {
static $recursive_counter = 0;
if (++ $recursive_counter > 1000) {
die ( 'possible deep recursion attack' );
}
foreach ( $array as $key => $value ) {
if (is_array ( $value )) {
arrayRecursive ( $array [$key], $function, $apply_to_keys_also );
} else {
$array [$key] = $function ( $value );
}
if ($apply_to_keys_also && is_string ( $key )) {
$new_key = $function ( $key );
if ($new_key != $key) {
$array [$new_key] = $array [$key];
unset ( $array [$key] );
}
}
}
$recursive_counter --;
}
// 转化为json
function dr_weixin_en_json($data) {
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
return urldecode(json_encode(dr_url_encode($data)));
} else {
return json_encode($data, JSON_UNESCAPED_UNICODE);
}
}
/**
* POST请求
*/
function dr_weixin_post($url, $params) {
if (function_exists('curl_init')) { // curl方式
$oCurl = curl_init();
if (stripos($url, 'https://') !== FALSE) {
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
$string = $params;
if (is_array($params)) {
$aPOST = array();
foreach ($params as $key => $val){
$aPOST[] = $key.'='.urlencode($val);
}
$string = join('&', $aPOST);
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($oCurl, CURLOPT_POST, TRUE);
curl_setopt($oCurl, CURLOPT_POSTFIELDS, $string);
$response = curl_exec($oCurl);
curl_close($oCurl);
return json_decode($response, true);
} elseif (function_exists('stream_context_create')) { // php5.3以上
$opts = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query($params),
)
);
$_opts = stream_context_get_params(stream_context_get_default());
$context = stream_context_create(array_merge_recursive($_opts['options'], $opts));
return json_decode(file_get_contents($url, false, $context), true);
} else {
return FALSE;
}
}
// 从url获取json数据
function wx_get_https_json_data($url) {
$response = @file_get_contents($url);
if (!$response) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($error=curl_error($ch)){
return dr_return_data(0, $error);
}
curl_close($ch);
}
return $response;
}
// 搜索商城属性
function dr_mall_property($catid, $all = 0, $mdir = APP_DIR) {
!$mdir && $mdir = MOD_DIR;
if (!$mdir || !is_dir(FCPATH.'module/'.$mdir.'/')) {
return NULL;
}
$ci = &get_instance();
$ci->load->add_package_path(FCPATH.'module/'.$mdir.'/');
$ci->load->model('property_model');
$data = $ci->property_model->get_cat_data($catid);
if (!$data) {
return NULL;
}
if ($all) {
return $data;
}
$list = array();
foreach ($data as $t) {
if ($t['list']) {
foreach ($t['list'] as $a) {
$a['search'] && $list[$a['cname']] = $a;
}
}
}
return $list;
}
function dr_mall_property_value($catid, $value) {
if (!$catid || !$value) {
return NULL;
}
$data = dr_mall_property($catid, 1, APP_DIR);
if (!$data) {
return NULL;
}
$list = array();
$params = array('catid' => $catid);
foreach ($data as $t) {
if ($t['list']) {
$i = $t['name'];
$list[$i] = array();
foreach ($t['list'] as $a) {
if (!isset($value[$a['cname']]) || !$value[$a['cname']]) {
continue;
}
if ($a['type'] == 'text') {
$row = $value[$a['cname']];
} elseif ($a['type'] == 'select') {
$row = $a['value'][$value[$a['cname']]];
$a['search'] && $row = '<a href="'.dr_search_url($params, 'mall_'.$a['cname'], $value[$a['cname']]).'" target="_blank" class="dr_pt">'.$row.'</a>';
} else {
$row = array();
foreach ($value[$a['cname']] as $v) {
$row[$v] = $a['search'] ? '<a href="'.dr_search_url($params, 'mall_'.$a['cname'], $v).'" target="_blank" class="dr_pt">'.$a['value'][$v].'</a>' : $a['value'][$v];
}
}
$list[$i][$a['name']] = $row;
}
}
}
return $list;
}
// 调用商城商品规格
function dr_mall_spec($catid, $value = array(), $mdir = 'mall') {
if (!$catid) {
return NULL;
} elseif (!is_dir(FCPATH.'module/'.$mdir.'/')) {
return NULL;
}
$ci = &get_instance();
$ci->load->add_package_path(FCPATH.'module/'.$mdir.'/');
$ci->load->model('spec_model');
$ci->spec_model->mdir = $mdir;
$data = $ci->spec_model->get_cat_data($catid);
if (!$data && !$value) {
return NULL;
} elseif (!$value) {
return $data;
}
if (isset($value['diy_group']) && $value['diy_group']) {
foreach ($value['option'] as $cname => $v) {
if (strpos($cname, 'group') === 0
&& isset($value['diy_group'][$cname]) && $value['diy_group'][$cname] ) {
// 如果查询到这个值是自定义的值就补充到属性中
$diy_value = array();
foreach ($v as $a) {
$div_value[$a] = $value['diy_value'][$a];
}
$data[$cname] = array(
'type' => 'diy',
'name' => $value['diy_group'][$cname],
'cname' => $cname,
'value' => $diy_value,
);
}
}
}
if (isset($value['diy_value']) && $value['diy_value']) {
foreach ($value['option'] as $cname => $t) {
foreach ($t as $val) {
// 如果查询到这个值是自定义的值就补充到属性中
strpos($val, 'value') === 0
&& isset($value['diy_value'][$val]) && $value['diy_value'][$val]
&& isset($data[$cname]) && $data[$cname] && $data[$cname]['value'][$val] = $value['diy_value'][$val];
}
}
}
return $data;
}
/**
* 调用店铺详细信息(自定义字段需要手动格式化)
*
* @param intval $uid 会员uid
* @param string $name 字段名称
* @param intval $cache 缓存时间
* @return string
*/
function dr_store_info($uid, $name = '', $cache = -1) {
}
// 商品购买人数获取
function dr_order_users($dir, $id) {
if (!is_dir(FCPATH.'module/order/') || !is_dir(FCPATH.'module/'.$dir)) {
return 0;
}
$ci = &get_instance();
return $ci->site[SITE_ID]->where('cid', (int)$id)->where('mid', $dir)->count_all_results(SITE_ID.'_order_buy');
}
// 获取商家自定义分类选项
function dr_get_shangjia_option($uid, $value, $name) {
}
// 获取商品属性
function dr_get_property($name, $catid, $value) {
if (!$catid) {
return NULL;
}
$ci = &get_instance();
$ci->load->model('property_model');
$data = $ci->property_model->get_cat_data($catid);
if (!$data) {
return NULL;
}
$html = '';
foreach ($data as $a) {
$html.= '<div class="sku-li" style="margin-bottom:10px;margin-top:10px;padding-bottom:20px">';
$html.= '<div style="border-bottom: 1px dashed #D7D7D7;margin-bottom:20px;padding:10px;"><b>'.$a['name'].'</b></div>';
$html.= '<table class="table" width="100%" border="0" cellspacing="0" cellpadding="0">';
if ($a['list']) {
foreach ($a['list'] as $t) {
$code = '';
$fname = 'data['.$name.']['.$t['cname'].']';
if ($t['type'] == 'text') {
$code = '<label><input class="form-control" type="text" name="'.$fname.'" value="'.$value[$t['cname']].'"></label>';
} elseif ($t['type'] == 'select') {
$code = '<label><select class="form-control" name="'.$fname.'">';
$code.= '<option value=""> --- </option>';
foreach ($t['value'] as $a => $b) {
$sl = @strlen($value[$t['cname']]) && $value[$t['cname']] == $a ? 'selected' : '';
$code.= '<option value="'.$a.'" '.$sl.'> '.$b.' </option>';
}
$code.= '</select></label>';
} elseif ($t['type'] == 'checkbox') {
$code.= '<label>';
foreach ($t['value'] as $a => $b) {
$sl = @in_array($a, $value[$t['cname']]) ? 'checked' : '';
$code.= '<label class="checkbox-inline"><input type="checkbox" name="'.$fname.'[]" value="'.$a.'" '.$sl.' /> '.$b.' </label>';
}
$code.= '</label>';
}
$html.= '<tr>
<td valign="top" width="100" style="text-align:right;border:none">'.$t['name'].': </td>
<td style="text-align:left;border:none">'.$code.'</td>
</tr>';
}
}
$html.= '</table>';
$html.= '</div>';
}
return $html;
}
function dr_get_spec_data($catid, $value = array()) {
if (!$catid) {
return NULL;
}
return dr_mall_spec($catid, $value);
}
// 获取商品规格
function dr_get_spec($name, $catid, $value) {
$data = dr_get_spec_data($catid, $value);
if (!$data) {
return NULL;
}
$i = 0;
$html = '';
foreach ($data as $t) {
$code = '';
$fname = 'data['.$name.'][option]['.$t['cname'].']';
foreach ($t['value'] as $a => $b) {
if ($t['type'] == 'color') {
if (strlen($a) == 1 && $a == '0') {
$sname = '<i class="color-box" style="background:url('.ADMIN_THEME.'admin/images/tm.png);"></i>'.$b;
} else {
$color = preg_match('/[a-z]+/', $a) ? $a : '#'.$a;
$sname = '<i class="color-box" style="background-color:'.$color.';"></i>'.$b;
}
} else {
$sname = $b;
}
isset($value['diy_value'][$a]) && $value['diy_value'][$a] && $sname.= '<input name="data['.$name.'][diy_value]['.$a.']" type="hidden" value="'.$b.'" />';
$sl = isset($value['option'][$t['cname']]) && dr_in_array($a, $value['option'][$t['cname']]) ? ' checked' : '';
$code.= '<li style="float:left;padding:0"><input onclick="dr_select_mall_spec()" type="checkbox" class="toggle md-check" name="'.$fname.'[]" value="'.$a.'" vname="'.$b.'" '.$sl.' /> <label>'.$sname.'</label> </li>';
}
$title = $t['name'];
// 自定义的可以删除
$t['type'] == 'diy' && $title = '<input name="data['.$name.'][diy_group]['.$t['cname'].']" type="hidden" value="'.$t['name'].'" /><input onclick="dr_spec_select_group(this, \''.$t['cname'].'\')" class="toggle md-check" type="checkbox" value="" checked /> <label>'.$t['name'].'</label>';
$html.= '<div class="sku-li">
<ul class="Father_Title">
<li title="'.$t['name'].'">'.$title.'</li>
</ul>
<div style="clear:both;"></div>
<ul class="Father_Item'.$i.'" id="dr_spec_item_'.$t['cname'].'">'.$code.'</ul>
<div style="clear:both;"></div>
<div class="Father_Footer"><input style="margin-top:-5px !important" onclick="dr_spec_add_value(this, \''.$t['cname'].'\')" class="toggle md-check" type="checkbox" value="" /> <label><input id="dr_spec_add_value_'.$t['cname'].'" placeholder="'.fc_lang('自定义').'" class="input-text" size="8" type="text" value=""></label> </div>
</div>';
$i ++;
}
return $html;
}
// 兼容性处理
function dr_in_array($a, $arr) {
if ($a == 0) {
if (!is_array($arr)) {
return false;
}
foreach ($arr as $t) {
if ($a == $t && strlen($a) == strlen($t)) {
return true;
}
}
return false;
}
return in_array($a, $arr);
}
// 店铺商品列表
function dr_space_mall_list_url($uid, $params, $name, $value, $page = FALSE) {
if ($name) {
if (strlen($value)) {
$params[$name] = $value;
} else {
unset($params[$name]);
}
}
if (is_array($params)) {
foreach ($params as $i => $t) {
if (strlen($t) == 0) unset($params[$i]);
}
}
$value = dr_rewrite_encode($params);
$ci = &get_instance();
$space = $ci->get_cache('member', 'setting', 'space');
$domain = dr_space_domain($uid);
$space['domain'] = $domain ? $domain : ($space['domain'] ? 'http://'.$space['domain'].'/' : '');
$space['dirname'] = 'space';
if ($domain) {
// 绑定域名时的情况
$rule = $page ? $space['rule']['umall_list_domain_page'] : $space['rule']['umall_list_domain_page'];
} else {
// 未绑定域名
$rule = $page ? $space['rule']['umall_list_page'] : $space['rule']['umall_list_page'];
}
if ($rule) {
return dr_uri_prefix('rewrite', $space, array(), SITE_FID).str_replace(array('{uid}', '{search}', '{page}'), array($uid, $value, '[page]'), $rule);
} else {
return dr_uri_prefix('php', $space, array(), SITE_FID).($domain ? '' : 'uid='.$uid.'&').'action=mall&search='.$value.($page ? '&page=[page]' : '');
}
}
// 获取cms域名部分
function dr_cms_domain_name($url) {
$param = parse_url($url);
if (isset($param['host']) && $param['host']) {
return $param['host'];
}
return $url;
}
// 星级显示
function dr_mall_star_level($num, $level = 5) {
$int = floor($num);
if (!$int) {
return '<i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i>';
}
$str = '';
for ($i=1; $i<$level; $i++) {
$str.= '<i title="'.$num.'" class="fa fa-star"></i>';
}
if ($int < $level) {
$str.= '<i title="'.$num.'" class="fa fa-star-half-o"></i>';
if ($level - $int > 1) {
for ($i=1; $i<$level - $int; $i++) {
$str.= '<i title="'.$num.'" class="fa fa-star-o"></i>';
}
}
}
return '<label title="'.$num.'">'.$str.'</label>';
}
/**
* url 编码
*/
function dr_url_encode($str) {
if (is_array($str)) {
foreach($str as $key=>$value) {
$str[urlencode($key)] = dr_url_encode($value);
}
} else {
$str = urlencode($str);
}
return $str;
}
function getIP()
{
static $realip;
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$realip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
function getCity($ip = '')
{
if($ip == ''){
$url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json";
$ip=json_decode(file_get_contents($url),true);
$data = $ip;
}else{
$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
$ip=json_decode(file_get_contents($url));
if((string)$ip->code=='1'){
return false;
}
$data = (array)$ip->data;
}
return $data;
} 