bnbweb/includes/lib_goods.php
2022-11-14 23:49:28 +08:00

1262 lines
46 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
/**
* 商品推荐usort用自定义排序行数
*/
function goods_sort($goods_a, $goods_b)
{
if ($goods_a['sort_order'] == $goods_b['sort_order']) {
return 0;
}
return ($goods_a['sort_order'] < $goods_b['sort_order']) ? -1 : 1;
}
/**
* 获得指定分类同级的所有分类以及该分类下的子分类
*
* @access public
* @param integer $cat_id 分类编号
* @return array
*/
function get_categories_tree($cat_id = 0)
{
if ($cat_id > 0)
{
$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";
$parent_id = $GLOBALS['db']->getOne($sql);
}
else
{
$parent_id = 0;
}
/*
判断当前分类中全是是否是底级分类,
如果是取出底级分类上级分类,
如果不是取当前分类及其下的子分类
*/
$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$parent_id' AND is_show = 1 ";
if ($GLOBALS['db']->getOne($sql) || $parent_id == 0)
{
/* 获取当前分类及其子分类 */
$sql = 'SELECT cat_id,cat_name ,parent_id,is_show ' .
'FROM ' . $GLOBALS['ecs']->table('category') .
"WHERE parent_id = '$parent_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
if ($row['is_show'])
{
$cat_arr[$row['cat_id']]['id'] = $row['cat_id'];
$cat_arr[$row['cat_id']]['name'] = $row['cat_name'];
$cat_arr[$row['cat_id']]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
//$cat_arr[$row['cat_id']]['url'] = $row['games_url'];
if (isset($row['cat_id']) != NULL)
{
$cat_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
}
}
}
}
if(isset($cat_arr))
{
return $cat_arr;
}
}
function get_child_tree($tree_id = 0)
{
$three_arr = array();
$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$tree_id' AND is_show = 1 ";
if ($GLOBALS['db']->getOne($sql) || $tree_id == 0)
{
$child_sql = 'SELECT cat_id, cat_name, parent_id, is_show ' .
'FROM ' . $GLOBALS['ecs']->table('category') .
"WHERE parent_id = '$tree_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
$res = $GLOBALS['db']->getAll($child_sql);
foreach ($res AS $row)
{
if ($row['is_show'])
$three_arr[$row['cat_id']]['id'] = $row['cat_id'];
$three_arr[$row['cat_id']]['name'] = $row['cat_name'];
$three_arr[$row['cat_id']]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
if (isset($row['cat_id']) != NULL)
{
$three_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
}
}
}
return $three_arr;
}
/**
* 调用当前分类的销售排行榜
*
* @access public
* @param string $cats 查询的分类
* @return array
*/
function get_top10($cats = '')
{
$cats = get_children($cats);
$where = !empty($cats) ? "AND ($cats OR " . get_extension_goods($cats) . ") " : '';
/* 排行统计的时间 */
switch ($GLOBALS['_CFG']['top10_time'])
{
case 1: // 一年
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 365 * 86400) . "'";
break;
case 2: // 半年
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 180 * 86400) . "'";
break;
case 3: // 三个月
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 90 * 86400) . "'";
break;
case 4: // 一个月
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 30 * 86400) . "'";
break;
default:
$top10_time = '';
}
$sql = 'SELECT g.goods_id, g.goods_name, g.shop_price, g.goods_thumb, SUM(og.goods_number) as goods_number ' .
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g, ' .
$GLOBALS['ecs']->table('order_info') . ' AS o, ' .
$GLOBALS['ecs']->table('order_goods') . ' AS og ' .
"WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 $where $top10_time " ;
//判断是否启用库存库存数量是否大于0
if ($GLOBALS['_CFG']['use_storage'] == 1)
{
$sql .= " AND g.goods_number > 0 ";
}
$sql .= ' AND og.order_id = o.order_id AND og.goods_id = g.goods_id ' .
"AND (o.order_status = '" . OS_CONFIRMED . "' OR o.order_status = '" . OS_SPLITED . "') " .
"AND (o.pay_status = '" . PS_PAYED . "' OR o.pay_status = '" . PS_PAYING . "') " .
"AND (o.shipping_status = '" . SS_SHIPPED . "' OR o.shipping_status = '" . SS_RECEIVED . "') " .
'GROUP BY g.goods_id ORDER BY goods_number DESC, g.goods_id DESC LIMIT 10' . $GLOBALS['_CFG']['top_number'];
$arr = $GLOBALS['db']->getAll($sql);
for ($i = 0, $count = count($arr); $i < $count; $i++)
{
$arr[$i]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
sub_str($arr[$i]['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $arr[$i]['goods_name'];
$arr[$i]['url'] = build_uri('goods', array('gid' => $arr[$i]['goods_id']), $arr[$i]['goods_name']);
$arr[$i]['thumb'] = get_image_path($arr[$i]['goods_id'], $arr[$i]['goods_thumb'],true);
$arr[$i]['price'] = price_format($arr[$i]['shop_price']);
}
return $arr;
}
/**
* 获得推荐商品
*
* @access public
* @param string $type 推荐类型,可以是 best, new, hot
* @return array
*/
function get_recommend_goods($type = '', $cats = '')
{
if (!in_array($type, array('best', 'new', 'hot')))
{
return array();
}
//取不同推荐对应的商品
static $type_goods = array();
if (empty($type_goods[$type]))
{
//初始化数据
$type_goods['best'] = array();
$type_goods['new'] = array();
$type_goods['hot'] = array();
$data = read_static_cache('recommend_goods');
if ($data === false)
{
$sql = 'SELECT g.goods_id, g.is_best, g.is_new, g.is_hot, g.is_promote, b.brand_name,g.sort_order ' .
' FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
' LEFT JOIN ' . $GLOBALS['ecs']->table('brand') . ' AS b ON b.brand_id = g.brand_id ' .
' WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 AND (g.is_best = 1 OR g.is_new =1 OR g.is_hot = 1)'.
' ORDER BY g.sort_order, g.last_update DESC';
$goods_res = $GLOBALS['db']->getAll($sql);
//定义推荐,最新,热门,促销商品
$goods_data['best'] = array();
$goods_data['new'] = array();
$goods_data['hot'] = array();
$goods_data['brand'] = array();
if (!empty($goods_res))
{
foreach($goods_res as $data)
{
if ($data['is_best'] == 1)
{
$goods_data['best'][] = array('goods_id' => $data['goods_id'], 'sort_order' => $data['sort_order']);
}
if ($data['is_new'] == 1)
{
$goods_data['new'][] = array('goods_id' => $data['goods_id'], 'sort_order' => $data['sort_order']);
}
if ($data['is_hot'] == 1)
{
$goods_data['hot'][] = array('goods_id' => $data['goods_id'], 'sort_order' => $data['sort_order']);
}
if ($data['brand_name'] != '')
{
$goods_data['brand'][$data['goods_id']] = $data['brand_name'];
}
}
}
write_static_cache('recommend_goods', $goods_data);
}
else
{
$goods_data = $data;
}
$time = gmtime();
$order_type = $GLOBALS['_CFG']['recommend_order'];
//按推荐数量及排序取每一项推荐显示的商品 order_type可以根据后台设定进行各种条件显示
static $type_array = array();
$type2lib = array('best'=>'recommend_best', 'new'=>'recommend_new', 'hot'=>'recommend_hot');
if (empty($type_array))
{
foreach($type2lib as $key => $data)
{
if (!empty($goods_data[$key]))
{
$num = get_library_number($data);
$data_count = count($goods_data[$key]);
$num = $data_count > $num ? $num : $data_count;
if ($order_type == 0)
{
//usort($goods_data[$key], 'goods_sort');
$rand_key = array_slice($goods_data[$key], 0, $num);
foreach($rand_key as $key_data)
{
$type_array[$key][] = $key_data['goods_id'];
}
}
else
{
$rand_key = array_rand($goods_data[$key], $num);
if ($num == 1)
{
$type_array[$key][] = $goods_data[$key][$rand_key]['goods_id'];
}
else
{
foreach($rand_key as $key_data)
{
$type_array[$key][] = $goods_data[$key][$key_data]['goods_id'];
}
}
}
}
else
{
$type_array[$key] = array();
}
}
}
//取出所有符合条件的商品数据,并将结果存入对应的推荐类型数组中
$sql = 'SELECT g.goods_id, g.goods_name, 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.goods_img, RAND() AS rnd " .
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ";
$type_merge = array_merge($type_array['new'], $type_array['best'], $type_array['hot']);
$type_merge = array_unique($type_merge);
$sql .= ' WHERE g.goods_id ' . db_create_in($type_merge);
$sql .= ' ORDER BY g.sort_order, g.last_update DESC';
$result = $GLOBALS['db']->getAll($sql);
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]['brief'] = $row['goods_brief'];
$goods[$idx]['brand_name'] = isset($goods_data['brand'][$row['goods_id']]) ? $goods_data['brand'][$row['goods_id']] : '';
$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]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
if (in_array($row['goods_id'], $type_array['best']))
{
$type_goods['best'][] = $goods[$idx];
}
if (in_array($row['goods_id'], $type_array['new']))
{
$type_goods['new'][] = $goods[$idx];
}
if (in_array($row['goods_id'], $type_array['hot']))
{
$type_goods['hot'][] = $goods[$idx];
}
}
}
return $type_goods[$type];
}
/**
* 获得商品的详细信息
*
* @access public
* @param integer $goods_id
* @return void
*/
function get_goods_info($goods_id)
{
$time = gmtime();
$sql = 'SELECT g.* ' .
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('category') . ' AS c ON g.cat_id = c.cat_id ' .
"WHERE g.goods_id = '$goods_id' AND g.is_delete = 0 " .
"GROUP BY g.goods_id";
$row = $GLOBALS['db']->getRow($sql);
if ($row !== false)
{
return $row;
}
else
{
return false;
}
}
/**
* 获得商品的属性和规格
*
* @access public
* @param integer $goods_id
* @return array
*/
function get_goods_properties($goods_id)
{
/* 对属性进行重新排序和分组 */
$sql = "SELECT attr_group ".
"FROM " . $GLOBALS['ecs']->table('goods_type') . " AS gt, " . $GLOBALS['ecs']->table('goods') . " AS g ".
"WHERE g.goods_id='$goods_id' AND gt.cat_id=g.goods_type";
$grp = $GLOBALS['db']->getOne($sql);
if (!empty($grp))
{
$groups = explode("\n", strtr($grp, "\r", ''));
}
/* 获得商品的规格 */
$sql = "SELECT a.attr_id, a.attr_name, a.attr_group, a.is_linked, a.attr_type, ".
"g.goods_attr_id, g.attr_value, g.attr_price " .
'FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' .
"WHERE g.goods_id = '$goods_id' " .
'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id';
$res = $GLOBALS['db']->getAll($sql);
$arr['pro'] = array(); // 属性
$arr['spe'] = array(); // 规格
$arr['lnk'] = array(); // 关联的属性
foreach ($res AS $row)
{
$row['attr_value'] = str_replace("\n", '<br />', $row['attr_value']);
if ($row['attr_type'] == 0)
{
$group = (isset($groups[$row['attr_group']])) ? $groups[$row['attr_group']] : $GLOBALS['_LANG']['goods_attr'];
$arr['pro'][$group][$row['attr_id']]['name'] = $row['attr_name'];
$arr['pro'][$group][$row['attr_id']]['value'] = $row['attr_value'];
}
else
{
$arr['spe'][$row['attr_id']]['attr_type'] = $row['attr_type'];
$arr['spe'][$row['attr_id']]['name'] = $row['attr_name'];
$arr['spe'][$row['attr_id']]['values'][] = array(
'label' => $row['attr_value'],
'price' => $row['attr_price'],
'format_price' => price_format(abs($row['attr_price']), false),
'id' => $row['goods_attr_id']);
}
if ($row['is_linked'] == 1)
{
/* 如果该属性需要关联,先保存下来 */
$arr['lnk'][$row['attr_id']]['name'] = $row['attr_name'];
$arr['lnk'][$row['attr_id']]['value'] = $row['attr_value'];
}
}
return $arr;
}
/**
* 获得属性相同的商品
*
* @access public
* @param array $attr // 包含了属性名称,ID的数组
* @return array
*/
function get_same_attribute_goods($attr)
{
$lnk = array();
if (!empty($attr))
{
foreach ($attr['lnk'] AS $key => $val)
{
$lnk[$key]['title'] = sprintf($GLOBALS['_LANG']['same_attrbiute_goods'], $val['name'], $val['value']);
/* 查找符合条件的商品 */
$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('goods') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('goods_attr') . ' as a ON g.goods_id = a.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 a.attr_id = '$key' AND g.is_on_sale=1 AND a.attr_value = '$val[value]' AND g.goods_id <> '$_REQUEST[id]' " .
'LIMIT ' . $GLOBALS['_CFG']['attr_related_number'];
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
$lnk[$key]['goods'][$row['goods_id']]['goods_id'] = $row['goods_id'];
$lnk[$key]['goods'][$row['goods_id']]['goods_name'] = $row['goods_name'];
$lnk[$key]['goods'][$row['goods_id']]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
$lnk[$key]['goods'][$row['goods_id']]['goods_thumb'] = (empty($row['goods_thumb'])) ? $GLOBALS['_CFG']['no_picture'] : $row['goods_thumb'];
$lnk[$key]['goods'][$row['goods_id']]['market_price'] = price_format($row['market_price']);
$lnk[$key]['goods'][$row['goods_id']]['shop_price'] = price_format($row['shop_price']);
$lnk[$key]['goods'][$row['goods_id']]['promote_price'] = bargain_price($row['promote_price'],
$row['promote_start_date'], $row['promote_end_date']);
$lnk[$key]['goods'][$row['goods_id']]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
}
}
}
return $lnk;
}
/**
* 获得指定商品的相册
*
* @access public
* @param integer $goods_id
* @return array
*/
function get_goods_gallery($goods_id)
{
$sql = 'SELECT img_id, img_url, thumb_url, img_desc' .
' FROM ' . $GLOBALS['ecs']->table('goods_gallery') .
" WHERE goods_id = '$goods_id' LIMIT " . $GLOBALS['_CFG']['goods_gallery_number'];
$row = $GLOBALS['db']->getAll($sql);
/* 格式化相册图片路径 */
foreach($row as $key => $gallery_img)
{
$row[$key]['img_url'] = get_image_path($goods_id, $gallery_img['img_url'], false, 'gallery');
$row[$key]['thumb_url'] = get_image_path($goods_id, $gallery_img['thumb_url'], true, 'gallery');
}
return $row;
}
/**
* 获得指定分类下的商品
*
* @access public
* @param integer $cat_id 分类ID
* @param integer $num 数量
* @param string $from 来自web/wap的调用
* @param string $order_rule 指定商品排序规则
* @return array
*/
function assign_cat_goods($cat_id, $num = 0, $from = 'web', $order_rule = '')
{
$children = get_children($cat_id);
$sql = 'SELECT g.goods_id, g.goods_name, g.market_price, g.shop_price AS org_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
'g.promote_price, promote_start_date, promote_end_date, g.goods_brief, g.goods_thumb, g.goods_img ' .
"FROM " . $GLOBALS['ecs']->table('goods') . ' AS g '.
"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 (' . $children . 'OR ' . get_extension_goods($children) . ') ';
$order_rule = empty($order_rule) ? 'ORDER BY g.sort_order, g.goods_id DESC' : $order_rule;
$sql .= $order_rule;
if ($num > 0)
{
$sql .= ' LIMIT ' . $num;
}
$res = $GLOBALS['db']->getAll($sql);
$goods = array();
foreach ($res 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]['brief'] = $row['goods_brief'];
$goods[$idx]['market_price'] = price_format($row['market_price']);
$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]['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]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
}
if ($from == 'web')
{
$GLOBALS['smarty']->assign('cat_goods_' . $cat_id, $goods);
}
elseif ($from == 'wap')
{
$cat['goods'] = $goods;
}
/* 分类信息 */
$sql = 'SELECT cat_name FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";
$cat['name'] = $GLOBALS['db']->getOne($sql);
$cat['url'] = build_uri('category', array('cid' => $cat_id), $cat['name']);
$cat['id'] = $cat_id;
return $cat;
}
/**
* 获得指定的品牌下的商品
*
* @access public
* @param integer $brand_id 品牌的ID
* @param integer $num 数量
* @param integer $cat_id 分类编号
* @param string $order_rule 指定商品排序规则
* @return void
*/
function assign_brand_goods($brand_id, $num = 0, $cat_id = 0,$order_rule = '')
{
$sql = 'SELECT g.goods_id, g.goods_name, g.market_price, g.shop_price AS org_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
'g.promote_price, g.promote_start_date, g.promote_end_date, g.goods_brief, g.goods_thumb, g.goods_img ' .
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
"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.brand_id = '$brand_id'";
if ($cat_id > 0)
{
$sql .= get_children($cat_id);
}
$order_rule = empty($order_rule) ? ' ORDER BY g.sort_order, g.goods_id DESC' : $order_rule;
$sql .= $order_rule;
if ($num > 0)
{
$res = $GLOBALS['db']->selectLimit($sql, $num);
}
else
{
$res = $GLOBALS['db']->query($sql);
}
$idx = 0;
$goods = array();
while ($row = $GLOBALS['db']->fetchRow($res))
{
if ($row['promote_price'] > 0)
{
$promote_price = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
}
else
{
$promote_price = 0;
}
$goods[$idx]['id'] = $row['goods_id'];
$goods[$idx]['name'] = $row['goods_name'];
$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]['market_price'] = price_format($row['market_price']);
$goods[$idx]['shop_price'] = price_format($row['shop_price']);
$goods[$idx]['promote_price'] = $promote_price > 0 ? price_format($promote_price) : '';
$goods[$idx]['brief'] = $row['goods_brief'];
$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]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
$idx++;
}
/* 分类信息 */
$sql = 'SELECT brand_name FROM ' . $GLOBALS['ecs']->table('brand') . " WHERE brand_id = '$brand_id'";
$brand['id'] = $brand_id;
$brand['name'] = $GLOBALS['db']->getOne($sql);
$brand['url'] = build_uri('brand', array('bid' => $brand_id), $brand['name']);
$brand_goods = array('brand' => $brand, 'goods' => $goods);
return $brand_goods;
}
/**
* 获得所有扩展分类属于指定分类的所有商品ID
*
* @access public
* @param string $cat_id 分类查询字符串
* @return string
*/
function get_extension_goods($cats)
{
$extension_goods_array = '';
$sql = 'SELECT goods_id FROM ' . $GLOBALS['ecs']->table('goods_cat') . " AS g WHERE $cats";
$extension_goods_array = $GLOBALS['db']->getCol($sql);
return db_create_in($extension_goods_array, 'g.goods_id');
}
/**
* 判断某个商品是否正在特价促销期
*
* @access public
* @param float $price 促销价格
* @param string $start 促销开始日期
* @param string $end 促销结束日期
* @return float 如果还在促销期则返回促销价否则返回0
*/
function bargain_price($price, $start, $end)
{
if ($price == 0)
{
return 0;
}
else
{
$time = gmtime();
if ($time >= $start && $time <= $end)
{
return $price;
}
else
{
return 0;
}
}
}
/**
* 获得指定的规格的价格
*
* @access public
* @param mix $spec 规格ID的数组或者逗号分隔的字符串
* @return void
*/
function spec_price($spec)
{
if (!empty($spec))
{
if(is_array($spec))
{
foreach($spec as $key=>$val)
{
$spec[$key]=addslashes($val);
}
}
else
{
$spec=addslashes($spec);
}
$where = db_create_in($spec, 'goods_attr_id');
$sql = 'SELECT SUM(attr_price) AS attr_price FROM ' . $GLOBALS['ecs']->table('goods_attr') . " WHERE $where";
$price = floatval($GLOBALS['db']->getOne($sql));
}
else
{
$price = 0;
}
return $price;
}
/**
* 取得团购活动信息
* @param int $group_buy_id 团购活动id
* @param int $current_num 本次购买数量(计算当前价时要加上的数量)
* @return array
* status 状态:
*/
function group_buy_info($group_buy_id, $current_num = 0)
{
/* 取得团购活动信息 */
$group_buy_id = intval($group_buy_id);
$sql = "SELECT *, act_id AS group_buy_id, act_desc AS group_buy_desc, start_time AS start_date, end_time AS end_date " .
"FROM " . $GLOBALS['ecs']->table('goods_activity') .
"WHERE act_id = '$group_buy_id' " .
"AND act_type = '" . GAT_GROUP_BUY . "'";
$group_buy = $GLOBALS['db']->getRow($sql);
/* 如果为空,返回空数组 */
if (empty($group_buy))
{
return array();
}
$ext_info = unserialize($group_buy['ext_info']);
$group_buy = array_merge($group_buy, $ext_info);
/* 格式化时间 */
$group_buy['formated_start_date'] = local_date('Y-m-d H:i', $group_buy['start_time']);
$group_buy['formated_end_date'] = local_date('Y-m-d H:i', $group_buy['end_time']);
/* 格式化保证金 */
$group_buy['formated_deposit'] = price_format($group_buy['deposit'], false);
/* 处理价格阶梯 */
$price_ladder = $group_buy['price_ladder'];
if (!is_array($price_ladder) || empty($price_ladder))
{
$price_ladder = array(array('amount' => 0, 'price' => 0));
}
else
{
foreach ($price_ladder as $key => $amount_price)
{
$price_ladder[$key]['formated_price'] = price_format($amount_price['price'], false);
}
}
$group_buy['price_ladder'] = $price_ladder;
/* 统计信息 */
$stat = group_buy_stat($group_buy_id, $group_buy['deposit']);
$group_buy = array_merge($group_buy, $stat);
/* 计算当前价 */
$cur_price = $price_ladder[0]['price']; // 初始化
$cur_amount = $stat['valid_goods'] + $current_num; // 当前数量
foreach ($price_ladder as $amount_price)
{
if ($cur_amount >= $amount_price['amount'])
{
$cur_price = $amount_price['price'];
}
else
{
break;
}
}
$group_buy['cur_price'] = $cur_price;
$group_buy['formated_cur_price'] = price_format($cur_price, false);
/* 最终价 */
$group_buy['trans_price'] = $group_buy['cur_price'];
$group_buy['formated_trans_price'] = $group_buy['formated_cur_price'];
$group_buy['trans_amount'] = $group_buy['valid_goods'];
/* 状态 */
$group_buy['status'] = group_buy_status($group_buy);
if (isset($GLOBALS['_LANG']['gbs'][$group_buy['status']]))
{
$group_buy['status_desc'] = $GLOBALS['_LANG']['gbs'][$group_buy['status']];
}
$group_buy['start_time'] = $group_buy['formated_start_date'];
$group_buy['end_time'] = $group_buy['formated_end_date'];
return $group_buy;
}
/*
* 取得某团购活动统计信息
* @param int $group_buy_id 团购活动id
* @param float $deposit 保证金
* @return array 统计信息
* total_order 总订单数
* total_goods 总商品数
* valid_order 有效订单数
* valid_goods 有效商品数
*/
function group_buy_stat($group_buy_id, $deposit)
{
$group_buy_id = intval($group_buy_id);
/* 取得团购活动商品ID */
$sql = "SELECT goods_id " .
"FROM " . $GLOBALS['ecs']->table('goods_activity') .
"WHERE act_id = '$group_buy_id' " .
"AND act_type = '" . GAT_GROUP_BUY . "'";
$group_buy_goods_id = $GLOBALS['db']->getOne($sql);
/* 取得总订单数和总商品数 */
$sql = "SELECT COUNT(*) AS total_order, SUM(g.goods_number) AS total_goods " .
"FROM " . $GLOBALS['ecs']->table('order_info') . " AS o, " .
$GLOBALS['ecs']->table('order_goods') . " AS g " .
" WHERE o.order_id = g.order_id " .
"AND o.extension_code = 'group_buy' " .
"AND o.extension_id = '$group_buy_id' " .
"AND g.goods_id = '$group_buy_goods_id' " .
"AND (order_status = '" . OS_CONFIRMED . "' OR order_status = '" . OS_UNCONFIRMED . "')";
$stat = $GLOBALS['db']->getRow($sql);
if ($stat['total_order'] == 0)
{
$stat['total_goods'] = 0;
}
/* 取得有效订单数和有效商品数 */
$deposit = floatval($deposit);
if ($deposit > 0 && $stat['total_order'] > 0)
{
$sql .= " AND (o.money_paid + o.surplus) >= '$deposit'";
$row = $GLOBALS['db']->getRow($sql);
$stat['valid_order'] = $row['total_order'];
if ($stat['valid_order'] == 0)
{
$stat['valid_goods'] = 0;
}
else
{
$stat['valid_goods'] = $row['total_goods'];
}
}
else
{
$stat['valid_order'] = $stat['total_order'];
$stat['valid_goods'] = $stat['total_goods'];
}
return $stat;
}
/**
* 获得团购的状态
*
* @access public
* @param array
* @return integer
*/
function group_buy_status($group_buy)
{
$now = gmtime();
if ($group_buy['is_finished'] == 0)
{
/* 未处理 */
if ($now < $group_buy['start_time'])
{
$status = GBS_PRE_START;
}
elseif ($now > $group_buy['end_time'])
{
$status = GBS_FINISHED;
}
else
{
if ($group_buy['restrict_amount'] == 0 || $group_buy['valid_goods'] < $group_buy['restrict_amount'])
{
$status = GBS_UNDER_WAY;
}
else
{
$status = GBS_FINISHED;
}
}
}
elseif ($group_buy['is_finished'] == GBS_SUCCEED)
{
/* 已处理,团购成功 */
$status = GBS_SUCCEED;
}
elseif ($group_buy['is_finished'] == GBS_FAIL)
{
/* 已处理,团购失败 */
$status = GBS_FAIL;
}
return $status;
}
/**
* 取得拍卖活动信息
* @param int $act_id 活动id
* @return array
*/
function auction_info($act_id, $config = false)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('goods_activity') . " WHERE act_id = '$act_id'";
$auction = $GLOBALS['db']->getRow($sql);
if ($auction['act_type'] != GAT_AUCTION)
{
return array();
}
$auction['status_no'] = auction_status($auction);
if ($config == true)
{
$auction['start_time'] = local_date('Y-m-d H:i', $auction['start_time']);
$auction['end_time'] = local_date('Y-m-d H:i', $auction['end_time']);
}
else
{
$auction['start_time'] = local_date($GLOBALS['_CFG']['time_format'], $auction['start_time']);
$auction['end_time'] = local_date($GLOBALS['_CFG']['time_format'], $auction['end_time']);
}
$ext_info = unserialize($auction['ext_info']);
$auction = array_merge($auction, $ext_info);
$auction['formated_start_price'] = price_format($auction['start_price']);
$auction['formated_end_price'] = price_format($auction['end_price']);
$auction['formated_amplitude'] = price_format($auction['amplitude']);
$auction['formated_deposit'] = price_format($auction['deposit']);
/* 查询出价用户数和最后出价 */
$sql = "SELECT COUNT(DISTINCT bid_user) FROM " . $GLOBALS['ecs']->table('auction_log') .
" WHERE act_id = '$act_id'";
$auction['bid_user_count'] = $GLOBALS['db']->getOne($sql);
if ($auction['bid_user_count'] > 0)
{
$sql = "SELECT a.*, u.user_name " .
"FROM " . $GLOBALS['ecs']->table('auction_log') . " AS a, " .
$GLOBALS['ecs']->table('users') . " AS u " .
"WHERE a.bid_user = u.user_id " .
"AND act_id = '$act_id' " .
"ORDER BY a.log_id DESC";
$row = $GLOBALS['db']->getRow($sql);
$row['formated_bid_price'] = price_format($row['bid_price'], false);
$row['bid_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['bid_time']);
$auction['last_bid'] = $row;
}
/* 查询已确认订单数 */
if ($auction['status_no'] > 1)
{
$sql = "SELECT COUNT(*)" .
" FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE extension_code = 'auction'" .
" AND extension_id = '$act_id'" .
" AND order_status " . db_create_in(array(OS_CONFIRMED, OS_UNCONFIRMED));
$auction['order_count'] = $GLOBALS['db']->getOne($sql);
}
else
{
$auction['order_count'] = 0;
}
/* 当前价 */
$auction['current_price'] = isset($auction['last_bid']) ? $auction['last_bid']['bid_price'] : $auction['start_price'];
$auction['formated_current_price'] = price_format($auction['current_price'], false);
return $auction;
}
/**
* 取得拍卖活动出价记录
* @param int $act_id 活动id
* @return array
*/
function auction_log($act_id)
{
$log = array();
$sql = "SELECT a.*, u.user_name " .
"FROM " . $GLOBALS['ecs']->table('auction_log') . " AS a," .
$GLOBALS['ecs']->table('users') . " AS u " .
"WHERE a.bid_user = u.user_id " .
"AND act_id = '$act_id' " .
"ORDER BY a.log_id DESC";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$row['bid_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['bid_time']);
$row['formated_bid_price'] = price_format($row['bid_price'], false);
$log[] = $row;
}
return $log;
}
/**
* 计算拍卖活动状态(注意参数一定是原始信息)
* @param array $auction 拍卖活动原始信息
* @return int
*/
function auction_status($auction)
{
$now = gmtime();
if ($auction['is_finished'] == 0)
{
if ($now < $auction['start_time'])
{
return PRE_START; // 未开始
}
elseif ($now > $auction['end_time'])
{
return FINISHED; // 已结束,未处理
}
else
{
return UNDER_WAY; // 进行中
}
}
elseif ($auction['is_finished'] == 1)
{
return FINISHED; // 已结束,未处理
}
else
{
return SETTLED; // 已结束,已处理
}
}
/**
* 取得商品信息
* @param int $goods_id 商品id
* @return array
*/
function goods_info($goods_id)
{
$sql = "SELECT g.*, b.brand_name " .
"FROM " . $GLOBALS['ecs']->table('goods') . " AS g " .
"LEFT JOIN " . $GLOBALS['ecs']->table('brand') . " AS b ON g.brand_id = b.brand_id " .
"WHERE g.goods_id = '$goods_id'";
$row = $GLOBALS['db']->getRow($sql);
if (!empty($row))
{
/* 修正重量显示 */
$row['goods_weight'] = (intval($row['goods_weight']) > 0) ?
$row['goods_weight'] . $GLOBALS['_LANG']['kilogram'] :
($row['goods_weight'] * 1000) . $GLOBALS['_LANG']['gram'];
/* 修正图片 */
$row['goods_img'] = get_image_path($goods_id, $row['goods_img']);
}
return $row;
}
/**
* 取得优惠活动信息
* @param int $act_id 活动id
* @return array
*/
function favourable_info($act_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('favourable_activity') .
" WHERE act_id = '$act_id'";
$row = $GLOBALS['db']->getRow($sql);
if (!empty($row))
{
$row['start_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['start_time']);
$row['end_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['end_time']);
$row['formated_min_amount'] = price_format($row['min_amount']);
$row['formated_max_amount'] = price_format($row['max_amount']);
$row['content'] = $row['content'];
// if ($row['act_type'] == FAT_GOODS)
// {
// $row['act_type_ext'] = round($row['act_type_ext']);
// }
}
return $row;
}
/**
* 批发信息
* @param int $act_id 活动id
* @return array
*/
function wholesale_info($act_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('wholesale') .
" WHERE act_id = '$act_id'";
$row = $GLOBALS['db']->getRow($sql);
if (!empty($row))
{
$row['price_list'] = unserialize($row['prices']);
}
return $row;
}
/**
* 添加商品名样式
* @param string $goods_name 商品名称
* @param string $style 样式参数
* @return string
*/
function add_style($goods_name, $style)
{
$goods_style_name = $goods_name;
$arr = explode('+', $style);
$font_color = !empty($arr[0]) ? $arr[0] : '';
$font_style = !empty($arr[1]) ? $arr[1] : '';
if ($font_color!='')
{
$goods_style_name = '<font color=' . $font_color . '>' . $goods_style_name . '</font>';
}
if ($font_style != '')
{
$goods_style_name = '<' . $font_style .'>' . $goods_style_name . '</' . $font_style . '>';
}
return $goods_style_name;
}
/**
* 取得商品属性
* @param int $goods_id 商品id
* @return array
*/
function get_goods_attr($goods_id)
{
$attr_list = array();
$sql = "SELECT a.attr_id, a.attr_name " .
"FROM " . $GLOBALS['ecs']->table('goods') . " AS g, " . $GLOBALS['ecs']->table('attribute') . " AS a " .
"WHERE g.goods_id = '$goods_id' " .
"AND g.goods_type = a.cat_id " .
"AND a.attr_type = 1";
$attr_id_list = $GLOBALS['db']->getCol($sql);
$res = $GLOBALS['db']->query($sql);
while ($attr = $GLOBALS['db']->fetchRow($res))
{
if (defined('ECS_ADMIN'))
{
$attr['goods_attr_list'] = array(0 => $GLOBALS['_LANG']['select_please']);
}
else
{
$attr['goods_attr_list'] = array();
}
$attr_list[$attr['attr_id']] = $attr;
}
$sql = "SELECT attr_id, goods_attr_id, attr_value " .
"FROM " . $GLOBALS['ecs']->table('goods_attr') .
" WHERE goods_id = '$goods_id' " .
"AND attr_id " . db_create_in($attr_id_list);
$res = $GLOBALS['db']->query($sql);
while ($goods_attr = $GLOBALS['db']->fetchRow($res))
{
$attr_list[$goods_attr['attr_id']]['goods_attr_list'][$goods_attr['goods_attr_id']] = $goods_attr['attr_value'];
}
return $attr_list;
}
/**
* 获得购物车中商品的配件
*
* @access public
* @param array $goods_list
* @return array
*/
function get_goods_fittings($goods_list = array())
{
$temp_index = 0;
$arr = array();
$sql = 'SELECT gg.parent_id, ggg.goods_name AS parent_name, gg.goods_id, gg.goods_price, 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 ".
'FROM ' . $GLOBALS['ecs']->table('group_goods') . ' AS gg ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('goods') . 'AS g ON g.goods_id = gg.goods_id ' .
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.goods_id = gg.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
"LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS ggg ON ggg.goods_id = gg.parent_id ".
"WHERE gg.parent_id " . db_create_in($goods_list) . " AND g.is_delete = 0 AND g.is_on_sale = 1 ".
"ORDER BY gg.parent_id, gg.goods_id";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$arr[$temp_index]['parent_id'] = $row['parent_id'];//配件的基本件ID
$arr[$temp_index]['parent_name'] = $row['parent_name'];//配件的基本件的名称
$arr[$temp_index]['parent_short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
sub_str($row['parent_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['parent_name'];//配件的基本件显示的名称
$arr[$temp_index]['goods_id'] = $row['goods_id'];//配件的商品ID
$arr[$temp_index]['goods_name'] = $row['goods_name'];//配件的名称
$arr[$temp_index]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];//配件显示的名称
$arr[$temp_index]['fittings_price'] = price_format($row['goods_price']);//配件价格
$arr[$temp_index]['shop_price'] = price_format($row['shop_price']);//配件原价格
$arr[$temp_index]['goods_thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true);
$arr[$temp_index]['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']);
$arr[$temp_index]['url'] = build_uri('goods', array('gid'=>$row['goods_id']), $row['goods_name']);
$temp_index ++;
}
return $arr;
}
/**
* 取指定规格的货品信息
*
* @access public
* @param string $goods_id
* @param array $spec_goods_attr_id
* @return array
*/
function get_products_info($goods_id, $spec_goods_attr_id)
{
$return_array = array();
if (empty($spec_goods_attr_id) || !is_array($spec_goods_attr_id) || empty($goods_id))
{
return $return_array;
}
$goods_attr_array = sort_goods_attr_id_array($spec_goods_attr_id);
if(isset($goods_attr_array['sort']))
{
$goods_attr = implode('|', $goods_attr_array['sort']);
$sql = "SELECT * FROM " .$GLOBALS['ecs']->table('products'). " WHERE goods_id = '$goods_id' AND goods_attr = '$goods_attr' LIMIT 0, 1";
$return_array = $GLOBALS['db']->getRow($sql);
}
return $return_array;
}
?>