* @version: v2.0 * --------------------------------------------- * $Author: paulgao $ * $Date: 2006-12-28 22:27:30 +0800 (星期四, 28 十二月 2006) $ * $Id: lib_main.php 3882 2006-12-28 14:27:30Z paulgao $ */ if (!defined('IN_ECS')) { die("Hacking attempt"); } /** * 获得当前用户的信息 * * @access public * @return void */ function get_user_info() { $sql = "SELECT u.user_money, u.pay_points, u.user_rank, u.rank_points, IFNULL(b.type_money, 0) AS user_bonus ". "FROM " .$GLOBALS['ecs']->table('users'). " AS u ". "LEFT JOIN " .$GLOBALS['ecs']->table('user_bonus'). " AS ub ON ub.user_id = u.user_id AND ub.used_time = 0 ". "LEFT JOIN " .$GLOBALS['ecs']->table('bonus_type'). " AS b ON b.type_id = ub.bonus_type_id AND ". "b.use_startdate <= CURDATE() AND b.use_enddate >= CURDATE() ". "WHERE u.user_id = '$_SESSION[user_id]'"; if (($row = $GLOBALS['db']->GetRow($sql))) { $_SESSION['user_money'] = $row['user_money']; $_SESSION['user_points'] = $row['pay_points']; $_SESSION['user_bonus'] = $row['user_bonus']; /* 取得用户等级和折扣 */ if ($row['user_rank'] == 0) { // 非特殊等级,根据等级积分计算用户等级(注意:不包括特殊等级) $sql = "SELECT rank_id , discount FROM ".$GLOBALS['ecs']->table('user_rank')." WHERE special_rank = '0' AND min_points <= ".$row['rank_points']." AND max_points > ".$row['rank_points']; if ($row = $GLOBALS['db']->GetRow($sql)) { $_SESSION['user_rank'] = $row['rank_id']; $_SESSION['discount'] = $row['discount']/100.00 ; } else { $_SESSION['user_rank'] = 0; $_SESSION['discount'] = 1 ; } } else { // 特殊等级 $sql = "SELECT rank_id, discount FROM ".$GLOBALS['ecs']->table('user_rank'). " WHERE rank_id = '$row[user_rank]'"; if ($row = $GLOBALS['db']->GetRow($sql)) { $_SESSION['user_rank'] = $row['rank_id']; $_SESSION['discount'] = $row['discount']/100.00 ; } else { $_SESSION['user_rank'] = 0; $_SESSION['discount'] = 1 ; } } } $user['username'] = $_SESSION['user_name']; $user['email'] = $_SESSION['email']; $user['user_money'] = sprintf($GLOBALS['_CFG']['currency_format'], $_SESSION['user_money']); $user['user_points'] = $_SESSION['user_points']; $user['user_bonus'] = sprintf($GLOBALS['_CFG']['currency_format'], $_SESSION['user_bonus']); if(!empty($user['username'])) { setcookie('ECS[username]', $user['username'] , time() + 3600 * 34 * 30); } $GLOBALS['smarty']->assign('user_info', $user); } /** * 调用主导航上的所有商品分类 * * @access public * @return void */ function assign_nav() { /* 获得导航上的商品分类 */ $sql = "SELECT cat_id, cat_name FROM ".$GLOBALS['ecs']->table('category'). " WHERE show_in_nav = 1 ORDER BY sort_order"; $nav = array(); $row = $GLOBALS['db']->GetAll($sql); $idx = 0; foreach ($row AS $key=>$val) { $nav[$idx]['label'] = htmlspecialchars($val['cat_name']); $nav[$idx]['url'] = build_url('category', $val['cat_id']); if(basename($_SERVER['PHP_SELF']) == 'category.php') { $nav[$idx]['id'] = $val['cat_id']; } $idx++; } /* 获得导航上的文章分类 */ $sql = "SELECT cat_id, cat_name FROM ".$GLOBALS['ecs']->table('article_cat'). " WHERE show_in_nav = 1 ORDER BY sort_order"; $row = $GLOBALS['db']->getAll($sql); foreach ($row AS $key=>$val) { $nav[$idx]['label'] = htmlspecialchars($val['cat_name']); $nav[$idx]['url'] = build_url('article_cat', $val['cat_id']); $idx ++; } $GLOBALS['smarty']->assign('nav_list', $nav); } /** * 调用商品分类页、商品详情页、文章分类页以及文章内容页的当前位置 * * @access public * @param string $str 商品、文章标题以及其他附加的内容 * @param integer $cat 分类编号 * @return void */ function assign_ur_here($cat = 0, $str='') { global $db, $ecs, $smarty, $_CFG, $_LANG; $filename = substr(basename($_SERVER['PHP_SELF']), 0, -4); switch(substr($filename, 0, 3)) { case 'art': $type = 'article_cat'; break; default : $type = 'category'; } if ($type == 'category') { $cat_arr = get_parent_cats($cat); } else { $sql = "SELECT cat_name FROM " .$ecs->table('article_cat'). " WHERE cat_id='$cat'"; $cat_arr[0]['cat_id'] = $cat; $cat_arr[0]['cat_name'] = $db->GetOne($sql); } if ($filename != 'index') { $page_title = empty($str) ? '' : $str. '_'; foreach ($cat_arr AS $key=>$val) { $page_title .= htmlspecialchars($val['cat_name']) . '_'; } $page_title .= $_CFG['shop_title']; $ur_here = '' .$_LANG['home']. ''; krsort($cat_arr); foreach ($cat_arr AS $key=>$val) { $ur_here .= ' > ' . htmlspecialchars($val['cat_name']) . ''; } } else { $page_title = $_CFG['shop_title']; $ur_here = '' .$_LANG['home']. ''; } if (!empty($str)) { $ur_here .= ' > ' .$str; } $smarty->assign('page_title', $page_title); $smarty->assign('ur_here', $ur_here); } /** * 获得指定分类的所有上级分类 * * @access public * @param integer $cat 分类编号 * @return array */ function get_parent_cats($cat) { global $ecs, $db; $arr = $db->GetAll("SELECT cat_id, cat_name, parent_id FROM " .$ecs->table('category')); $cats = array(); $index = 0; while ($cat > 0) { foreach ($arr AS $row) { if ($cat == $row['cat_id']) { $cat = $row['parent_id']; $cats[$index]['cat_id'] = $row['cat_id']; $cats[$index]['cat_name'] = $row['cat_name']; $index++; break; } } } return $cats; } /** * 根据提供的数组编译成页面标题 * * @access public * @param string $type 类型 * @param array $arr 分类数组 * @return string */ function build_pagetitle($arr, $type='category') { $str = ''; foreach ($arr AS $key=>$val) { $str .= htmlspecialchars($val['cat_name']) . '_'; } return $str; } /** * 根据提供的数组编译成当前位置 * * @access public * @param string $type 类型 * @param array $arr 分类数组 * @return void */ function build_urhere($arr, $type='category') { $str = ''; krsort($arr); foreach ($arr AS $key=>$val) { $str .= ' > ' .htmlspecialchars($val['cat_name']) . ''; } return $str; } /** * 获得指定页面的动态内容 * * @access public * @param string $tmp 模板名称 * @return void */ function assign_dynamic($tmp) { global $ecs, $db; $sql = "SELECT id, number, type FROM " .$ecs->table('template'). " WHERE filename='$tmp' AND type > 0"; $row = $db->GetAll($sql); foreach ($row AS $key=>$val) { switch ($val['type']) { case 1: /* 分类下的商品 */ assign_cat_goods($val['id'], $val['number']); break; case 2: /* 品牌的商品 */ assign_brand_goods($val['id'], $val['number']); break; case 3: /* 文章列表 */ assign_articles($val['id'], $val['number']); break; } } } /** * 创建链接地址 * * @access public * @param string $type 链接地址的类型,如category, goods * @param string $id 链接地址的ID * @param string $append 附加的文字 * @param string $page 页数 * @param array $arr 包含参数的数组 * @return string */ function build_url($type, $id='', $append='', $page='', $arr=array()) { $rewrite = (isset($GLOBALS['_CFG']['rewrite']) && intval($GLOBALS['_CFG']['rewrite']) > 0); $uri = ''; if ($rewrite) { /* 启用了 url 重写 */ if (empty($id)) { /* 没有设置 id 参数,url直接就是类型 */ $uri = $type; } else { /* 设置了 id 参数 */ if ($type == 'search') { /* 当前类型为搜索,则id值为分类id */ $uri = "search-c$id"; } else { $uri = $type . '-' .$id; } } } else { /* 没有启用 url 重写 */ if ($type == 'search') { /* 当前的类型为搜索,则id为分类id */ $uri = 'search.php?category='.$id; } else { $uri = $type . '.php?id=' .$id; } } if (!empty($page)) { $uri .= $rewrite ? '-'. $page : "&page=$page"; } if (isset($arr['sort']) && !empty($arr['sort'])) { $uri .= $rewrite ? '-'. $arr['sort'] : "&sort=$arr[sort]"; } if (isset($arr['order']) && !empty($arr['order'])) { $uri .= $rewrite ? '-'. $arr['order'] : "&order=$arr[order]"; } if ($type == 'search') { if (isset($arr['brand'])) { $uri .= $rewrite ? '-b'. $arr['brand'] : "&brand=$arr[brand]"; } if (isset($arr['keywords'])) { $uri .= $rewrite ? '-k'. urlencode($arr['keywords']) : "&keywords=$arr[keywords]"; } if (isset($arr['price_min'])) { $uri .= $rewrite ? '-s'. $arr['price_min'] : "&price_min=$arr[price_min]"; } if (isset($arr['price_max'])) { $uri .= $rewrite ? '-l'. $arr['price_max'] : "&price_max=$arr[price_max]"; } } if ($rewrite) { if (intval($GLOBALS['_CFG']['rewrite']) == 2 && !empty($append)) { $uri .= '-' .urlencode(preg_replace('/\W+/', '', $append)); } $uri .= '.html'; } return $uri; } /** * 分配文章列表给smarty * * @access public * @param integer $id 文章分类的编号 * @param integer $num 文章数量 * @return void */ function assign_articles($id, $num) { global $ecs, $db, $smarty, $_CFG; $sql = "SELECT cat_name FROM " .$ecs->table('article_cat'). " WHERE cat_id='$id'"; $cat['id'] = $id; $cat['name'] = $db->GetOne($sql); $cat['url'] = build_url('article_cat', $id, $cat['name']); $smarty->assign('articles_cat_'. $id, $cat); /* 文章列表 */ $sql = "SELECT article_id, title, add_time, file_url, open_type ". "FROM " .$ecs->table('article'). " WHERE cat_id='$id' ORDER BY article_id DESC"; $res = $db->SelectLimit($sql, $num); $arr = array(); $idx = 0; while ($row = $res->FetchRow()) { $arr[$idx]['id'] = $row['article_id']; $arr[$idx]['title'] = $row['title']; $arr[$idx]['short_title'] = $_CFG['article_title_length'] > 0 ? sub_str($row['title'], 0, $_CFG['article_title_length']) : $row['title']; $arr[$idx]['add_time'] = date($_CFG['date_format'], $row['add_time']); $arr[$idx]['url'] = $row['open_type'] != 1 ? build_url('article', $row['article_id'], $row['title']) : trim($row['file_url']); $idx ++; } $smarty->assign('articles_'. $id, $arr); } /** * 分配帮助信息 * * @access public * @return void */ function assign_help() { global $ecs, $db, $_CFG, $smarty; $arr = array(); $sql = "SELECT c.cat_id, c.cat_name, c.sort_order, a.article_id, a.title, a.file_url, a.open_type ". "FROM " .$ecs->table('article'). " AS a ". "LEFT JOIN " .$ecs->table('article_cat'). " AS c ". "ON a.cat_id = c.cat_id WHERE c.cat_type=0 ". "ORDER BY c.sort_order ASC, a.article_id"; $row = $db->GetAll($sql); foreach ($row AS $key=>$val) { $arr[$val['cat_id']]['cat_name'] = $val['cat_name']; $arr[$val['cat_id']]['article'][$key]['article_id'] = $val['article_id']; $arr[$val['cat_id']]['article'][$key]['title'] = $val['title']; $arr[$val['cat_id']]['article'][$key]['short_title'] = $_CFG['article_title_length'] > 0 ? sub_str($val['title'], 0, $_CFG['article_title_length']) : $val['title']; $arr[$val['cat_id']]['article'][$key]['url'] = $val['open_type'] != 1 ? build_url('article', $val['article_id'], $val['title']) : trim($val['file_url']); } $smarty->assign('helps', $arr); } /** * 创建分页信息 * * @access public * @param string $app 程序名称,如category * @param string $cat 分类ID * @param string $record_count 记录总数 * @param string $size 每页记录数 * @param string $sort 排序类型 * @param string $order 排序顺序 * @param string $page 当前页 * @param string $keywords 查询关键字 * @param string $brand 品牌 * @param string $price_min 最小价格 * @param string $price_max 最高价格 * @return void */ function assign_pager($app, $cat, $record_count, $size, $sort, $order, $page = 1, $keywords='', $brand='', $price_min=0, $price_max=0) { global $smarty; $sch = array('keywords' => $keywords, 'sort' => $sort, 'order' => $order, 'brand' => $brand, 'price_min' => $price_min, 'price_max' => $price_max); if ($size < 1 )$size = 1; $page = intval($page); if ($page < 1) $page = 1; $page_count = intval(ceil($record_count / $size)); $page_prev = ($page > 1) ? $page - 1 : 1; $page_next = ($page < $page_count) ? $page + 1 : $page_count; $pager = array(); $pager['page'] = $page; $pager['size'] = $size; $pager['sort'] = $sort; $pager['order'] = $order; $pager['record_count'] = $record_count; $pager['page_count'] = $page_count; $pager['page_first'] = build_url($app, $cat, '', 1, $sch); $pager['page_prev'] = build_url($app, $cat, '', $page_prev, $sch); $pager['page_next'] = build_url($app, $cat, '', $page_next, $sch); $pager['page_last'] = build_url($app, $cat, '', $page_count, $sch); $pager['array'] = array(); for ($i = 1; $i <= $page_count; $i++) { $pager['array'][$i] = $i; } $pager['search']['category'] = $cat; foreach ($sch AS $key=>$val) { $pager['search'][$key] = $val; } $smarty->assign('pager', $pager); } /** * 调用调查内容 * * @access public * @return void */ function assign_vote($id='') { global $smarty, $ecs, $db; /* 随机取得一个调查的主题 */ if (empty($id)) { $sql = "SELECT vote_id, vote_name, can_multi, vote_count, RAND() AS rnd ". "FROM ".$ecs->table('vote')."". "WHERE begin_date <= CURDATE() AND end_date >= CURDATE() ". "ORDER BY rnd LIMIT 1"; } else { $sql = "SELECT vote_id, vote_name, can_multi, vote_count ". "FROM ".$ecs->table('vote'). " WHERE vote_id = '$id' "; } $vote_id = $db->GetRow($sql); if ($vote_id !== false) { /* 通过调查的ID,查询调查选项 */ @$sql_option = "SELECT v.*, o.option_id, o.vote_id, o.option_name, o.option_count ". "FROM ".$ecs->table('vote'). " AS v, ".$ecs->table('vote_option')." AS o ". "WHERE o.vote_id = v.vote_id AND o.vote_id = '$vote_id[vote_id]' "; $res = $db->Execute($sql_option) or die($db->ErrorMsg()); $arr = array(); if ($res !== false) { while ($row = $res->FetchRow()) { /* 总票数 */ $sql = "SELECT SUM(option_count) AS all_option FROM ".$ecs->table('vote_option')." ". "WHERE vote_id='".$row['vote_id']."' GROUP BY vote_id"; $option_num = $db->GetOne($sql); if ($row['vote_count'] > 0) { $arr[$row['vote_id']]['options'][$row['option_id']]['percent'] = sprintf("%.0f", ($row['option_count']/$option_num) * 100) ; } else { $arr[$row['vote_id']]['options'][$row['option_id']]['percent'] = 0; } $arr[$row['vote_id']]['vote_id'] = $row['vote_id']; $arr[$row['vote_id']]['vote_name'] = $row['vote_name']; $arr[$row['vote_id']]['can_multi'] = $row['can_multi']; $arr[$row['vote_id']]['vote_count'] = $row['vote_count']; $arr[$row['vote_id']]['options'][$row['option_id']]['option_id'] = $row['option_id']; $arr[$row['vote_id']]['options'][$row['option_id']]['option_name'] = $row['option_name']; $arr[$row['vote_id']]['options'][$row['option_id']]['option_count'] = $row['option_count']; } } $vote_id['vote_id'] = (!empty($vote_id['vote_id'])) ? $vote_id['vote_id'] : ''; $smarty->assign('vote_id', $vote_id['vote_id']); $smarty->assign('vote', $arr); } else { die($db->ErrorMsg()); } } /** * 查询评论内容 * * @access public * @return void */ function assign_comment($id, $type, $page = 1) { global $db, $ecs, $_CFG, $smarty; /* 取得评论列表 */ $arr = array(); $pager = array(); $count = $db->GetOne("SELECT COUNT(*) FROM " .$ecs->table('comment'). " WHERE id_value = '$id' AND comment_type = $type AND status = 1"); $size = isset($_CFG['comments_number']) && intval($_CFG['comments_number']) > 0 ? $_CFG['comments_number'] : 5; $page_count = intval(ceil($count / $size)); $sql = "SELECT * FROM " .$ecs->table('comment'). " ". "WHERE id_value='$id' AND comment_type='$type' AND status = 1 ". "ORDER BY comment_id DESC"; $res = $db->SelectLimit($sql, $size, ($page-1) * $size) or die($GLOBALS['db']->errorMsg()) ; while ($row = $res->FetchRow()) { /* 取得已有回复的评论 */ $reply_res = $db->GetRow("SELECT * FROM " .$ecs->table('comment'). " WHERE parent_id= '".$row['comment_id']."'"); $arr[$row['comment_id']]['re_content'] = nl2br(htmlspecialchars($reply_res['content'])); $arr[$row['comment_id']]['re_add_time'] = date($_CFG['time_format'], $reply_res['add_time']); $arr[$row['comment_id']]['re_email'] = $reply_res['email']; $arr[$row['comment_id']]['re_username'] = $reply_res['user_name']; $arr[$row['comment_id']]['id'] = $row['comment_id']; $arr[$row['comment_id']]['email'] = $row['email']; $arr[$row['comment_id']]['username'] = $row['user_name']; $arr[$row['comment_id']]['content'] = nl2br(htmlspecialchars($row['content'])); $arr[$row['comment_id']]['rank'] = $row['comment_rank']; $arr[$row['comment_id']]['add_time'] = date($_CFG['time_format'], $row['add_time']); } $pager['page'] = $page; $pager['size'] = $size; $pager['record_count'] = $count; $pager['page_count'] = $page_count; $pager['page_first'] = "javascript:gotoPage(1, $id, $type)"; $pager['page_prev'] = $page > 1 ? "javascript:gotoPage(" .($page-1). ", $id, $type)" : 'javascript:;'; $pager['page_next'] = $page < $page_count ? 'javascript:gotoPage(' .($page + 1) . ", $id, $type)" : 'javascript:;'; $pager['page_last'] = $page < $page_count ? 'javascript:gotoPage(' .$page_count. ", $id, $type)" : 'javascript:;'; /* 验证码相关设置 */ if ($GLOBALS['_CFG']['comment_captcha'] && gd_version() > 0) { $GLOBALS['smarty']->assign('enabled_captcha', 1); $GLOBALS['smarty']->assign('rand', mt_rand()); } $smarty->assign('username', $_SESSION['user_name']); $smarty->assign('email', $_SESSION['email']); $smarty->assign('comments', $arr); $smarty->assign('pager', $pager); $smarty->assign('comment_type', $type); $smarty->assign('id', $id); } /** * 获得浏览器名称和版本 * * @access public * @return string */ function getbrowser() { global $_SERVER; $agent = $_SERVER['HTTP_USER_AGENT']; $browser = ''; $browser_ver = ''; if (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i', $agent, $regs)) { $browser = 'OmniWeb'; $browser_ver = $regs[2]; } if (preg_match('/Netscape([\d]*)\/([^\s]+)/i', $agent, $regs)) { $browser = 'Netscape'; $browser_ver = $regs[2]; } if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) { $browser = 'Safari'; $browser_ver = $regs[1]; } if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) { $browser = 'Internet Explorer'; $browser_ver = $regs[1]; } if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) { $browser = 'Opera'; $browser_ver = $regs[1]; } if (preg_match('/NetCaptor\s([^\s|;]+)/i', $agent, $regs)) { $browser = '(Internet Explorer ' .$browser_ver. ') NetCaptor'; $browser_ver = $regs[1]; } if (preg_match('/Maxthon/i', $agent, $regs)) { $browser = '(Internet Explorer ' .$browser_ver. ') Maxthon'; $browser_ver = ''; } if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) { $browser = 'FireFox'; $browser_ver = $regs[1]; } if (preg_match('/Lynx\/([^\s]+)/i', $agent, $regs)) { $browser = 'Lynx'; $browser_ver = $regs[1]; } if ($browser != '') { return $browser.' '.$browser_ver; } else { return 'Unknow browser'; } } /** * 获得客户端的操作系统 * * @access private * @return void */ function get_os() { $agent = $_SERVER['HTTP_USER_AGENT']; $os = false; if (eregi('win', $agent) && strpos($agent, '95')) { $os = 'Windows 95'; } elseif (eregi('win 9x', $agent) && strpos($agent, '4.90')) { $os = 'Windows ME'; } elseif (eregi('win', $agent) && ereg('98', $agent)) { $os = 'Windows 98'; } elseif (eregi('win', $agent) && eregi('nt 5.1', $agent)) { $os = 'Windows XP'; } elseif (eregi('win', $agent) && eregi('nt 5', $agent)) { $os = 'Windows 2000'; } elseif (eregi('win', $agent) && eregi('nt', $agent)) { $os = 'Windows NT'; } elseif (eregi('win', $agent) && ereg('32', $agent)) { $os = 'Windows 32'; } elseif (eregi('linux', $agent)) { $os = 'Linux'; } elseif (eregi('unix', $agent)) { $os = 'Unix'; } elseif (eregi('sun', $agent) && eregi('os', $agent)) { $os = 'SunOS'; } elseif (eregi('ibm', $agent) && eregi('os', $agent)) { $os = 'IBM OS/2'; } elseif (eregi('Mac', $agent) && eregi('PC', $agent)) { $os = 'Macintosh'; } elseif (eregi('PowerPC', $agent)) { $os = 'PowerPC'; } elseif (eregi('AIX', $agent)) { $os = 'AIX'; } elseif (eregi('HPUX', $agent)) { $os = 'HPUX'; } elseif (eregi('NetBSD', $agent)) { $os = 'NetBSD'; } elseif (eregi('BSD', $agent)) { $os = 'BSD'; } elseif (ereg('OSF1', $agent)) { $os = 'OSF1'; } elseif (ereg('IRIX', $agent)) { $os = 'IRIX'; } elseif (eregi('FreeBSD', $agent)) { $os = 'FreeBSD'; } elseif (eregi('teleport', $agent)) { $os = 'teleport'; } elseif (eregi('flashget', $agent)) { $os = 'flashget'; } elseif (eregi('webzip', $agent)) { $os = 'webzip'; } elseif (eregi('offline', $agent)) { $os = 'offline'; } else { $os = 'Unknown'; } return $os; } /** * 统计访问信息 * * @access public * @return void */ function visit_stats() { global $ecs, $db; include_once(ROOT_PATH.'includes/ip/cls_ip.php'); include_once(ROOT_PATH.'includes/iconv/cls_iconv.php'); $ip_search = new ip_search(); $iconv = new Chinese(); /* 检查客户端是否存在访问统计的cookie */ $visit_times = (!empty($_COOKIE['ECS']['visit_times'])) ? intval($_COOKIE['ECS']['visit_times']) + 1 : 1; setcookie('ECS[visit_times]', $visit_times, time()+3600*24*365, '/'); $browser = getbrowser(); $os = get_os(); $ip = real_ip(); $ip_area = $ip_search->getlocation($ip); $area = $iconv->convert("GB2312", "UTF8", $ip_area['country']); $keywords = ''; /* 语言 */ $pos = strpos(@$_SERVER['HTTP_ACCEPT_LANGUAGE'], ';'); $lang = ($pos !== false) ? @substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, $pos) : @$_SERVER['HTTP_ACCEPT_LANGUAGE']; /* 来源 */ $pos = @strpos($_SERVER['HTTP_REFERER'], '/', 9); $domain = @substr($_SERVER['HTTP_REFERER'], 0, $pos); $path = @substr($_SERVER['HTTP_REFERER'], $pos); /* 来源关键字 */ if (!empty($path)) { if (strpos($domain, 'google.') !== false && preg_match('/q=([^&]*)/i', $path, $regs)) { $keywords = urldecode($regs[1]); // google } if (strpos($domain, 'baidu.') !== false && preg_match('/wd=([^&]*)/i', $path, $regs)) { $keywords = $iconv->convert('GB2312', 'UTF8', urldecode($regs[1])); // baidu } if (strpos($domain, 'baidu.') !== false && preg_match('/word=([^&]*)/i', $path, $regs)) { $keywords = $iconv->convert('GB2312', 'UTF8', urldecode($regs[1])); // baidu } if (strpos($domain, 'yahoo.') !== false && preg_match('/p=([^&]*)/i', $path, $regs)) { $keywords = urldecode($regs[1]); // yahoo } if (strpos($domain, 'msn.') !== false && preg_match('/q=([^&]*)/i', $path, $regs)) { $keywords = urldecode($regs[1]); // msn } } $sql = "INSERT INTO ".$ecs->table('stats'). " ( ". "ip_address, visit_times, browser, system, language, area, referer_domain, ". "referer_path, keywords, access_url, access_time". ") VALUES (". "'$ip', '$visit_times', '$browser', '$os', '$lang', '$area', '$domain', '$path', ". "'$keywords', '$_SERVER[PHP_SELF]', '" .time(). "')"; $db->Execute($sql) or die($db->ErrorMsg()); } /** * 调用网店的相关声明 * * @access public * @return void */ function assign_declaration() { global $smarty, $cp, $ecs, $db; $sql = "SELECT article_id, title, file_url, open_type FROM " .$ecs->table('article'). " WHERE cat_id = 0 ORDER BY article_id"; $row = $db->getAll($sql); $arr = array(); foreach ($row AS $key=>$article) { $arr[$key]['url'] = $article['open_type'] != 1 ? build_url('article', $article['article_id'], $article['title']) : trim($article['file_url']); $arr[$key]['title'] = htmlspecialchars($article['title']); } return $arr; } /** * 获得购物车中商品的总重量和总价格 * * @access public * @return array */ function cart_weight_price() { global $ecs, $db; /* 获得购物车中商品的总重量 */ $sql = "SELECT SUM(g.goods_weight) * c.goods_number AS weight, ". "SUM(c.goods_price) * c.goods_number AS amount ". "FROM " .$ecs->table('cart'). " AS c ". "LEFT JOIN " .$ecs->table('goods'). " AS g ON g.goods_id=c.goods_id ". "WHERE c.session_id='".SESS_ID."'"; $row = $db->getRow($sql); return $row; } /** * 调用发货单查询 * * @access public * @return void */ function assign_invoice_query() { global $ecs, $db, $smarty; $sql = "SELECT o.order_sn, o.invoice_no, s.shipping_code FROM " .$ecs->table('order_info'). " AS o". " LEFT JOIN " .$ecs->table('shipping'). " AS s ON s.shipping_id = o.shipping_id". " WHERE invoice_no > '' AND shipping_status = " .SS_SHIPPED. " ORDER BY shipping_time DESC LIMIT 10"; $all = $db->getAll($sql); foreach ($all AS $key=>$row) { $plugin = ROOT_PATH.'includes/modules/shipping/'. $row['shipping_code']. '.php'; if (file_exists($plugin)) { include_once(ROOT_PATH.'includes/modules/shipping/'. $row['shipping_code']. '.php'); $shipping = new $row['shipping_code']; $all[$key]['invoice_no'] = $shipping->query($row['invoice_no']); } } clearstatcache(); $smarty->assign('invoice_list', $all); } /** * 获得最新的文章列表。 * * @access public * * @return void */ function assign_new_articles() { global $ecs, $db, $smarty, $_CFG; $sql = "SELECT T1.article_id, T1.title, T2.cat_name , T1.add_time, T1.file_url, T1.open_type, T2.cat_id FROM ".$ecs->table('article'). " AS T1, ".$ecs->table('article_cat')." AS T2". " WHERE T1.is_open= 1 AND T1.cat_id = T2.cat_id AND T2.cat_type = 1". " ORDER BY T1.article_type DESC, T1.add_time DESC "; $res= $db->SelectLimit($sql,$_CFG['article_number']); $arr = array(); $idx = 0; while ($row = $res->FetchRow()) { $arr[$idx]['id'] = $row['article_id']; $arr[$idx]['title'] = $row['title']; $arr[$idx]['short_title'] = $_CFG['article_title_length'] > 0 ? sub_str($row['title'], 0, $_CFG['article_title_length']) : $row['title']; $arr[$idx]['cat_name'] = $row['cat_name']; $arr[$idx]['add_time'] = date($_CFG['date_format'], $row['add_time']); $arr[$idx]['url'] = $row['open_type'] != 1 ? build_url('article', $row['article_id'], $row['title']) : trim($row['file_url']); $arr[$idx]['cat_url'] = build_url('article_cat', $row['cat_id']); $idx ++; } $smarty->assign('new_articles', $arr); } /** * 获得指定用户、商品的所有标记 * * @access public * @param integer $goods_id * @param integer $user_id * @return array */ function get_tags($goods_id = 0, $user_id = 0) { $where = ''; if ($goods_id > 0) { $where .= "AND goods_id='$goods_id'"; } if ($user_id > 0) { $where .= "AND user_id='$user_id'"; } $arr = array(); $sql = "SELECT tag_id, user_id, tag_words, COUNT(tag_id) AS tag_count". " FROM ".$GLOBALS['ecs']->table('tag'). " WHERE 1 $where GROUP BY tag_words ORDER BY tag_count DESC, tag_id"; $res = $GLOBALS['db']->execute($sql); while ($row = $res->fetchRow()) { $arr[$row['tag_id']] = array('tag_id' => $row['tag_id'], 'user_id' => $row['user_id'], 'tag_words' => $row['tag_words'], 'tag_count' =>$row['tag_count'] ); } return $arr; } /** * 将需要输出到页面的插件的内容赋值给模板引擎 * * @access public * @return void */ function assign_plugins() { /* 获得所有已安装且需要赋值的插件 */ $sql = "SELECT code FROM ".$GLOBALS['ecs']->table('plugins')." WHERE assign = 1"; $all = $GLOBALS['db']->getAll($sql); /* 遍历所有需要赋值的插件,并调用相应的函数 */ foreach ($all AS $key=>$val) { include_once(ROOT_PATH.'plugins/'.$val['code'].'/'.$val['code'].'_inc.php'); $plugin = new $val['code']; $plugin->assign_val(); } } /** * 检查指定goods_id有没有参与夺宝奇兵 * * @access public * @param int goods_id 商品id * * @return array() */ function snatch_goods($goods_id) { $cur_time = time(); $snatch = array(); $sql = "SELECT T2.snatch_id, T1.end_time FROM ".$GLOBALS['ecs']->table('activity')." AS T1 , ".$GLOBALS['ecs']->table('snatch')." AS T2 ". "WHERE T1.activity_id = T2.activity_id AND goods_id = '$goods_id' AND start_time <= '$cur_time' AND end_time > '$cur_time' "; $row = $GLOBALS['db']->GetRow($sql); if($row) { $snatch['snatch_id'] = $row['snatch_id']; $snatch['url'] = build_url('snatch', $row['snatch_id']); $snatch['end_time'] = $row['end_time']; } return $snatch; } /** * 获取指定主题某个模板的主题的动态模块 * * @access public * @param string $theme 模板主题 * @param string $tmp 模板名称 * * @return array() */ function get_dyna_libs($theme,$tmp) { $tmp = substr($tmp, 0, strrpos($tmp, '.dwt')); $sql = "SELECT region, library, sort_order, id, number, type". " FROM " .$GLOBALS['ecs']->table('template'). " WHERE theme = '$theme' AND filename='$tmp' AND type > 0". " ORDER BY region, library, sort_order"; $rec = $GLOBALS['db']->Execute($sql); $dyna_libs = array(); while($row = $rec->FetchRow()) { $dyna_libs[$row['region']][$row['library']][] = array('id'=>$row['id'], 'number'=>$row['number'], 'type'=>$row['type']); } return $dyna_libs; } /** * 替换动态模块 * * @access public * @param string $matches 匹配内容 * * @return string 结果 */ function dyna_libs_replace($matches) { $key = '/'.$matches[1]; if ($row = array_shift($GLOBALS['libs'][$key]) ) { $str = ''; switch($row['type']) { case 1: // 分类的商品 $str = '{assign var="cat_goods" value=$cat_goods_' .$row['id']. '}{assign var="goods_cat" value=$goods_cat_' .$row['id']. '}'; break; case 2: // 品牌的商品 $str = '{assign var="brand_goods" value=$brand_goods_' .$row['id']. '}{assign var="goods_brand" value=$goods_brand_' .$row['id']. '}'; break; case 3: // 文章列表 $str = '{assign var="articles" value=$articles_' .$row['id']. '}{assign var="articles_cat" value=$articles_cat_' .$row['id']. '}'; break; case 4: //广告位 $str = '{assign var="ads_id" value=' .$row['id']. '}{assign var="ads_num" value=' .$row['number']. '}'; break; } return $str.$matches[0]; } else { return $matches[0]; } } /** * 团购赋值 * * @access public * @param object $smarty * @return void */ function assign_group_buy() { $sql = "SELECT gb.*, g.goods_name, g.shop_price, g.goods_thumb, g.goods_img ". "FROM ".$GLOBALS['ecs']->table('group_buy')." AS gb, ".$GLOBALS['ecs']->table('goods')." AS g ". "WHERE g.goods_id = gb.goods_id ". "AND gb.start_date <= '".time()."' AND gb.end_date >= '".time()."' ". "ORDER BY gb.group_buy_id DESC"; $res = $GLOBALS['db']->SelectLimit($sql, $GLOBALS['_CFG']['group_goods_number']) or die($GLOBALS['db']->ErrorMsg()); $goods = array(); $idx = 0; while ($row = $res->FetchRow()) { $goods[$idx]['goods_id'] = $row['goods_id']; $goods[$idx]['group_buy_id'] = $row['group_buy_id']; $goods[$idx]['goods_name'] = $row['goods_name']; $goods[$idx]['thumb'] = empty($row['goods_thumb']) ? $GLOBALS['_CFG']['no_picture'] : $row['goods_thumb']; $goods[$idx]['goods_img'] = empty($row['goods_img']) ? $GLOBALS['_CFG']['no_picture'] : $row['goods_img']; $goods[$idx]['price_ladder'] = unserialize($row['price_ladder']); $price_ladder = $goods[$idx]['price_ladder']; ksort($price_ladder); $goods[$idx]['last_price'] = price_format(end($price_ladder)); $idx++; } $GLOBALS['smarty']->assign('lowest_price_buy', $GLOBALS['_LANG']['lowest_price_buy']); $GLOBALS['smarty']->assign('group_buy_goods', $goods); } /** * 处理上传文件,并返回上传图片名(上传失败时返回图片名为空) * * @access public * @param array $upload $_FILES 数组 * @param array $type 图片所属类别,即data目录下的文件夹名 * * @return string 上传图片名 */ function upload_file($upload, $type) { if(!empty($upload['tmp_name'])) { $name = date("Ymd"); for($i = 0; $i < 6; $i++) { $name .= chr(rand(97, 122)); } $name .= substr(preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $upload['name']), -4); if ($upload['type'] == 'image/png' || $upload['type'] == 'image/x-png' || $upload['type'] == 'image/jpeg' || $upload['type'] == 'image/pjpeg' || $upload['type'] == 'image/gif' || $upload['type'] == 'application/msword' || $upload['type'] == 'application/vnd.ms-excel' || $upload['type'] == 'text/plain' || $upload['type'] == 'application/x-zip-compressed' || $upload['type'] == 'application/vnd.ms-powerpoint' || $upload['type'] == 'application/pdf') { $target = ROOT_PATH . 'data/' . $type; $target = $target."/".$_SESSION['user_id']. '_' .$name; if (!move_uploaded_file($upload['tmp_name'], $target)) { return false; } else { return $_SESSION['user_id']. '_' .$name; } } else { return false; } } } /*------------------------------------------------------ */ //-- 以下4个smarty为注册string资源函数 /*------------------------------------------------------ */ /** * smarty 检索资源函数 * * @param: $tpl_name[string] 模板代码 * @param: $tpl_source[string] 模板内容 * @param: $smarty_obj[object] smarty 对象 * * @return boolean */ function str_get_template ($tpl_name, &$tpl_source, &$smarty_obj) { $tpl_source = $tpl_name; return true; } /** * smarty 请求资源的最后修改时间函数 * * @param: $tpl_name[string] 模板代码 * @param: $tpl_timestamp[string] UNIX 时间戳 * @param: $smarty_obj[object] smarty 对象 * * @return boolean */ function str_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { $tpl_timestamp = time(); return true; } /** * smarty 确认资源是否安全 * * @param: $tpl_name[string] 模板代码 * @param: $smarty_obj[object] smarty 对象 * * @return boolean */ function str_get_secure($tpl_name, &$smarty_obj) { /* 全部安全 */ return true; } /** * smarty 确认资源是值的信任 * * @param: $tpl_name[string] 模板代码 * @param: $smarty_obj[object] smarty 对象 * * @return boolean */ function str_get_trusted($tpl_name, &$smarty_obj) { /* 不使用该函数 */ } ?>