<?php
|
|
/**
|
* 商品详情
|
*/
|
|
define('IN_ECS', true);
|
|
require(dirname(__FILE__) . '/includes/init.php');
|
require(dirname(__FILE__) . '/includes/lib_comment.php');
|
|
if ((DEBUG_MODE & 2) != 2)
|
{
|
$smarty->caching = true;
|
}
|
|
$affiliate = unserialize($GLOBALS['_CFG']['affiliate']);
|
$smarty->assign('affiliate', $affiliate);
|
|
/*------------------------------------------------------ */
|
//-- INPUT
|
/*------------------------------------------------------ */
|
|
$goods_id = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : 0;
|
|
/*------------------------------------------------------ */
|
//-- 改变属性、数量时重新计算商品价格
|
/*------------------------------------------------------ */
|
|
if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'price')
|
{
|
include('includes/cls_json.php');
|
|
$json = new JSON;
|
$res = array('err_msg' => '', 'result' => '', 'qty' => 1);
|
|
$attr_id = isset($_REQUEST['attr']) ? explode(',', $_REQUEST['attr']) : array();
|
$number = (isset($_REQUEST['number'])) ? intval($_REQUEST['number']) : 1;
|
|
if ($goods_id == 0)
|
{
|
$res['err_msg'] = $_LANG['err_change_attr'];
|
$res['err_no'] = 1;
|
}
|
else
|
{
|
if ($number == 0)
|
{
|
$res['qty'] = $number = 1;
|
}
|
else
|
{
|
$res['qty'] = $number;
|
}
|
|
$shop_price = get_final_price($goods_id, $number, true, $attr_id);
|
$market_price = get_mar_price($goods_id);
|
$res['result'] = price_format($shop_price * $number);
|
}
|
|
die($json->encode($res));
|
}
|
|
|
/*------------------------------------------------------ */
|
//-- 商品购买记录ajax处理
|
/*------------------------------------------------------ */
|
|
if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'gotopage')
|
{
|
include('includes/cls_json.php');
|
|
$json = new JSON;
|
$res = array('err_msg' => '', 'result' => '');
|
|
$goods_id = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : 0;
|
$page = (isset($_REQUEST['page'])) ? intval($_REQUEST['page']) : 1;
|
|
if (!empty($goods_id))
|
{
|
$need_cache = $GLOBALS['smarty']->caching;
|
$need_compile = $GLOBALS['smarty']->force_compile;
|
|
$GLOBALS['smarty']->caching = false;
|
$GLOBALS['smarty']->force_compile = true;
|
|
/* 商品购买记录 */
|
$sql = 'SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status ' .
|
'FROM ' . $ecs->table('order_info') . ' AS oi LEFT JOIN ' . $ecs->table('users') . ' AS u ON oi.user_id = u.user_id, ' . $ecs->table('order_goods') . ' AS og ' .
|
'WHERE oi.order_id = og.order_id AND ' . time() . ' - oi.add_time < 2592000 AND og.goods_id = ' . $goods_id . ' ORDER BY oi.add_time DESC LIMIT ' . (($page > 1) ? ($page-1) : 0) * 5 . ',5';
|
$bought_notes = $db->getAll($sql);
|
|
foreach ($bought_notes as $key => $val)
|
{
|
$bought_notes[$key]['add_time'] = local_date("Y-m-d G:i:s", $val['add_time']);
|
}
|
|
$sql = 'SELECT count(*) ' .
|
'FROM ' . $ecs->table('order_info') . ' AS oi LEFT JOIN ' . $ecs->table('users') . ' AS u ON oi.user_id = u.user_id, ' . $ecs->table('order_goods') . ' AS og ' .
|
'WHERE oi.order_id = og.order_id AND ' . time() . ' - oi.add_time < 2592000 AND og.goods_id = ' . $goods_id;
|
$count = $db->getOne($sql);
|
|
|
/* 商品购买记录分页样式 */
|
$pager = array();
|
$pager['page'] = $page;
|
$pager['size'] = $size = 5;
|
$pager['record_count'] = $count;
|
$pager['page_count'] = $page_count = ($count > 0) ? intval(ceil($count / $size)) : 1;;
|
$pager['page_first'] = "javascript:gotoBuyPage(1,$goods_id)";
|
$pager['page_prev'] = $page > 1 ? "javascript:gotoBuyPage(" .($page-1). ",$goods_id)" : 'javascript:;';
|
$pager['page_next'] = $page < $page_count ? 'javascript:gotoBuyPage(' .($page + 1) . ",$goods_id)" : 'javascript:;';
|
$pager['page_last'] = $page < $page_count ? 'javascript:gotoBuyPage(' .$page_count. ",$goods_id)" : 'javascript:;';
|
|
$smarty->assign('notes', $bought_notes);
|
$smarty->assign('pager', $pager);
|
|
|
$res['result'] = $GLOBALS['smarty']->fetch('library/bought_notes.lbi');
|
|
$GLOBALS['smarty']->caching = $need_cache;
|
$GLOBALS['smarty']->force_compile = $need_compile;
|
}
|
|
die($json->encode($res));
|
}
|
|
|
/*------------------------------------------------------ */
|
//-- PROCESSOR
|
/*------------------------------------------------------ */
|
|
$cache_id = $goods_id . '-' . $_SESSION['user_rank'].'-'.$_CFG['lang'];
|
$cache_id = sprintf('%X', crc32($cache_id));
|
if (!$smarty->is_cached('pro_goods.dwt', $cache_id))
|
{
|
$smarty->assign('image_width', $_CFG['image_width']);
|
$smarty->assign('image_height', $_CFG['image_height']);
|
$smarty->assign('helps', get_shop_help()); // 网店帮助
|
$smarty->assign('id', $goods_id);
|
$smarty->assign('type', 0);
|
$smarty->assign('cfg', $_CFG);
|
$smarty->assign('promotion', get_promotion_info($goods_id));//促销信息
|
$smarty->assign('promotion_info', get_promotion_info());
|
|
/* 获得商品的信息 */
|
$goods = get_goods_info($goods_id);
|
|
if ($goods === false)
|
{
|
/* 如果没有找到任何记录则跳回到首页 */
|
ecs_header("Location: ./\n");
|
exit;
|
}
|
else
|
{
|
if ($goods['brand_id'] > 0)
|
{
|
$goods['goods_brand_url'] = build_uri('brand', array('bid'=>$goods['brand_id']), $goods['goods_brand']);
|
}
|
|
$shop_price = $goods['shop_price'];
|
$linked_goods = get_linked_goods($goods_id);
|
|
$goods['goods_style_name'] = add_style($goods['goods_name'], $goods['goods_name_style']);
|
|
/* 购买该商品可以得到多少钱的红包 */
|
if ($goods['bonus_type_id'] > 0)
|
{
|
$time = gmtime();
|
$sql = "SELECT type_money FROM " . $ecs->table('bonus_type') .
|
" WHERE type_id = '$goods[bonus_type_id]' " .
|
" AND send_type = '" . SEND_BY_GOODS . "' " .
|
" AND send_start_date <= '$time'" .
|
" AND send_end_date >= '$time'";
|
$goods['bonus_money'] = floatval($db->getOne($sql));
|
if ($goods['bonus_money'] > 0)
|
{
|
$goods['bonus_money'] = price_format($goods['bonus_money']);
|
}
|
}
|
|
$smarty->assign('goods', $goods);
|
$smarty->assign('goods_id', $goods['goods_id']);
|
$smarty->assign('promote_end_time', $goods['gmt_end_time']);
|
$smarty->assign('categories', get_categories_tree($goods['cat_id'])); // 分类树
|
|
|
|
$smarty->assign('zhekou', get_zhekou($goods['goods_id']));
|
|
|
$smarty->assign('jiesheng', get_jiesheng($goods['goods_id']));
|
|
|
|
|
/* meta */
|
$smarty->assign('keywords', htmlspecialchars($goods['keywords']));
|
$smarty->assign('description', htmlspecialchars($goods['goods_brief']));
|
|
|
$catlist = array();
|
foreach(get_parent_cats($goods['cat_id']) as $k=>$v)
|
{
|
$catlist[] = $v['cat_id'];
|
}
|
|
assign_template('c', $catlist);
|
|
/* 上一个商品下一个商品 */
|
$prev_gid = $db->getOne("SELECT goods_id FROM " .$ecs->table('goods'). " WHERE cat_id=" . $goods['cat_id'] . " AND goods_id > " . $goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0 LIMIT 1");
|
if (!empty($prev_gid))
|
{
|
$prev_good['url'] = build_uri('goods', array('gid' => $prev_gid), $goods['goods_name']);
|
$smarty->assign('prev_good', $prev_good);//上一个商品
|
}
|
|
$next_gid = $db->getOne("SELECT max(goods_id) FROM " . $ecs->table('goods') . " WHERE cat_id=".$goods['cat_id']." AND goods_id < ".$goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0");
|
if (!empty($next_gid))
|
{
|
$next_good['url'] = build_uri('goods', array('gid' => $next_gid), $goods['goods_name']);
|
$smarty->assign('next_good', $next_good);//下一个商品
|
}
|
|
$position = assign_ur_here($goods['cat_id'], $goods['goods_name']);
|
|
/* current position */
|
$smarty->assign('page_title', $position['title']); // 页面标题
|
$smarty->assign('ur_here', $position['ur_here']); // 当前位置
|
|
$properties = get_goods_properties($goods_id); // 获得商品的规格和属性
|
|
$smarty->assign('properties', $properties['pro']); // 商品属性
|
$smarty->assign('specification', $properties['spe']); // 商品规格
|
$smarty->assign('attribute_linked', get_same_attribute_goods($properties)); // 相同属性的关联商品
|
$smarty->assign('related_goods', $linked_goods); // 关联商品
|
$smarty->assign('goods_article_list', get_linked_articles($goods_id)); // 关联文章
|
$smarty->assign('fittings', get_goods_fittings(array($goods_id))); // 配件
|
$smarty->assign('rank_prices', get_user_rank_prices($goods_id, $shop_price)); // 会员等级价格
|
$smarty->assign('pictures', get_goods_gallery($goods_id)); // 商品相册
|
$smarty->assign('bought_goods', get_also_bought($goods_id)); // 购买了该商品的用户还购买了哪些商品
|
$smarty->assign('goods_rank', get_goods_rank($goods_id)); // 商品的销售排
|
$smarty->assign('promotion_goods', get_promote_goods_group()); // 特价商品
|
$smarty->assign('top_goods', get_top10()); // 销售排行
|
|
$count1 = $GLOBALS['db']->getOne("SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('comment') . " where comment_type=0 and id_value ='$goods_id' and status=1");
|
$smarty->assign('review_count', $count1);
|
|
|
|
//获取tag
|
$tag_array = get_tags($goods_id);
|
$smarty->assign('tags', $tag_array); // 商品的标记
|
|
//获取关联礼包
|
$package_goods_list = get_package_goods_list($goods['goods_id']);
|
$smarty->assign('package_goods_list',$package_goods_list); // 获取关联礼包
|
|
assign_dynamic('goods');
|
$volume_price_list = get_volume_price_list($goods['goods_id'], '1');
|
$smarty->assign('volume_price_list',$volume_price_list); // 商品优惠价格区间
|
|
//评价晒单
|
$rank_num['rank_a'] = $db->getOne("SELECT COUNT(*) AS num FROM ".$ecs->table('comment')." WHERE id_value = '$goods_id' AND status = 1 AND comment_rank in (5,4)");
|
$rank_num['rank_b'] = $db->getOne("SELECT COUNT(*) AS num FROM ".$ecs->table('comment')." WHERE id_value = '$goods_id' AND status = 1 AND comment_rank in (3,2)");
|
$rank_num['rank_c'] = $db->getOne("SELECT COUNT(*) AS num FROM ".$ecs->table('comment')." WHERE id_value = '$goods_id' AND status = 1 AND comment_rank = 1");
|
$rank_num['rank_total'] = $rank_num['rank_a'] + $rank_num['rank_b'] + $rank_num['rank_c'];
|
$rank_num['rank_pa'] = ($rank_num['rank_a'] > 0) ? round(($rank_num['rank_a'] / $rank_num['rank_total']) * 100,1) : 0;
|
$rank_num['rank_pb'] = ($rank_num['rank_b'] > 0) ? round(($rank_num['rank_b'] / $rank_num['rank_total']) * 100,1) : 0;
|
$rank_num['rank_pc'] = ($rank_num['rank_c'] > 0) ? round(($rank_num['rank_c'] / $rank_num['rank_total']) * 100,1) : 0;
|
$rank_num['shaidan_num'] = $db->getOne("SELECT COUNT(*) AS num FROM ".$ecs->table('shaidan')." WHERE goods_id = '$goods_id' AND status = 1");
|
$smarty->assign('rank_num',$rank_num);
|
|
$res = $GLOBALS['db']->getAll("SELECT * FROM ".$GLOBALS['ecs']->table('goods_tag')." WHERE goods_id = '$goods_id' AND state = 1");
|
foreach ($res as $v)
|
{
|
$v['tag_num'] = $db->getOne("SELECT COUNT(*) AS num FROM ".$ecs->table('comment')." WHERE id_value = '$goods_id' AND status = 1 AND FIND_IN_SET($v[tag_id],comment_tag)");
|
$tag_arr[] = $v;
|
}
|
$tag_arr = array_sort($tag_arr,'tag_num','desc');
|
if ($tag_arr)
|
{
|
foreach ($tag_arr as $key => $val)
|
{
|
if ($_CFG['tag_show_num'] > 0)
|
{
|
if (($key + 1) <= $_CFG['tag_show_num'])
|
{
|
$comment_tags[] = $val;
|
}
|
}
|
else
|
{
|
$comment_tags[] = $val;
|
}
|
}
|
}
|
$smarty->assign('comment_tags',$comment_tags);
|
|
include_once ( 'themes/'.$GLOBALS['_CFG']['template'].'/plugin_comments/plugin_comments.php');
|
$smarty->assign("comment_score", get_comment_score($goods['goods_id']));
|
|
}
|
}
|
|
/* 记录浏览历史 */
|
if (!empty($_COOKIE['ECS']['history']))
|
{
|
$history = explode(',', $_COOKIE['ECS']['history']);
|
|
array_unshift($history, $goods_id);
|
$history = array_unique($history);
|
|
while (count($history) > $_CFG['history_number'])
|
{
|
array_pop($history);
|
}
|
|
setcookie('ECS[history]', implode(',', $history), gmtime() + 3600 * 24 * 30);
|
}
|
else
|
{
|
setcookie('ECS[history]', $goods_id, gmtime() + 3600 * 24 * 30);
|
}
|
|
|
/* 更新点击次数 */
|
$db->query('UPDATE ' . $ecs->table('goods') . " SET click_count = click_count + 1 WHERE goods_id = '$_REQUEST[id]'");
|
|
|
$smarty->assign('order_num',selled_count($goods_id));
|
$smarty->assign('now_time', gmtime()); // 当前系统时间
|
$smarty->display('pro_goods.dwt', $cache_id);
|
|
/*------------------------------------------------------ */
|
//-- PRIVATE FUNCTION
|
/*------------------------------------------------------ */
|
|
/**
|
* 获得指定商品的关联商品
|
*
|
* @access public
|
* @param integer $goods_id
|
* @return array
|
*/
|
function get_linked_goods($goods_id)
|
{
|
$sql = 'SELECT g.goods_id, g.goods_name, g.goods_thumb, g.goods_img, g.shop_price AS org_price, ' .
|
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
|
'g.market_price, g.promote_price, g.promote_start_date, g.promote_end_date ' .
|
'FROM ' . $GLOBALS['ecs']->table('link_goods') . ' lg ' .
|
'LEFT JOIN ' . $GLOBALS['ecs']->table('goods') . ' AS g ON g.goods_id = lg.link_goods_id ' .
|
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
|
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
|
"WHERE lg.goods_id = '$goods_id' AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 ".
|
"LIMIT " . $GLOBALS['_CFG']['related_goods_number'];
|
$res = $GLOBALS['db']->query($sql);
|
|
$arr = array();
|
while ($row = $GLOBALS['db']->fetchRow($res))
|
{
|
$arr[$row['goods_id']]['goods_id'] = $row['goods_id'];
|
$arr[$row['goods_id']]['goods_name'] = $row['goods_name'];
|
$arr[$row['goods_id']]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
|
sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
|
$arr[$row['goods_id']]['goods_thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true);
|
$arr[$row['goods_id']]['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']);
|
$arr[$row['goods_id']]['market_price'] = price_format($row['market_price']);
|
$arr[$row['goods_id']]['shop_price'] = price_format($row['shop_price']);
|
$arr[$row['goods_id']]['url'] = build_uri('goods', array('gid'=>$row['goods_id']), $row['goods_name']);
|
|
$arr[$row['goods_id']]['order_num'] = selled_count($row['goods_id']);
|
|
if ($row['promote_price'] > 0)
|
{
|
$arr[$row['goods_id']]['promote_price'] = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
|
$arr[$row['goods_id']]['formated_promote_price'] = price_format($arr[$row['goods_id']]['promote_price']);
|
}
|
else
|
{
|
$arr[$row['goods_id']]['promote_price'] = 0;
|
}
|
}
|
|
return $arr;
|
}
|
|
/**
|
* 获得指定商品的关联文章
|
*
|
* @access public
|
* @param integer $goods_id
|
* @return void
|
*/
|
function get_linked_articles($goods_id)
|
{
|
$sql = 'SELECT a.article_id, a.title, a.file_url, a.open_type, a.add_time ' .
|
'FROM ' . $GLOBALS['ecs']->table('goods_article') . ' AS g, ' .
|
$GLOBALS['ecs']->table('article') . ' AS a ' .
|
"WHERE g.article_id = a.article_id AND g.goods_id = '$goods_id' AND a.is_open = 1 " .
|
'ORDER BY a.add_time DESC';
|
$res = $GLOBALS['db']->query($sql);
|
|
$arr = array();
|
while ($row = $GLOBALS['db']->fetchRow($res))
|
{
|
$row['url'] = $row['open_type'] != 1 ?
|
build_uri('article', array('aid'=>$row['article_id']), $row['title']) : trim($row['file_url']);
|
$row['add_time'] = local_date($GLOBALS['_CFG']['date_format'], $row['add_time']);
|
$row['short_title'] = $GLOBALS['_CFG']['article_title_length'] > 0 ?
|
sub_str($row['title'], $GLOBALS['_CFG']['article_title_length']) : $row['title'];
|
|
$arr[] = $row;
|
}
|
|
return $arr;
|
}
|
|
/**
|
* 获得指定商品的各会员等级对应的价格
|
*
|
* @access public
|
* @param integer $goods_id
|
* @return array
|
*/
|
function get_user_rank_prices($goods_id, $shop_price)
|
{
|
$sql = "SELECT rank_id, IFNULL(mp.user_price, r.discount * $shop_price / 100) AS price, r.rank_name, r.discount " .
|
'FROM ' . $GLOBALS['ecs']->table('user_rank') . ' AS r ' .
|
'LEFT JOIN ' . $GLOBALS['ecs']->table('member_price') . " AS mp ".
|
"ON mp.goods_id = '$goods_id' AND mp.user_rank = r.rank_id " .
|
"WHERE r.show_price = 1 OR r.rank_id = '$_SESSION[user_rank]'";
|
$res = $GLOBALS['db']->query($sql);
|
|
$arr = array();
|
while ($row = $GLOBALS['db']->fetchRow($res))
|
{
|
|
$arr[$row['rank_id']] = array(
|
'rank_name' => htmlspecialchars($row['rank_name']),
|
'price' => price_format($row['price']));
|
}
|
|
return $arr;
|
}
|
|
/**
|
* 获得购买过该商品的人还买过的商品
|
*
|
* @access public
|
* @param integer $goods_id
|
* @return array
|
*/
|
function get_also_bought($goods_id)
|
{
|
$sql = 'SELECT COUNT(b.goods_id ) AS num, g.goods_id, g.goods_name, g.goods_thumb, g.goods_img, g.shop_price, g.promote_price, g.promote_start_date, g.promote_end_date ' .
|
'FROM ' . $GLOBALS['ecs']->table('order_goods') . ' AS a ' .
|
'LEFT JOIN ' . $GLOBALS['ecs']->table('order_goods') . ' AS b ON b.order_id = a.order_id ' .
|
'LEFT JOIN ' . $GLOBALS['ecs']->table('goods') . ' AS g ON g.goods_id = b.goods_id ' .
|
"WHERE a.goods_id = '$goods_id' AND b.goods_id <> '$goods_id' AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 " .
|
'GROUP BY b.goods_id ' .
|
'ORDER BY num DESC ' .
|
'LIMIT ' . $GLOBALS['_CFG']['bought_goods'];
|
$res = $GLOBALS['db']->query($sql);
|
|
$key = 0;
|
$arr = array();
|
while ($row = $GLOBALS['db']->fetchRow($res))
|
{
|
$arr[$key]['goods_id'] = $row['goods_id'];
|
$arr[$key]['goods_name'] = $row['goods_name'];
|
$arr[$key]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
|
sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
|
$arr[$key]['goods_thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true);
|
$arr[$key]['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']);
|
$arr[$key]['shop_price'] = price_format($row['shop_price']);
|
$arr[$key]['url'] = build_uri('goods', array('gid'=>$row['goods_id']), $row['goods_name']);
|
|
if ($row['promote_price'] > 0)
|
{
|
$arr[$key]['promote_price'] = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
|
$arr[$key]['formated_promote_price'] = price_format($arr[$key]['promote_price']);
|
}
|
else
|
{
|
$arr[$key]['promote_price'] = 0;
|
}
|
|
$key++;
|
}
|
|
return $arr;
|
}
|
|
/**
|
* 获得指定商品的销售排名
|
*
|
* @access public
|
* @param integer $goods_id
|
* @return integer
|
*/
|
function get_goods_rank($goods_id)
|
{
|
/* 统计时间段 */
|
$period = intval($GLOBALS['_CFG']['top10_time']);
|
if ($period == 1) // 一年
|
{
|
$ext = " AND o.add_time > '" . local_strtotime('-1 years') . "'";
|
}
|
elseif ($period == 2) // 半年
|
{
|
$ext = " AND o.add_time > '" . local_strtotime('-6 months') . "'";
|
}
|
elseif ($period == 3) // 三个月
|
{
|
$ext = " AND o.add_time > '" . local_strtotime('-3 months') . "'";
|
}
|
elseif ($period == 4) // 一个月
|
{
|
$ext = " AND o.add_time > '" . local_strtotime('-1 months') . "'";
|
}
|
else
|
{
|
$ext = '';
|
}
|
|
/* 查询该商品销量 */
|
$sql = 'SELECT IFNULL(SUM(g.goods_number), 0) ' .
|
'FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o, ' .
|
$GLOBALS['ecs']->table('order_goods') . ' AS g ' .
|
"WHERE o.order_id = g.order_id " .
|
"AND o.order_status = '" . OS_CONFIRMED . "' " .
|
"AND o.shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) .
|
" AND o.pay_status " . db_create_in(array(PS_PAYED, PS_PAYING)) .
|
" AND g.goods_id = '$goods_id'" . $ext;
|
$sales_count = $GLOBALS['db']->getOne($sql);
|
|
if ($sales_count > 0)
|
{
|
/* 只有在商品销售量大于0时才去计算该商品的排行 */
|
$sql = 'SELECT DISTINCT SUM(goods_number) AS num ' .
|
'FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o, ' .
|
$GLOBALS['ecs']->table('order_goods') . ' AS g ' .
|
"WHERE o.order_id = g.order_id " .
|
"AND o.order_status = '" . OS_CONFIRMED . "' " .
|
"AND o.shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) .
|
" AND o.pay_status " . db_create_in(array(PS_PAYED, PS_PAYING)) . $ext .
|
" GROUP BY g.goods_id HAVING num > $sales_count";
|
$res = $GLOBALS['db']->query($sql);
|
|
$rank = $GLOBALS['db']->num_rows($res) + 1;
|
|
if ($rank > 10)
|
{
|
$rank = 0;
|
}
|
}
|
else
|
{
|
$rank = 0;
|
}
|
|
return $rank;
|
}
|
|
/**
|
* 获得商品选定的属性的附加总价格
|
*
|
* @param integer $goods_id
|
* @param array $attr
|
*
|
* @return void
|
*/
|
function get_attr_amount($goods_id, $attr)
|
{
|
$sql = "SELECT SUM(attr_price) FROM " . $GLOBALS['ecs']->table('goods_attr') .
|
" WHERE goods_id='$goods_id' AND " . db_create_in($attr, 'goods_attr_id');
|
|
return $GLOBALS['db']->getOne($sql);
|
}
|
|
/**
|
* 取得跟商品关联的礼包列表
|
*
|
* @param string $goods_id 商品编号
|
*
|
* @return 礼包列表
|
*/
|
function get_package_goods_list($goods_id)
|
{
|
$now = gmtime();
|
$sql = "SELECT pg.goods_id, ga.act_id, ga.act_name, ga.act_desc, ga.goods_name, ga.start_time,
|
ga.end_time, ga.is_finished, ga.ext_info
|
FROM " . $GLOBALS['ecs']->table('goods_activity') . " AS ga, " . $GLOBALS['ecs']->table('package_goods') . " AS pg
|
WHERE pg.package_id = ga.act_id
|
AND ga.start_time <= '" . $now . "'
|
AND ga.end_time >= '" . $now . "'
|
AND pg.goods_id = " . $goods_id . "
|
GROUP BY ga.act_id
|
ORDER BY ga.act_id ";
|
$res = $GLOBALS['db']->getAll($sql);
|
|
foreach ($res as $tempkey => $value)
|
{
|
$subtotal = 0;
|
$row = unserialize($value['ext_info']);
|
unset($value['ext_info']);
|
if ($row)
|
{
|
foreach ($row as $key=>$val)
|
{
|
$res[$tempkey][$key] = $val;
|
}
|
}
|
|
$sql = "SELECT pg.package_id, pg.goods_id, pg.goods_number, pg.admin_id, p.goods_attr, g.goods_sn, g.goods_name, g.market_price, g.goods_thumb, IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS rank_price
|
FROM " . $GLOBALS['ecs']->table('package_goods') . " AS pg
|
LEFT JOIN ". $GLOBALS['ecs']->table('goods') . " AS g
|
ON g.goods_id = pg.goods_id
|
LEFT JOIN ". $GLOBALS['ecs']->table('products') . " AS p
|
ON p.product_id = pg.product_id
|
LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp
|
ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]'
|
WHERE pg.package_id = " . $value['act_id']. "
|
ORDER BY pg.package_id, pg.goods_id";
|
|
$goods_res = $GLOBALS['db']->getAll($sql);
|
|
foreach($goods_res as $key => $val)
|
{
|
$goods_id_array[] = $val['goods_id'];
|
$goods_res[$key]['goods_thumb'] = get_image_path($val['goods_id'], $val['goods_thumb'], true);
|
$goods_res[$key]['market_price'] = price_format($val['market_price']);
|
$goods_res[$key]['rank_price'] = price_format($val['rank_price']);
|
$subtotal += $val['rank_price'] * $val['goods_number'];
|
}
|
|
/* 取商品属性 */
|
$sql = "SELECT ga.goods_attr_id, ga.attr_value
|
FROM " .$GLOBALS['ecs']->table('goods_attr'). " AS ga, " .$GLOBALS['ecs']->table('attribute'). " AS a
|
WHERE a.attr_id = ga.attr_id
|
AND a.attr_type = 1
|
AND " . db_create_in($goods_id_array, 'goods_id');
|
$result_goods_attr = $GLOBALS['db']->getAll($sql);
|
|
$_goods_attr = array();
|
foreach ($result_goods_attr as $value)
|
{
|
$_goods_attr[$value['goods_attr_id']] = $value['attr_value'];
|
}
|
|
/* 处理货品 */
|
$format = '[%s]';
|
foreach($goods_res as $key => $val)
|
{
|
if ($val['goods_attr'] != '')
|
{
|
$goods_attr_array = explode('|', $val['goods_attr']);
|
|
$goods_attr = array();
|
foreach ($goods_attr_array as $_attr)
|
{
|
$goods_attr[] = $_goods_attr[$_attr];
|
}
|
|
$goods_res[$key]['goods_attr_str'] = sprintf($format, implode(',', $goods_attr));
|
}
|
}
|
|
$res[$tempkey]['goods_list'] = $goods_res;
|
$res[$tempkey]['subtotal'] = price_format($subtotal);
|
$res[$tempkey]['saving'] = price_format(($subtotal - $res[$tempkey]['package_price']));
|
$res[$tempkey]['package_price'] = price_format($res[$tempkey]['package_price']);
|
}
|
|
return $res;
|
}
|
|
|
/**
|
* ============================================================================
|
* 文章自定义数据调用函数
|
* ============================================================================
|
*/
|
//取得文章里面的图片
|
function GetImageSrc($body) {
|
if( !isset($body) ) {
|
return '';
|
}
|
else {
|
preg_match_all ("/<(img|IMG)(.*)(src|SRC)=[\"|'|]{0,}([h|\/].*(jpg|JPG|gif|GIF|png|PNG))[\"|'|\s]{0,}/isU",$body,$out);
|
return $out[4];
|
}
|
}
|
|
//提取文里面的URL
|
function GetArticleUrl($body) {
|
if( !isset($body) ) {
|
return '';
|
}
|
else {
|
preg_match_all("/<(a|A)(.*)(href|HREF)=[\"|'|](.*)[\"|'|\s]{0,}>(.*)<\/(a|A)>/isU",$body,$out);
|
return $out;
|
}
|
}
|
|
function get_article_children_new ($cat = 0)
|
{
|
return db_create_in(array_unique(array_merge(array($cat), array_keys(article_cat_list($cat, 0, false)))), 'a.cat_id');
|
}
|
|
/**
|
* 按文章ID号/分类ID/商品ID号/商品分类ID号取得文章
|
* @param array $id 文章ID或文章分类ID
|
* @param string $getwhat 以何种方式取文章其中可选参数有:
|
[1]art_cat(以文章分类ID获取) [2]art_id(以文章ID获取)
|
[3]goods_cat(以商品分类ID获取) [4]goods_id(以商品ID获取)
|
其中的[3]和[4]必须有商品关联文章或文章关联商品
|
* @param integer $num 控制显示多少条文章.当参数为0时则全部显示
|
* @param integer $start 从第几条数据开始取
|
* @param boolean $isrand 是否随机显示文章(默认为不显示)
|
* @param boolean $showall 是否显示隐藏的文章(黑认为不显示隐藏文章)
|
* @return array
|
*/
|
function get_article_new( $id = array(0), $getwhat = 'art_id', $num = 0, $isrand = false, $showall = true, $start = 0 ) {
|
$sql = '';
|
$findkey = '';
|
$search = '';
|
$wherestr = '';
|
|
for( $i=0; $i<count($id); $i++ ) {
|
if( $i<count($id)-1 ) {
|
$findkey .= $id[$i] .',';
|
}
|
else {
|
$findkey .= $id[$i];
|
}
|
}
|
|
if( $getwhat == 'art_cat' ){
|
for( $i=0; $i<count($id); $i++ ) {
|
if( $i<count($id)-1 ) {
|
$search .= get_article_children_new($id[$i]) . ' OR ';
|
}
|
else {
|
$search .= get_article_children_new($id[$i]);
|
}
|
}
|
}
|
elseif($getwhat == 'goods_cat') {
|
for( $i=0; $i<count($id); $i++) {
|
if( $i<count($id)-1 ) {
|
$search .= get_children($id[$i]) . ' OR ';
|
}
|
else {
|
$search .= get_children($id[$i]);
|
}
|
}
|
}
|
elseif( $getwhat == 'art_id' ) {
|
$search = 'a.article_id IN' . '(' . $findkey . ')';
|
}
|
elseif( $getwhat == 'goods_id' ) {
|
$search = 'g.goods_id IN' . '(' . $findkey . ')';
|
}
|
$wherestr = '(' . $search . ')';
|
|
if( $getwhat == 'art_cat' || $getwhat == 'art_id' ) {
|
$sql = 'SELECT a.*,ac.cat_id,ac.cat_name,ac.keywords as cat_keywords,ac.cat_desc
|
FROM ' . $GLOBALS['ecs']->table('article') . ' AS a, ' .
|
$GLOBALS['ecs']->table('article_cat') . ' AS ac' .
|
' WHERE (a.cat_id = ac.cat_id) AND ' . $wherestr;
|
}
|
elseif( $getwhat == 'goods_cat' || $getwhat == 'goods_id' ) {
|
$sql = 'SELECT DISTINCT a.*,ac.cat_id,ac.cat_name,ac.keywords as cat_keywords,ac.cat_desc FROM ' .
|
$GLOBALS['ecs']->table('goods') .' AS g ' .
|
'LEFT JOIN ' . $GLOBALS['ecs']->table('goods_article') . ' AS ga ON g.goods_id=ga.goods_id INNER JOIN ' .
|
$GLOBALS['ecs']->table('article') . ' AS a ON ga.article_id = a.article_id, ' .
|
$GLOBALS['ecs']->table('article_cat') . 'AS ac ' .
|
'WHERE (a.cat_id = ac.cat_id) AND ' . $wherestr;
|
}
|
|
|
if( ($showall == false) && ( $getwhat == 'art_cat' || $getwhat == 'art_id' ) ) {
|
$sql .= ' AND a.is_open=1';
|
}
|
elseif( ($showall == false) && ( $getwhat == 'goods_cat' || $getwhat == 'goods_id' ) ) {
|
$sql .= ' AND a.is_open=1';
|
}
|
|
if( $isrand == true ) {
|
$sql .= ' ORDER BY rand()';
|
}
|
elseif( ($isrand == false) && ( $getwhat == 'art_cat' || $getwhat == 'art_id' ) ) {
|
$sql .= ' ORDER BY a.add_time DESC, a.article_id DESC';
|
}
|
elseif( ($isrand == false) && ( $getwhat == 'goods_cat' || $getwhat == 'goods_id' ) ) {
|
$sql .= ' ORDER BY a.add_time DESC, a.article_id DESC';
|
}
|
|
if( $start == 0 && $num>0 ) {
|
$sql .= ' LIMIT ' . $num;
|
}
|
elseif( $start>0 && $num>0 ) {
|
$sql .= ' LIMIT ' . $start . ',' . $num;
|
}
|
|
//开始查询
|
$arr = $GLOBALS['db']->getAll($sql);
|
$articles = array();
|
foreach ($arr AS $id => $row) {
|
$articles[$id]['cat_id'] = $row['cat_id'];
|
$articles[$id]['cat_name'] = $row['cat_name'];
|
$articles[$id]['cat_url'] = build_uri('article_cat', array('acid' => $row['cat_id']));
|
$articles[$id]['cat_keywords'] = $row['cat_keywords'];
|
$articles[$id]['cat_desc'] = $row['cat_desc'];
|
$articles[$id]['title'] = $row['title'];
|
$articles[$id]['url'] = build_uri('article', array('aid'=>$row['article_id']), $row['title']);
|
$articles[$id]['author'] = $row['author'];
|
$articles[$id]['content'] = $row['content'];
|
$articles[$id]['keywords'] = $row['keywords'];
|
$articles[$id]['file_url'] = $row['file_url'];
|
$articles[$id]['link'] = $row['link'];
|
$articles[$id]['addtime'] = date($GLOBALS['_CFG']['date_format'], $row['add_time']);
|
$articles[$id]['content'] = $row['content'];
|
$imgsrc = GetImageSrc($row['content']);
|
$articles[$id]['img'] = $imgsrc; //提取文章中所有的图片
|
$link = GetArticleUrl($row['content']);
|
$articles[$id]['link_url'] = $link[4]; //提取文章中所有的链接地址
|
$articles[$id]['link_title'] = $link[5]; //提取文章中所有的链接名称
|
}
|
return $articles;
|
}
|
|
function get_zhekou($goods_id)
|
{
|
$zhekou = '0';
|
|
/* 取得商品信息 */
|
$sql = "SELECT g.shop_price , g.promote_price".
|
|
" FROM " .$GLOBALS['ecs']->table('goods'). " AS g ".
|
|
" WHERE g.goods_id = '" . $goods_id . "'";
|
|
$goods = $GLOBALS['db']->getRow($sql);
|
|
if ($goods['shop_price'] == 0)
|
{
|
|
$zhekou = 0;
|
|
}else{
|
|
$zhekou = (number_format(intval($goods['promote_price'])/intval($goods['shop_price']),2))*10;
|
|
}
|
return $zhekou;
|
}
|
|
function get_jiesheng($goods_id)
|
{
|
$jiesheng = '0';
|
|
/* 取得商品信息 */
|
$sql = "SELECT g.shop_price , g.promote_price".
|
|
" FROM " .$GLOBALS['ecs']->table('goods'). " AS g ".
|
|
" WHERE g.goods_id = '" . $goods_id . "'";
|
|
$goods = $GLOBALS['db']->getRow($sql);
|
|
|
|
$jiesheng = $goods['shop_price'] - $goods['promote_price'] ;
|
|
return $jiesheng;
|
}
|
|
|
|
/**
|
* 获得促销商品
|
*
|
* @access public
|
* @return array
|
*/
|
function get_promote_goods_group($cats = '')
|
{
|
$time = gmtime();
|
$order_type = $GLOBALS['_CFG']['recommend_order'];
|
|
/* 取得促销lbi的数量限制 */
|
$num = get_library_number("recommend_promotion");
|
$sql = 'SELECT g.goods_id, g.goods_name,g.goods_brief, g.goods_name_style, g.market_price, g.shop_price AS org_price, g.promote_price, ' .
|
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
|
"promote_start_date, promote_end_date, g.goods_brief, g.goods_thumb, g.original_img, goods_img, b.brand_name, " .
|
"g.is_best, g.is_new, g.is_hot, g.is_promote, RAND() AS rnd " .
|
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
|
'LEFT JOIN ' . $GLOBALS['ecs']->table('brand') . ' AS b ON b.brand_id = g.brand_id ' .
|
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
|
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
|
'WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 ' .
|
" AND g.is_promote = 1 AND promote_start_date <= '$time' AND promote_end_date >= '$time' ";
|
$sql .= $order_type == 0 ? ' ORDER BY g.sort_order, g.last_update DESC' : ' ORDER BY rnd';
|
$sql .= " LIMIT 15 ";
|
$result = $GLOBALS['db']->getAll($sql);
|
|
$goods = array();
|
foreach ($result AS $idx => $row)
|
{
|
if ($row['promote_price'] > 0)
|
{
|
$promote_price = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
|
$goods[$idx]['promote_price'] = $promote_price > 0 ? price_format($promote_price) : '';
|
}
|
else
|
{
|
$goods[$idx]['promote_price'] = '';
|
}
|
|
$goods[$idx]['id'] = $row['goods_id'];
|
$goods[$idx]['name'] = $row['goods_name'];
|
$goods[$idx]['valid_goods'] = selled_count($row['goods_id']);
|
$goods[$idx]['brief'] = $row['goods_brief'];
|
$goods[$idx]['brand_name'] = $row['brand_name'];
|
$goods[$idx]['goods_style_name'] = add_style($row['goods_name'],$row['goods_name_style']);
|
$goods[$idx]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ? sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
|
$goods[$idx]['short_style_name'] = add_style($goods[$idx]['short_name'],$row['goods_name_style']);
|
$goods[$idx]['market_price'] = price_format($row['market_price']);
|
$goods[$idx]['shop_price'] = price_format($row['shop_price']);
|
$goods[$idx]['thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true);
|
$goods[$idx]['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']);
|
$goods[$idx]['original_img'] = get_image_path($row['goods_id'], $row['original_img']);
|
$goods[$idx]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
|
}
|
|
return $goods;
|
}
|
|
?>
|