You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3032 lines
96 KiB

This file contains ambiguous Unicode characters!

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

<?php
if (!defined('IN_ASC'))
{
die('Hacking attempt');
}
/*評論百分比*/
function comment_percent($goods_id)
{
$sql = 'SELECT COUNT(*) AS haoping FROM '.$GLOBALS['ecs']->table('comment')." WHERE id_value = '$goods_id' AND comment_type=0 AND status = 1 AND parent_id = 0 AND (comment_rank = 4 OR comment_rank = 5)";
$haoping_count = $GLOBALS['db']->getOne($sql);
$sql = 'SELECT COUNT(*) AS zhongping FROM '.$GLOBALS['ecs']->table('comment')." WHERE id_value = '$goods_id' AND comment_type=0 AND status = 1 AND parent_id = 0 AND (comment_rank = 2 OR comment_rank = 3)";
$zhongping_count = $GLOBALS['db']->getOne($sql);
$sql = 'SELECT COUNT(*) AS chaping FROM '.$GLOBALS['ecs']->table('comment')." WHERE id_value = '$goods_id' AND comment_type=0 AND status = 1 AND parent_id = 0 AND comment_rank = 1";
$chaping_count = $GLOBALS['db']->getOne($sql);
$sql = 'SELECT COUNT(*) AS comment_count FROM '.$GLOBALS['ecs']->table('comment')." WHERE id_value = '$goods_id' AND comment_type=0 AND status = 1 AND parent_id = 0";
$comment_count = $GLOBALS['db']->getOne($sql);
$arr['haoping_percent'] = $comment_count?round(($haoping_count/$comment_count)*100) : 0;
$arr['zhongping_percent'] = $comment_count?round(($zhongping_count/$comment_count)*100) : 0;
$arr['chaping_percent'] = $comment_count?round(($chaping_count/$comment_count)*100) : 0;
$arr['comment_count'] = $comment_count ? $comment_count : 0;
if($comment_count == 0)
{
$arr['haoping_percent'] = 100;
}
foreach($arr as $key => $val)
{
if($val == 0.0)
{
$arr[$key] = 0;
}
}
return $arr;
}
function get_related_cat($cat_id)
{
$sql = 'SELECT parent_id FROM '.$GLOBALS['ecs']->table('category')." WHERE cat_id = '$cat_id' ";
$parent_id = $GLOBALS['db']->getOne($sql);
$sql = 'SELECT cat_id,cat_name FROM '.$GLOBALS['ecs']->table('category')." WHERE parent_id = '$parent_id' AND cat_id != '$cat_id'";
$res = $GLOBALS['db']->getAll($sql);
$arr = array();
if($res != '')
{
foreach($res as $idx=>$row)
{
$arr[$idx]['cat_name'] = $row['cat_name'];
$arr[$idx]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
}
}
return $arr;
}
function get_related_brand($cat_id)
{
$children = get_children($cat_id);
/* 品牌篩選 */
$sql = "SELECT b.brand_id, b.brand_name,b.brand_logo, COUNT(*) AS goods_num ".
"FROM " . $GLOBALS['ecs']->table('brand') . "AS b, ".
$GLOBALS['ecs']->table('goods') . " AS g LEFT JOIN ". $GLOBALS['ecs']->table('goods_cat') . " AS gc ON g.goods_id = gc.goods_id " .
"WHERE g.brand_id = b.brand_id AND ($children OR " . 'gc.cat_id ' . db_create_in(array_unique(array_merge(array($cat_id), array_keys(cat_list($cat_id, 0, false))))) . ") AND b.is_show = 1 " .
" AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 ".
"GROUP BY b.brand_id HAVING goods_num > 0 ORDER BY b.sort_order, b.brand_id ASC";
$brands = $GLOBALS['db']->getAll($sql);
foreach ($brands AS $key => $val)
{
$temp_key = $key + 1;
$brands[$temp_key]['brand_name'] = $val['brand_name'];
$brands[$temp_key]['url'] = build_uri('category', array('cid' => $cat_id, 'bid' => $val['brand_id'], 'price_min'=>$price_min, 'price_max'=> $price_max, 'filter_attr'=>$filter_attr_str), $cat['cat_name']);
/* 判斷品牌是否被選中 */
if ($brand == $brands[$key]['brand_id'])
{
$brands[$temp_key]['selected'] = 1;
}
else
{
$brands[$temp_key]['selected'] = 0;
}
$brands[$temp_key]['logo'] = !empty($val['brand_logo']) ? 'data/brandlogo/'.$val['brand_logo'] : '';
}
$brands[0]['brand_name'] = $_LANG['all_attribute'];
$brands[0]['url'] = build_uri('category', array('cid' => $cat_id, 'bid' => 0, 'price_min'=>$price_min, 'price_max'=> $price_max, 'filter_attr'=>$filter_attr_str), $cat['cat_name']);
$brands[0]['selected'] = empty($brand) ? 1 : 0;
unset($brands[0]);
return $brands;
}
/**
* 創建像這樣的查詢: "IN('a','b')";
*
* @access public
* @param mix $item_list 列表數組或字符串
* @param string $field_name 字段名稱
*
* @return void
*/
function db_create_in($item_list, $field_name = '')
{
if (empty($item_list))
{
return $field_name . " IN ('') ";
}
else
{
if (!is_array($item_list))
{
$item_list = explode(',', $item_list);
}
$item_list = array_unique($item_list);
$item_list_tmp = '';
foreach ($item_list AS $item)
{
if ($item !== '')
{
$item_list_tmp .= $item_list_tmp ? ",'$item'" : "'$item'";
}
}
if (empty($item_list_tmp))
{
return $field_name . " IN ('') ";
}
else
{
return $field_name . ' IN (' . $item_list_tmp . ') ';
}
}
}
/**
* 驗證輸入的郵件地址是否合法
*
* @access public
* @param string $email 需要驗證的郵件地址
*
* @return bool
*/
function is_email($user_email)
{
$chars = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i";
if (strpos($user_email, '@') !== false && strpos($user_email, '.') !== false)
{
if (preg_match($chars, $user_email))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/**
* 檢查是否為一個合法的時間格式
*
* @access public
* @param string $time
* @return void
*/
function is_time($time)
{
$pattern = '/[\d]{4}-[\d]{1,2}-[\d]{1,2}\s[\d]{1,2}:[\d]{1,2}:[\d]{1,2}/';
return preg_match($pattern, $time);
}
/**
* 獲得查詢時間和次數並賦值給smarty
*
* @access public
* @return void
*/
function assign_query_info()
{
if ($GLOBALS['db']->queryTime == '')
{
$query_time = 0;
}
else
{
if (PHP_VERSION >= '5.0.0')
{
$query_time = number_format(microtime(true) - $GLOBALS['db']->queryTime, 6);
}
else
{
list($now_usec, $now_sec) = explode(' ', microtime());
list($start_usec, $start_sec) = explode(' ', $GLOBALS['db']->queryTime);
$query_time = number_format(($now_sec - $start_sec) + ($now_usec - $start_usec), 6);
}
}
$GLOBALS['smarty']->assign('query_info', sprintf($GLOBALS['_LANG']['query_info'], $GLOBALS['db']->queryCount, $query_time));
/* 內存佔用情況 */
if ($GLOBALS['_LANG']['memory_info'] && function_exists('memory_get_usage'))
{
$GLOBALS['smarty']->assign('memory_info', sprintf($GLOBALS['_LANG']['memory_info'], memory_get_usage() / 1048576));
}
/* 是否啓用了 gzip */
$gzip_enabled = gzip_enabled() ? $GLOBALS['_LANG']['gzip_enabled'] : $GLOBALS['_LANG']['gzip_disabled'];
$GLOBALS['smarty']->assign('gzip_enabled', $gzip_enabled);
}
/**
* 創建地區的返回信息
*
* @access public
* @param array $arr 地區數組 *
* @return void
*/
function region_result($parent, $sel_name, $type)
{
global $cp;
$arr = get_regions($type, $parent);
foreach ($arr AS $v)
{
$region =& $cp->add_node('region');
$region_id =& $region->add_node('id');
$region_name =& $region->add_node('name');
$region_id->set_data($v['region_id']);
$region_name->set_data($v['region_name']);
}
$select_obj =& $cp->add_node('select');
$select_obj->set_data($sel_name);
}
/**
* 獲得指定國家的所有省份
*
* @access public
* @param int country 國家的編號
* @return array
*/
function get_regions($type = 0, $parent = 0)
{
$sql = 'SELECT region_id, region_name FROM ' . $GLOBALS['ecs']->table('region') .
" WHERE region_type = '$type' AND parent_id = '$parent'";
return $GLOBALS['db']->GetAll($sql);
}
/**
* 獲得配送區域中指定的配送方式的配送費用的計算參數
*
* @access public
* @param int $area_id 配送區域ID
*
* @return array;
*/
function get_shipping_config($area_id)
{
/* 獲得配置信息 */
$sql = 'SELECT configure FROM ' . $GLOBALS['ecs']->table('shipping_area') . " WHERE shipping_area_id = '$area_id'";
$cfg = $GLOBALS['db']->GetOne($sql);
if ($cfg)
{
/* 拆分成配置信息的數組 */
$arr = unserialize($cfg);
}
else
{
$arr = array();
}
return $arr;
}
/**
* 初始化會員數據整合類
*
* @access public
* @return object
*/
function init_users()
{
$set_modules = false;
static $cls = null;
if ($cls != null)
{
return $cls;
}
include_once(ROOT_PATH . 'includes/modules/integrates/' . $GLOBALS['_CFG']['integrate_code'] . '.php');
$cfg = unserialize($GLOBALS['_CFG']['integrate_config']);
$cls = new $GLOBALS['_CFG']['integrate_code']($cfg);
return $cls;
}
/**
* 獲得指定分類下的子分類的數組
*
* @access public
* @param int $cat_id 分類的ID
* @param int $selected 當前選中分類的ID
* @param boolean $re_type 返回的類型: 值為真時返回下拉列表,否則返回數組
* @param int $level 限定返回的級數。為0時返回所有級數
* @param int $is_show_all 如果為true顯示所有分類如果為false隱藏不可見分類。
* @return mix
*/
function cat_list($cat_id = 0, $selected = 0, $re_type = true, $level = 0, $is_show_all = true)
{
static $res = NULL;
if ($res === NULL)
{
$data = read_static_cache('cat_pid_releate');
if ($data === false)
{
$sql = "SELECT c.cat_id, c.cat_name, c.cat_ico, c.measure_unit, c.parent_id, c.is_show, c.show_in_nav, c.grade, c.sort_order, COUNT(s.cat_id) AS has_children ".
'FROM ' . $GLOBALS['ecs']->table('category') . " AS c ".
"LEFT JOIN " . $GLOBALS['ecs']->table('category') . " AS s ON s.parent_id=c.cat_id ".
"GROUP BY c.cat_id ".
'ORDER BY c.parent_id, c.sort_order ASC, c.cat_id ASC';
$res = $GLOBALS['db']->getAll($sql);
$sql = "SELECT cat_id, COUNT(*) AS goods_num " .
" FROM " . $GLOBALS['ecs']->table('goods') .
" WHERE is_delete = 0 AND is_on_sale = 1 " .
" GROUP BY cat_id";
$res2 = $GLOBALS['db']->getAll($sql);
$sql = "SELECT gc.cat_id, COUNT(*) AS goods_num " .
" FROM " . $GLOBALS['ecs']->table('goods_cat') . " AS gc , " . $GLOBALS['ecs']->table('goods') . " AS g " .
" WHERE g.goods_id = gc.goods_id AND g.is_delete = 0 AND g.is_on_sale = 1 " .
" GROUP BY gc.cat_id";
$res3 = $GLOBALS['db']->getAll($sql);
$newres = array();
foreach($res2 as $k=>$v)
{
$newres[$v['cat_id']] = $v['goods_num'];
foreach($res3 as $ks=>$vs)
{
if($v['cat_id'] == $vs['cat_id'])
{
$newres[$v['cat_id']] = $v['goods_num'] + $vs['goods_num'];
}
}
}
foreach($res as $k=>$v)
{
$res[$k]['goods_num'] = !empty($newres[$v['cat_id']]) ? $newres[$v['cat_id']] : 0;
}
//如果數組過大,不採用靜態緩存方式
if (count($res) <= 1000)
{
write_static_cache('cat_pid_releate', $res);
}
}
else
{
$res = $data;
}
}
if (empty($res) == true)
{
return $re_type ? '' : array();
}
$options = cat_options($cat_id, $res); // 獲得指定分類下的子分類的數組
$children_level = 99999; //大於這個分類的將被刪除
if ($is_show_all == false)
{
foreach ($options as $key => $val)
{
if ($val['level'] > $children_level)
{
unset($options[$key]);
}
else
{
if ($val['is_show'] == 0)
{
unset($options[$key]);
if ($children_level > $val['level'])
{
$children_level = $val['level']; //標記一下,這樣子分類也能刪除
}
}
else
{
$children_level = 99999; //恢復初始值
}
}
}
}
/* 截取到指定的縮減級別 */
if ($level > 0)
{
if ($cat_id == 0)
{
$end_level = $level;
}
else
{
$first_item = reset($options); // 獲取第一個元素
$end_level = $first_item['level'] + $level;
}
/* 保留level小於end_level的部分 */
foreach ($options AS $key => $val)
{
if ($val['level'] >= $end_level)
{
unset($options[$key]);
}
}
}
if ($re_type == true)
{
$select = '';
foreach ($options AS $var)
{
$select .= '<option value="' . $var['cat_id'] . '" ';
$select .= ($selected == $var['cat_id']) ? "selected='ture'" : '';
$select .= '>';
if ($var['level'] > 0)
{
$select .= str_repeat('&nbsp;', $var['level'] * 4);
}
$select .= htmlspecialchars(addslashes($var['cat_name']), ENT_QUOTES) . '</option>';
}
return $select;
}
else
{
foreach ($options AS $key => $value)
{
$options[$key]['url'] = build_uri('category', array('cid' => $value['cat_id']), $value['cat_name']);
}
return $options;
}
}
/**
* 過濾和排序所有分類,返回一個帶有縮進級別的數組
*
* @access private
* @param int $cat_id 上級分類ID
* @param array $arr 含有所有分類的數組
* @param int $level 級別
* @return void
*/
function cat_options($spec_cat_id, $arr)
{
static $cat_options = array();
if (isset($cat_options[$spec_cat_id]))
{
return $cat_options[$spec_cat_id];
}
if (!isset($cat_options[0]))
{
$level = $last_cat_id = 0;
$options = $cat_id_array = $level_array = array();
$data = read_static_cache('cat_option_static');
if ($data === false)
{
while (!empty($arr))
{
foreach ($arr AS $key => $value)
{
$cat_id = $value['cat_id'];
if ($level == 0 && $last_cat_id == 0)
{
if ($value['parent_id'] > 0)
{
break;
}
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] == 0)
{
continue;
}
$last_cat_id = $cat_id;
$cat_id_array = array($cat_id);
$level_array[$last_cat_id] = ++$level;
continue;
}
if ($value['parent_id'] == $last_cat_id)
{
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] > 0)
{
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id;
}
$last_cat_id = $cat_id;
$cat_id_array[] = $cat_id;
$level_array[$last_cat_id] = ++$level;
}
}
elseif ($value['parent_id'] > $last_cat_id)
{
break;
}
}
$count = count($cat_id_array);
if ($count > 1)
{
$last_cat_id = array_pop($cat_id_array);
}
elseif ($count == 1)
{
if ($last_cat_id != end($cat_id_array))
{
$last_cat_id = end($cat_id_array);
}
else
{
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
continue;
}
}
if ($last_cat_id && isset($level_array[$last_cat_id]))
{
$level = $level_array[$last_cat_id];
}
else
{
$level = 0;
}
}
//如果數組過大,不採用靜態緩存方式
if (count($options) <= 2000)
{
write_static_cache('cat_option_static', $options);
}
}
else
{
$options = $data;
}
$cat_options[0] = $options;
}
else
{
$options = $cat_options[0];
}
if (!$spec_cat_id)
{
return $options;
}
else
{
if (empty($options[$spec_cat_id]))
{
return array();
}
$spec_cat_id_level = $options[$spec_cat_id]['level'];
foreach ($options AS $key => $value)
{
if ($key != $spec_cat_id)
{
unset($options[$key]);
}
else
{
break;
}
}
$spec_cat_id_array = array();
foreach ($options AS $key => $value)
{
if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
($spec_cat_id_level > $value['level']))
{
break;
}
else
{
$spec_cat_id_array[$key] = $value;
}
}
$cat_options[$spec_cat_id] = $spec_cat_id_array;
return $spec_cat_id_array;
}
}
/**
* 載入配置信息
*
* @access public
* @return array
*/
function load_config()
{
$arr = array();
$data = read_static_cache('shop_config');
if ($data === false)
{
$sql = 'SELECT code, value FROM ' . $GLOBALS['ecs']->table('shop_config') . ' WHERE parent_id > 0';
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
$arr[$row['code']] = $row['value'];
}
/* 對數值型設置處理 */
$arr['watermark_alpha'] = intval($arr['watermark_alpha']);
$arr['market_price_rate'] = floatval($arr['market_price_rate']);
$arr['integral_scale'] = floatval($arr['integral_scale']);
//$arr['integral_percent'] = floatval($arr['integral_percent']);
$arr['cache_time'] = intval($arr['cache_time']);
$arr['thumb_width'] = intval($arr['thumb_width']);
$arr['thumb_height'] = intval($arr['thumb_height']);
$arr['image_width'] = intval($arr['image_width']);
$arr['image_height'] = intval($arr['image_height']);
$arr['best_number'] = !empty($arr['best_number']) && intval($arr['best_number']) > 0 ? intval($arr['best_number']) : 3;
$arr['new_number'] = !empty($arr['new_number']) && intval($arr['new_number']) > 0 ? intval($arr['new_number']) : 3;
$arr['hot_number'] = !empty($arr['hot_number']) && intval($arr['hot_number']) > 0 ? intval($arr['hot_number']) : 3;
$arr['promote_number'] = !empty($arr['promote_number']) && intval($arr['promote_number']) > 0 ? intval($arr['promote_number']) : 3;
$arr['top_number'] = intval($arr['top_number']) > 0 ? intval($arr['top_number']) : 10;
$arr['history_number'] = intval($arr['history_number']) > 0 ? intval($arr['history_number']) : 5;
$arr['comments_number'] = intval($arr['comments_number']) > 0 ? intval($arr['comments_number']) : 5;
$arr['article_number'] = intval($arr['article_number']) > 0 ? intval($arr['article_number']) : 5;
$arr['page_size'] = intval($arr['page_size']) > 0 ? intval($arr['page_size']) : 10;
$arr['bought_goods'] = intval($arr['bought_goods']);
$arr['goods_name_length'] = intval($arr['goods_name_length']);
$arr['top10_time'] = intval($arr['top10_time']);
$arr['goods_gallery_number'] = intval($arr['goods_gallery_number']) ? intval($arr['goods_gallery_number']) : 5;
$arr['no_picture'] = !empty($arr['no_picture']) ? str_replace('../', './', $arr['no_picture']) : 'images/no_picture.gif'; // 修改默認商品圖片的路徑
$arr['qq'] = !empty($arr['qq']) ? $arr['qq'] : '';
$arr['ww'] = !empty($arr['ww']) ? $arr['ww'] : '';
$arr['default_storage'] = isset($arr['default_storage']) ? intval($arr['default_storage']) : 1;
$arr['min_goods_amount'] = isset($arr['min_goods_amount']) ? floatval($arr['min_goods_amount']) : 0;
$arr['one_step_buy'] = empty($arr['one_step_buy']) ? 0 : 1;
$arr['invoice_type'] = empty($arr['invoice_type']) ? array('type' => array(), 'rate' => array()) : unserialize($arr['invoice_type']);
$arr['show_order_type'] = isset($arr['show_order_type']) ? $arr['show_order_type'] : 0; // 顯示方式默認為列表方式
$arr['help_open'] = isset($arr['help_open']) ? $arr['help_open'] : 1; // 顯示方式默認為列表方式
if (!isset($GLOBALS['_CFG']['ecs_version']))
{
/* 如果沒有版本號則默認為2.0.5 */
$GLOBALS['_CFG']['ecs_version'] = 'v2.0.5';
}
//限定語言項
$lang_array = array('zh_cn', 'zh_tw', 'en_us');
if (empty($arr['lang']) || !in_array($arr['lang'], $lang_array))
{
$arr['lang'] = 'zh_cn'; // 默認語言為簡體中文
}
if (empty($arr['integrate_code']))
{
$arr['integrate_code'] = 'shop'; // 默認的會員整合插件為 shop
}
write_static_cache('shop_config', $arr);
}
else
{
$arr = $data;
}
return $arr;
}
function load_config_mobile()
{
$arr = array();
$data = false;
if ($data === false)
{
$sql = 'SELECT code, value FROM ' . $GLOBALS['ecs']->table('touch_shop_config') . ' WHERE parent_id > 0';
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
$arr[$row['code']] = $row['value'];
}
/* 對數值型設置處理 */
$arr['watermark_alpha'] = intval($arr['watermark_alpha']);
$arr['market_price_rate'] = floatval($arr['market_price_rate']);
$arr['integral_scale'] = floatval($arr['integral_scale']);
//$arr['integral_percent'] = floatval($arr['integral_percent']);
$arr['cache_time'] = intval($arr['cache_time']);
$arr['thumb_width'] = intval($arr['thumb_width']);
$arr['thumb_height'] = intval($arr['thumb_height']);
$arr['image_width'] = intval($arr['image_width']);
$arr['image_height'] = intval($arr['image_height']);
$arr['best_number'] = !empty($arr['best_number']) && intval($arr['best_number']) > 0 ? intval($arr['best_number']) : 3;
$arr['new_number'] = !empty($arr['new_number']) && intval($arr['new_number']) > 0 ? intval($arr['new_number']) : 3;
$arr['hot_number'] = !empty($arr['hot_number']) && intval($arr['hot_number']) > 0 ? intval($arr['hot_number']) : 3;
$arr['promote_number'] = !empty($arr['promote_number']) && intval($arr['promote_number']) > 0 ? intval($arr['promote_number']) : 3;
$arr['top_number'] = intval($arr['top_number']) > 0 ? intval($arr['top_number']) : 10;
$arr['history_number'] = intval($arr['history_number']) > 0 ? intval($arr['history_number']) : 5;
$arr['comments_number'] = intval($arr['comments_number']) > 0 ? intval($arr['comments_number']) : 5;
$arr['article_number'] = intval($arr['article_number']) > 0 ? intval($arr['article_number']) : 5;
$arr['page_size'] = intval($arr['page_size']) > 0 ? intval($arr['page_size']) : 10;
$arr['bought_goods'] = intval($arr['bought_goods']);
$arr['goods_name_length'] = intval($arr['goods_name_length']);
$arr['top10_time'] = intval($arr['top10_time']);
$arr['goods_gallery_number'] = intval($arr['goods_gallery_number']) ? intval($arr['goods_gallery_number']) : 5;
$arr['no_picture'] = !empty($arr['no_picture']) ? str_replace('../', './', $arr['no_picture']) : 'data/static/images/no_picture.gif'; // 修改默認商品圖片的路徑
$arr['qq'] = !empty($arr['qq']) ? $arr['qq'] : '';
$arr['ww'] = !empty($arr['ww']) ? $arr['ww'] : '';
$arr['default_storage'] = isset($arr['default_storage']) ? intval($arr['default_storage']) : 1;
$arr['min_goods_amount'] = isset($arr['min_goods_amount']) ? floatval($arr['min_goods_amount']) : 0;
$arr['one_step_buy'] = empty($arr['one_step_buy']) ? 0 : 1;
$arr['invoice_type'] = empty($arr['invoice_type']) ? array('type' => array(), 'rate' => array()) : unserialize($arr['invoice_type']);
$arr['show_order_type'] = isset($arr['show_order_type']) ? $arr['show_order_type'] : 0; // 顯示方式默認為列表方式
$arr['help_open'] = isset($arr['help_open']) ? $arr['help_open'] : 1; // 顯示方式默認為列表方式
if (!isset($GLOBALS['_CFG']['ecs_version']))
{
/* 如果沒有版本號則默認為2.0.5 */
$GLOBALS['_CFG']['ecs_version'] = 'v3.6';
}
//限定語言項
$lang_array = array('zh_cn', 'zh_tw', 'en_us');
if (empty($arr['lang']) || !in_array($arr['lang'], $lang_array))
{
$arr['lang'] = 'zh_cn'; // 默認語言為簡體中文
}
if (empty($arr['integrate_code']))
{
$arr['integrate_code'] = 'shop'; // 默認的會員整合插件為 shop
}
}
else
{
$arr = $data;
}
return $arr;
}
/**
* 取得品牌列表
* @return array 品牌列表 id => name
*/
function get_brand_list()
{
$sql = 'SELECT brand_id, brand_name FROM ' . $GLOBALS['ecs']->table('brand') . ' ORDER BY sort_order';
$res = $GLOBALS['db']->getAll($sql);
$brand_list = array();
foreach ($res AS $row)
{
$brand_list[$row['brand_id']] = addslashes($row['brand_name']);
}
return $brand_list;
}
/**
* 獲得某個分類下
*
* @access public
* @param int $cat
* @return array
*/
function get_brands($cat = 0, $app = 'brand')
{
global $page_libs;
$template = basename(PHP_SELF);
$template = substr($template, 0, strrpos($template, '.'));
include_once(ROOT_PATH . ADMIN_PATH . '/includes/lib_template.php');
static $static_page_libs = null;
if ($static_page_libs == null)
{
$static_page_libs = $page_libs;
}
$children = ($cat > 0) ? ' AND ' . get_children($cat) : '';
$sql = "SELECT b.brand_id, b.brand_name, b.brand_logo, b.brand_desc, COUNT(*) AS goods_num, IF(b.brand_logo > '', '1', '0') AS tag ".
"FROM " . $GLOBALS['ecs']->table('brand') . "AS b, ".
$GLOBALS['ecs']->table('goods') . " AS g ".
"WHERE g.brand_id = b.brand_id $children AND is_show = 1 " .
" AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 ".
"GROUP BY b.brand_id HAVING goods_num > 0 ORDER BY tag DESC, b.sort_order ASC";
if (isset($static_page_libs[$template]['/library/brands.lbi']))
{
$num = get_library_number("brands");
$sql .= " LIMIT $num ";
}
$row = $GLOBALS['db']->getAll($sql);
foreach ($row AS $key => $val)
{
$row[$key]['url'] = build_uri($app, array('cid' => $cat, 'bid' => $val['brand_id']), $val['brand_name']);
$row[$key]['brand_desc'] = htmlspecialchars($val['brand_desc'],ENT_QUOTES);
}
return $row;
}
/**
* 所有的促銷活動信息
*
* @access public
* @return array
*/
function get_promotion_info($goods_id = '')
{
$snatch = array();
$group = array();
$auction = array();
$package = array();
$favourable = array();
$gmtime = gmtime();
$sql = 'SELECT act_id, act_name, act_type, start_time, end_time FROM ' . $GLOBALS['ecs']->table('goods_activity') . " WHERE is_finished=0 AND start_time <= '$gmtime' AND end_time >= '$gmtime'";
if(!empty($goods_id))
{
$sql .= " AND goods_id = '$goods_id'";
}
$res = $GLOBALS['db']->getAll($sql);
foreach ($res as $data)
{
switch ($data['act_type'])
{
case GAT_SNATCH: //奪寶奇兵
$snatch[$data['act_id']]['act_name'] = $data['act_name'];
$snatch[$data['act_id']]['url'] = build_uri('snatch', array('sid' => $data['act_id']));
$snatch[$data['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $data['start_time']), local_date('Y-m-d', $data['end_time']));
$snatch[$data['act_id']]['sort'] = $data['start_time'];
$snatch[$data['act_id']]['type'] = 'snatch';
break;
case GAT_GROUP_BUY: //團購
$group[$data['act_id']]['act_name'] = $data['act_name'];
$group[$data['act_id']]['url'] = build_uri('group_buy', array('gbid' => $data['act_id']));
$group[$data['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $data['start_time']), local_date('Y-m-d', $data['end_time']));
$group[$data['act_id']]['sort'] = $data['start_time'];
$group[$data['act_id']]['type'] = 'group_buy';
break;
case GAT_AUCTION: //拍賣
$auction[$data['act_id']]['act_name'] = $data['act_name'];
$auction[$data['act_id']]['url'] = build_uri('auction', array('auid' => $data['act_id']));
$auction[$data['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $data['start_time']), local_date('Y-m-d', $data['end_time']));
$auction[$data['act_id']]['sort'] = $data['start_time'];
$auction[$data['act_id']]['type'] = 'auction';
break;
case GAT_PACKAGE: //禮包
$package[$data['act_id']]['act_name'] = $data['act_name'];
$package[$data['act_id']]['url'] = 'package.php#' . $data['act_id'];
$package[$data['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $data['start_time']), local_date('Y-m-d', $data['end_time']));
$package[$data['act_id']]['sort'] = $data['start_time'];
$package[$data['act_id']]['type'] = 'package';
break;
}
}
$user_rank = ',' . $_SESSION['user_rank'] . ',';
$favourable = array();
$sql = 'SELECT act_id, act_range, act_range_ext, act_name, start_time, end_time FROM ' . $GLOBALS['ecs']->table('favourable_activity') . " WHERE start_time <= '$gmtime' AND end_time >= '$gmtime'";
if(!empty($goods_id))
{
$sql .= " AND CONCAT(',', user_rank, ',') LIKE '%" . $user_rank . "%'";
}
$res = $GLOBALS['db']->getAll($sql);
if(empty($goods_id))
{
foreach ($res as $rows)
{
$favourable[$rows['act_id']]['act_name'] = $rows['act_name'];
$favourable[$rows['act_id']]['url'] = 'activity.php';
$favourable[$rows['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $rows['start_time']), local_date('Y-m-d', $rows['end_time']));
$favourable[$rows['act_id']]['sort'] = $rows['start_time'];
$favourable[$rows['act_id']]['type'] = 'favourable';
}
}
else
{
$sql = "SELECT cat_id, brand_id FROM " . $GLOBALS['ecs']->table('goods') .
"WHERE goods_id = '$goods_id'";
$row = $GLOBALS['db']->getRow($sql);
$category_id = $row['cat_id'];
$brand_id = $row['brand_id'];
foreach ($res as $rows)
{
if ($rows['act_range'] == FAR_ALL)
{
$favourable[$rows['act_id']]['act_name'] = $rows['act_name'];
$favourable[$rows['act_id']]['url'] = 'activity.php';
$favourable[$rows['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $rows['start_time']), local_date('Y-m-d', $rows['end_time']));
$favourable[$rows['act_id']]['sort'] = $rows['start_time'];
$favourable[$rows['act_id']]['type'] = 'favourable';
}
elseif ($rows['act_range'] == FAR_CATEGORY)
{
/* 找出分類id的子分類id */
$id_list = array();
$raw_id_list = explode(',', $rows['act_range_ext']);
foreach ($raw_id_list as $id)
{
$id_list = array_merge($id_list, array_keys(cat_list($id, 0, false)));
}
$ids = join(',', array_unique($id_list));
if (strpos(',' . $ids . ',', ',' . $category_id . ',') !== false)
{
$favourable[$rows['act_id']]['act_name'] = $rows['act_name'];
$favourable[$rows['act_id']]['url'] = 'activity.php';
$favourable[$rows['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $rows['start_time']), local_date('Y-m-d', $rows['end_time']));
$favourable[$rows['act_id']]['sort'] = $rows['start_time'];
$favourable[$rows['act_id']]['type'] = 'favourable';
}
}
elseif ($rows['act_range'] == FAR_BRAND)
{
if (strpos(',' . $rows['act_range_ext'] . ',', ',' . $brand_id . ',') !== false)
{
$favourable[$rows['act_id']]['act_name'] = $rows['act_name'];
$favourable[$rows['act_id']]['url'] = 'activity.php';
$favourable[$rows['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $rows['start_time']), local_date('Y-m-d', $rows['end_time']));
$favourable[$rows['act_id']]['sort'] = $rows['start_time'];
$favourable[$rows['act_id']]['type'] = 'favourable';
}
}
elseif ($rows['act_range'] == FAR_GOODS)
{
if (strpos(',' . $rows['act_range_ext'] . ',', ',' . $goods_id . ',') !== false)
{
$favourable[$rows['act_id']]['act_name'] = $rows['act_name'];
$favourable[$rows['act_id']]['url'] = 'activity.php';
$favourable[$rows['act_id']]['time'] = sprintf($GLOBALS['_LANG']['promotion_time'], local_date('Y-m-d', $rows['start_time']), local_date('Y-m-d', $rows['end_time']));
$favourable[$rows['act_id']]['sort'] = $rows['start_time'];
$favourable[$rows['act_id']]['type'] = 'favourable';
}
}
}
}
// if(!empty($goods_id))
// {
// return array('snatch'=>$snatch, 'group_buy'=>$group, 'auction'=>$auction, 'favourable'=>$favourable);
// }
$sort_time = array();
$arr = array_merge($snatch, $group, $auction, $package, $favourable);
foreach($arr as $key => $value)
{
$sort_time[] = $value['sort'];
}
array_multisort($sort_time, SORT_NUMERIC, SORT_DESC, $arr);
return $arr;
}
/**
* 獲得指定分類下所有底層分類的ID
*
* @access public
* @param integer $cat 指定的分類ID
* @return string
*/
function get_children($cat = 0)
{
return 'g.cat_id ' . db_create_in(array_unique(array_merge(array($cat), array_keys(cat_list($cat, 0, false)))));
}
/**
* 獲得指定文章分類下所有底層分類的ID
*
* @access public
* @param integer $cat 指定的分類ID
*
* @return void
*/
function get_article_children ($cat = 0)
{
return db_create_in(array_unique(array_merge(array($cat), array_keys(article_cat_list($cat, 0, false)))), 'cat_id');
}
/**
* 獲取郵件模板
*
* @access public
* @param: $tpl_name[string] 模板代碼
*
* @return array
*/
function get_mail_template($tpl_name)
{
$sql = 'SELECT template_subject, is_html, template_content FROM ' . $GLOBALS['ecs']->table('mail_templates') . " WHERE template_code = '$tpl_name'";
return $GLOBALS['db']->GetRow($sql);
}
/**
* 記錄訂單操作記錄
*
* @access public
* @param string $order_sn 訂單編號
* @param integer $order_status 訂單狀態
* @param integer $shipping_status 配送狀態
* @param integer $pay_status 付款狀態
* @param string $note 備註
* @param string $username 用户名,用户自己的操作則為 buyer
* @return void
*/
function order_action($order_sn, $order_status, $shipping_status, $pay_status, $note = '', $username = null, $place = 0)
{
if (is_null($username))
{
$username = $_SESSION['admin_name'];
}
$sql = 'INSERT INTO ' . $GLOBALS['ecs']->table('order_action') .
' (order_id, action_user, order_status, shipping_status, pay_status, action_place, action_note, log_time) ' .
'SELECT ' .
"order_id, '$username', '$order_status', '$shipping_status', '$pay_status', '$place', '$note', '" .gmtime() . "' " .
'FROM ' . $GLOBALS['ecs']->table('order_info') . " WHERE order_sn = '$order_sn'";
$GLOBALS['db']->query($sql);
}
/**
* 格式化商品價格
*
* @access public
* @param float $price 商品價格
* @return string
*/
function price_format($price, $change_price = true)
{
$price = 0 + $price;
if($price==='')
{
$price=0;
}
if ($change_price && defined('ECS_ADMIN') === false)
{
switch ($GLOBALS['_CFG']['price_format'])
{
case 0:
$price = number_format($price, 0, '.', '');
break;
case 1: // 保留不為 0 的尾數
$price = preg_replace('/(.*)(\\.)([0-9]*?)0+$/', '\1\2\3', number_format($price, 0, '.', ''));
if (substr($price, -1) == '.')
{
$price = substr($price, 0, -1);
}
break;
case 2: // 不四捨五入保留1位
$price = substr(number_format($price, 0, '.', ''), 0, -1);
break;
case 3: // 直接取整
$price = intval($price);
break;
case 4: // 四捨五入,保留 1 位
$price = number_format($price, 0, '.', '');
break;
case 5: // 先四捨五入,不保留小數
$price = round($price);
break;
}
}
else
{
$price = number_format($price, 0, '.', '');
}
return sprintf($GLOBALS['_CFG']['currency_format'], $price);
}
/**
* 返回訂單中的虛擬商品
*
* @access public
* @param int $order_id 訂單id值
* @param bool $shipping 是否已經發貨
*
* @return array()
*/
function get_virtual_goods($order_id, $shipping = false)
{
if ($shipping)
{
$sql = 'SELECT goods_id, goods_name, send_number AS num, extension_code FROM '.
$GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id' AND extension_code > ''";
}
else
{
$sql = 'SELECT goods_id, goods_name, (goods_number - send_number) AS num, extension_code FROM '.
$GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id' AND is_real = 0 AND (goods_number - send_number) > 0 AND extension_code > '' ";
}
$res = $GLOBALS['db']->getAll($sql);
$virtual_goods = array();
foreach ($res AS $row)
{
$virtual_goods[$row['extension_code']][] = array('goods_id' => $row['goods_id'], 'goods_name' => $row['goods_name'], 'num' => $row['num']);
}
return $virtual_goods;
}
/**
* 虛擬商品發貨
*
* @access public
* @param array $virtual_goods 虛擬商品數組
* @param string $msg 錯誤信息
* @param string $order_sn 訂單號。
* @param string $process 設定當前流程split發貨分單流程other其他默認。
*
* @return bool
*/
function virtual_goods_ship(&$virtual_goods, &$msg, $order_sn, $return_result = false, $process = 'other')
{
$virtual_card = array();
foreach ($virtual_goods AS $code => $goods_list)
{
/* 只處理虛擬卡 */
if ($code == 'virtual_card')
{
foreach ($goods_list as $goods)
{
if (virtual_card_shipping($goods, $order_sn, $msg, $process))
{
if ($return_result)
{
$virtual_card[] = array('goods_id'=>$goods['goods_id'], 'goods_name'=>$goods['goods_name'], 'info'=>virtual_card_result($order_sn, $goods));
}
}
else
{
return false;
}
}
$GLOBALS['smarty']->assign('virtual_card', $virtual_card);
}
}
return true;
}
/**
* 虛擬卡發貨
*
* @access public
* @param string $goods 商品詳情數組
* @param string $order_sn 本次操作的訂單
* @param string $msg 返回信息
* @param string $process 設定當前流程split發貨分單流程other其他默認。
*
* @return boolen
*/
function virtual_card_shipping ($goods, $order_sn, &$msg, $process = 'other')
{
/* 包含加密解密函數所在文件 */
include_once(ROOT_PATH . 'includes/lib_code.php');
/* 檢查有沒有缺貨 */
$sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('virtual_card')." WHERE goods_id = '$goods[goods_id]' AND is_saled = 0 ";
$num = $GLOBALS['db']->GetOne($sql);
if ($num < $goods['num'])
{
$msg .= sprintf($GLOBALS['_LANG']['virtual_card_oos'], $goods['goods_name']);
return false;
}
/* 取出卡片信息 */
$sql = "SELECT card_id, card_sn, card_password, end_date, crc32 FROM ".$GLOBALS['ecs']->table('virtual_card')." WHERE goods_id = '$goods[goods_id]' AND is_saled = 0 LIMIT " . $goods['num'];
$arr = $GLOBALS['db']->getAll($sql);
$card_ids = array();
$cards = array();
foreach ($arr as $virtual_card)
{
$card_info = array();
/* 卡號和密碼解密 */
if ($virtual_card['crc32'] == 0 || $virtual_card['crc32'] == crc32(AUTH_KEY))
{
$card_info['card_sn'] = decrypt($virtual_card['card_sn']);
$card_info['card_password'] = decrypt($virtual_card['card_password']);
}
elseif ($virtual_card['crc32'] == crc32(OLD_AUTH_KEY))
{
$card_info['card_sn'] = decrypt($virtual_card['card_sn'], OLD_AUTH_KEY);
$card_info['card_password'] = decrypt($virtual_card['card_password'], OLD_AUTH_KEY);
}
else
{
$msg .= 'error key';
return false;
}
$card_info['end_date'] = date($GLOBALS['_CFG']['date_format'], $virtual_card['end_date']);
$card_ids[] = $virtual_card['card_id'];
$cards[] = $card_info;
}
/* 標記已經取出的卡片 */
$sql = "UPDATE ".$GLOBALS['ecs']->table('virtual_card')." SET ".
"is_saled = 1 ,".
"order_sn = '$order_sn' ".
"WHERE " . db_create_in($card_ids, 'card_id');
if (!$GLOBALS['db']->query($sql, 'SILENT'))
{
$msg .= $GLOBALS['db']->error();
return false;
}
/* 更新庫存 */
$sql = "UPDATE ".$GLOBALS['ecs']->table('goods'). " SET goods_number = goods_number - '$goods[num]' WHERE goods_id = '$goods[goods_id]'";
$GLOBALS['db']->query($sql);
if (true)
{
/* 獲取訂單信息 */
$sql = "SELECT order_id, order_sn, consignee, email FROM ".$GLOBALS['ecs']->table('order_info'). " WHERE order_sn = '$order_sn'";
$order = $GLOBALS['db']->GetRow($sql);
/* 更新訂單信息 */
if ($process == 'split')
{
$sql = "UPDATE ".$GLOBALS['ecs']->table('order_goods'). "
SET send_number = send_number + '" . $goods['num'] . "'
WHERE order_id = '" . $order['order_id'] . "'
AND goods_id = '" . $goods['goods_id'] . "' ";
}
else
{
$sql = "UPDATE ".$GLOBALS['ecs']->table('order_goods'). "
SET send_number = '" . $goods['num'] . "'
WHERE order_id = '" . $order['order_id'] . "'
AND goods_id = '" . $goods['goods_id'] . "' ";
}
if (!$GLOBALS['db']->query($sql, 'SILENT'))
{
$msg .= $GLOBALS['db']->error();
return false;
}
}
/* 發送郵件 */
$GLOBALS['smarty']->assign('virtual_card', $cards);
$GLOBALS['smarty']->assign('order', $order);
$GLOBALS['smarty']->assign('goods', $goods);
$GLOBALS['smarty']->assign('send_time', date('Y-m-d H:i:s'));
$GLOBALS['smarty']->assign('shop_name', $GLOBALS['_CFG']['shop_name']);
$GLOBALS['smarty']->assign('send_date', date('Y-m-d'));
$GLOBALS['smarty']->assign('sent_date', date('Y-m-d'));
$tpl = get_mail_template('virtual_card');
$content = $GLOBALS['smarty']->fetch('str:' . $tpl['template_content']);
send_mail($order['consignee'], $order['email'], $tpl['template_subject'], $content, $tpl['is_html']);
return true;
}
/**
* 返回虛擬卡信息
*
* @access public
* @param
*
* @return void
*/
function virtual_card_result($order_sn, $goods)
{
/* 包含加密解密函數所在文件 */
include_once(ROOT_PATH . 'includes/lib_code.php');
/* 獲取已經發送的卡片數據 */
$sql = "SELECT card_sn, card_password, end_date, crc32 FROM ".$GLOBALS['ecs']->table('virtual_card')." WHERE goods_id= '$goods[goods_id]' AND order_sn = '$order_sn' ";
$res= $GLOBALS['db']->query($sql);
$cards = array();
while ($row = $GLOBALS['db']->FetchRow($res))
{
/* 卡號和密碼解密 */
if ($row['crc32'] == 0 || $row['crc32'] == crc32(AUTH_KEY))
{
$row['card_sn'] = decrypt($row['card_sn']);
$row['card_password'] = decrypt($row['card_password']);
}
elseif ($row['crc32'] == crc32(OLD_AUTH_KEY))
{
$row['card_sn'] = decrypt($row['card_sn'], OLD_AUTH_KEY);
$row['card_password'] = decrypt($row['card_password'], OLD_AUTH_KEY);
}
else
{
$row['card_sn'] = '***';
$row['card_password'] = '***';
}
$cards[] = array('card_sn'=>$row['card_sn'], 'card_password'=>$row['card_password'], 'end_date'=>date($GLOBALS['_CFG']['date_format'], $row['end_date']));
}
return $cards;
}
/**
* 獲取指定 id snatch 活動的結果
*
* @access public
* @param int $id snatch_id
*
* @return array array(user_name, bie_price, bid_time, num)
* num通常為1如果為2表示有2個用户取到最小值但結果只返回最早出價用户。
*/
function get_snatch_result($id)
{
$sql = 'SELECT u.user_id, u.user_name, u.email, lg.bid_price, lg.bid_time, count(*) as num' .
' FROM ' . $GLOBALS['ecs']->table('snatch_log') . ' AS lg '.
' LEFT JOIN ' . $GLOBALS['ecs']->table('users') . ' AS u ON lg.user_id = u.user_id'.
" WHERE lg.snatch_id = '$id'".
' GROUP BY lg.bid_price' .
' ORDER BY num ASC, lg.bid_price ASC, lg.bid_time ASC LIMIT 1';
$rec = $GLOBALS['db']->GetRow($sql);
if ($rec)
{
$rec['bid_time'] = local_date($GLOBALS['_CFG']['time_format'], $rec['bid_time']);
$rec['formated_bid_price'] = price_format($rec['bid_price'], false);
/* 活動信息 */
$sql = 'SELECT ext_info " .
" FROM ' . $GLOBALS['ecs']->table('goods_activity') .
" WHERE act_id= '$id' AND act_type=" . GAT_SNATCH.
" LIMIT 1";
$row = $GLOBALS['db']->getOne($sql);
$info = unserialize($row);
if (!empty($info['max_price']))
{
$rec['buy_price'] = ($rec['bid_price'] > $info['max_price']) ? $info['max_price'] : $rec['bid_price'];
}
else
{
$rec['buy_price'] = $rec['bid_price'];
}
/* 檢查訂單 */
$sql = "SELECT COUNT(*)" .
" FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE extension_code = 'snatch'" .
" AND extension_id = '$id'" .
" AND order_status " . db_create_in(array(OS_CONFIRMED, OS_UNCONFIRMED));
$rec['order_count'] = $GLOBALS['db']->getOne($sql);
}
return $rec;
}
/**
* 清除指定後綴的模板緩存或編譯文件
*
* @access public
* @param bool $is_cache 是否清除緩存還是清出編譯文件
* @param string $ext 需要刪除的文件名,不包含後綴
*
* @return int 返回清除的文件個數
*/
function clear_tpl_files($is_cache = true, $ext = '')
{
$dirs = array();
if (isset($GLOBALS['shop_id']) && $GLOBALS['shop_id'] > 0)
{
$tmp_dir = DATA_DIR ;
}
else
{
$tmp_dir = 'temp';
}
if ($is_cache)
{
$cache_dir = ROOT_PATH . $tmp_dir . '/caches/';
$dirs[] = ROOT_PATH . $tmp_dir . '/query_caches/';
$dirs[] = ROOT_PATH . $tmp_dir . '/static_caches/';
for($i = 0; $i < 16; $i++)
{
$hash_dir = $cache_dir . dechex($i);
$dirs[] = $hash_dir . '/';
}
}
else
{
$dirs[] = ROOT_PATH . $tmp_dir . '/compiled/';
$dirs[] = ROOT_PATH . $tmp_dir . '/compiled/admin/';
}
$str_len = strlen($ext);
$count = 0;
foreach ($dirs AS $dir)
{
$folder = @opendir($dir);
if ($folder === false)
{
continue;
}
while ($file = readdir($folder))
{
if ($file == '.' || $file == '..' || $file == 'index.htm' || $file == 'index.html')
{
continue;
}
if (is_file($dir . $file))
{
/* 如果有文件名則判斷是否匹配 */
$pos = ($is_cache) ? strrpos($file, '_') : strrpos($file, '.');
if ($str_len > 0 && $pos !== false)
{
$ext_str = substr($file, 0, $pos);
if ($ext_str == $ext)
{
if (@unlink($dir . $file))
{
$count++;
}
}
}
else
{
if (@unlink($dir . $file))
{
$count++;
}
}
}
}
closedir($folder);
}
return $count;
}
/**
* 清除模版編譯文件
*
* @access public
* @param mix $ext 模版文件名, 不包含後綴
* @return void
*/
function clear_compiled_files($ext = '')
{
return clear_tpl_files(false, $ext);
}
/**
* 清除緩存文件
*
* @access public
* @param mix $ext 模版文件名, 不包含後綴
* @return void
*/
function clear_cache_files($ext = '')
{
return clear_tpl_files(true, $ext);
}
/**
* 清除模版編譯和緩存文件
*
* @access public
* @param mix $ext 模版文件名後綴
* @return void
*/
function clear_all_files($ext = '')
{
return clear_tpl_files(false, $ext) + clear_tpl_files(true, $ext);
}
/**
* 頁面上調用的js文件
*
* @access public
* @param string $files
* @return void
*/
function smarty_insert_scripts($args)
{
static $scripts = array();
$arr = explode(',', str_replace(' ','',$args['files']));
$str = '';
foreach ($arr AS $val)
{
if (in_array($val, $scripts) == false)
{
$scripts[] = $val;
if ($val[0] == '.')
{
$str .= '<script type="text/javascript" src="' . $val . '"></script>';
}
else
{
$str .= '<script type="text/javascript" src="js/' . $val . '"></script>';
}
}
}
return $str;
}
/**
* 創建分頁的列表
*
* @access public
* @param integer $count
* @return string
*/
function smarty_create_pages($params)
{
extract($params);
$str = '';
$len = 10;
if (empty($page))
{
$page = 1;
}
if (!empty($count))
{
$step = 1;
$str .= "<option value='1'>1</option>";
for ($i = 2; $i < $count; $i += $step)
{
$step = ($i >= $page + $len - 1 || $i <= $page - $len + 1) ? $len : 1;
$str .= "<option value='$i'";
$str .= $page == $i ? " selected='true'" : '';
$str .= ">$i</option>";
}
if ($count > 1)
{
$str .= "<option value='$count'";
$str .= $page == $count ? " selected='true'" : '';
$str .= ">$count</option>";
}
}
return $str;
}
/**
* 重寫 URL 地址
*
* @access public
* @param string $app 執行程序
* @param array $params 參數數組
* @param string $append 附加字串
* @param integer $page 頁數
* @param string $keywords 搜索關鍵詞字符串
* @return void
*/
function build_uri($app, $params, $append = '', $page = 0, $keywords = '', $size = 0)
{
static $rewrite = NULL;
if ($rewrite === NULL)
{
$rewrite = intval($GLOBALS['_CFG']['rewrite']);
}
$args = array('cid' => 0,
'gid' => 0,
'bid' => 0,
'acid' => 0,
'aid' => 0,
'sid' => 0,
'gbid' => 0,
'auid' => 0,
'sort' => '',
'order' => '',
);
extract(array_merge($args, $params));
$uri = '';
switch ($app)
{
case 'category':
if (empty($cid))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'category-' . $cid;
if (isset($bid))
{
$uri .= '-b' . $bid;
}
if (isset($price_min))
{
$uri .= '-min'.$price_min;
}
if (isset($price_max))
{
$uri .= '-max'.$price_max;
}
if (isset($filter_attr))
{
$uri .= '-attr' . $filter_attr;
}
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
}
else
{
$uri = 'category.php?id=' . $cid;
if (!empty($bid))
{
$uri .= '&amp;brand=' . $bid;
}
if (isset($price_min))
{
$uri .= '&amp;price_min=' . $price_min;
}
if (isset($price_max))
{
$uri .= '&amp;price_max=' . $price_max;
}
if (!empty($filter_attr))
{
$uri .='&amp;filter_attr=' . $filter_attr;
}
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
}
}
break;
case 'goods':
if (empty($gid))
{
return false;
}
else
{
$uri = $rewrite ? 'goods-' . $gid : 'goods.php?id=' . $gid;
}
break;
/*預售 start*/
case 'pre_sale':
if (empty($pre_sale_id))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'pre_sale-'.$pre_sale_id;
}
else
{
$uri = 'pre_sale.php?id=' . $pre_sale_id;
}
}
break;
/*預售 end*/
/*秒殺 start*/
case 'pre_spike':
if (empty($gbid))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'pre_spike-'.$gbid;
}
else
{
$uri = 'pre_spike.php?id=' . $gbid;
}
}
break;
/*秒殺 end*/
case 'brand':
if (empty($bid))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'brand-' . $bid;
if (isset($cid))
{
$uri .= '-c' . $cid;
}
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
}
else
{
$uri = 'brand.php?id=' . $bid;
if (!empty($cid))
{
$uri .= '&amp;cat=' . $cid;
}
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
}
}
break;
case 'article_cat':
if (empty($acid))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'article_cat-' . $acid;
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
if (!empty($keywords))
{
$uri .= '-' . $keywords;
}
}
else
{
$uri = 'article_cat.php?id=' . $acid;
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
if (!empty($keywords))
{
$uri .= '&amp;keywords=' . $keywords;
}
}
}
break;
case 'article':
if (empty($aid))
{
return false;
}
else
{
$uri = $rewrite ? 'article-' . $aid : 'article.php?id=' . $aid;
}
break;
case 'group_buy':
if (empty($gbid))
{
return false;
}
else
{
$uri = $rewrite ? 'group_buy-' . $gbid : 'group_buy.php?act=view&amp;id=' . $gbid;
}
break;
case 'auction':
if (empty($auid))
{
return false;
}
else
{
$uri = $rewrite ? 'auction-' . $auid : 'auction.php?act=view&amp;id=' . $auid;
}
break;
case 'snatch':
if (empty($sid))
{
return false;
}
else
{
$uri = $rewrite ? 'snatch-' . $sid : 'snatch.php?id=' . $sid;
}
break;
case 'search':
break;
case 'exchange':
if ($rewrite)
{
$uri = 'exchange-' . $cid;
if (isset($price_min))
{
$uri .= '-min'.$price_min;
}
if (isset($price_max))
{
$uri .= '-max'.$price_max;
}
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
}
else
{
$uri = 'exchange.php?cat_id=' . $cid;
if (isset($price_min))
{
$uri .= '&amp;integral_min=' . $price_min;
}
if (isset($price_max))
{
$uri .= '&amp;integral_max=' . $price_max;
}
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
}
break;
case 'exchange_goods':
if (empty($gid))
{
return false;
}
else
{
$uri = $rewrite ? 'exchange-id' . $gid : 'exchange.php?id=' . $gid . '&amp;act=view';
}
break;
default:
return false;
break;
}
if ($rewrite)
{
if ($rewrite == 2 && !empty($append))
{
$uri .= '-' . urlencode(preg_replace('/[\.|\/|\?|&|\+|\\\|\'|"|,]+/', '', $append));
}
$uri .= '.html';
}
if (($rewrite == 2) && (strpos(strtolower(EC_CHARSET), 'utf') !== 0))
{
$uri = urlencode($uri);
}
return $uri;
}
/**
* 格式化重量小於1千克用克表示否則用千克表示
* @param float $weight 重量
* @return string 格式化後的重量
*/
function formated_weight($weight)
{
$weight = round(floatval($weight), 3);
if ($weight > 0)
{
if ($weight < 1)
{
/* 小於1千克用克表示 */
return intval($weight * 1000) . $GLOBALS['_LANG']['gram'];
}
else
{
/* 大於1千克用千克表示 */
return $weight . $GLOBALS['_LANG']['kilogram'];
}
}
else
{
return 0;
}
}
/**
* 記錄帳户變動
* @param int $user_id 用户id
* @param float $user_money 可用餘額變動
* @param float $frozen_money 凍結餘額變動
* @param int $rank_points 等級積分變動
* @param int $pay_points 消費積分變動
* @param string $change_desc 變動説明
* @param int $change_type 變動類型:參見常量文件
* @return void
*/
function log_account_change($user_id, $user_money = 0, $frozen_money = 0, $rank_points = 0, $pay_points = 0, $change_desc = '', $change_type = ACT_OTHER)
{
/* 插入帳户變動記錄 */
$account_log = array(
'user_id' => $user_id,
'user_money' => $user_money,
'frozen_money' => $frozen_money,
'rank_points' => $rank_points,
'pay_points' => $pay_points,
'change_time' => gmtime(),
'change_desc' => $change_desc,
'change_type' => $change_type
);
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('account_log'), $account_log, 'INSERT');
/* 更新用户信息 */
$sql = "UPDATE " . $GLOBALS['ecs']->table('users') .
" SET user_money = user_money + ('$user_money')," .
" frozen_money = frozen_money + ('$frozen_money')," .
" rank_points = rank_points + ('$rank_points')," .
" pay_points = pay_points + ('$pay_points')" .
" WHERE user_id = '$user_id' LIMIT 1";
$GLOBALS['db']->query($sql);
}
/**
* 獲得指定分類下的子分類的數組
*
* @access public
* @param int $cat_id 分類的ID
* @param int $selected 當前選中分類的ID
* @param boolean $re_type 返回的類型: 值為真時返回下拉列表,否則返回數組
* @param int $level 限定返回的級數。為0時返回所有級數
* @return mix
*/
function article_cat_list($cat_id = 0, $selected = 0, $re_type = true, $level = 0)
{
static $res = NULL;
if ($res === NULL)
{
$data = read_static_cache('art_cat_pid_releate');
if ($data === false)
{
$sql = "SELECT c.*, COUNT(s.cat_id) AS has_children, COUNT(a.article_id) AS aricle_num ".
' FROM ' . $GLOBALS['ecs']->table('article_cat') . " AS c".
" LEFT JOIN " . $GLOBALS['ecs']->table('article_cat') . " AS s ON s.parent_id=c.cat_id".
" LEFT JOIN " . $GLOBALS['ecs']->table('article') . " AS a ON a.cat_id=c.cat_id".
" GROUP BY c.cat_id ".
" ORDER BY parent_id, sort_order ASC";
$res = $GLOBALS['db']->getAll($sql);
write_static_cache('art_cat_pid_releate', $res);
}
else
{
$res = $data;
}
}
if (empty($res) == true)
{
return $re_type ? '' : array();
}
$options = article_cat_options($cat_id, $res); // 獲得指定分類下的子分類的數組
/* 截取到指定的縮減級別 */
if ($level > 0)
{
if ($cat_id == 0)
{
$end_level = $level;
}
else
{
$first_item = reset($options); // 獲取第一個元素
$end_level = $first_item['level'] + $level;
}
/* 保留level小於end_level的部分 */
foreach ($options AS $key => $val)
{
if ($val['level'] >= $end_level)
{
unset($options[$key]);
}
}
}
$pre_key = 0;
foreach ($options AS $key => $value)
{
$options[$key]['has_children'] = 1;
if ($pre_key > 0)
{
if ($options[$pre_key]['cat_id'] == $options[$key]['parent_id'])
{
$options[$pre_key]['has_children'] = 1;
}
}
$pre_key = $key;
}
if ($re_type == true)
{
$select = '';
foreach ($options AS $var)
{
$select .= '<option value="' . $var['cat_id'] . '" ';
$select .= ' cat_type="' . $var['cat_type'] . '" ';
$select .= ($selected == $var['cat_id']) ? "selected='ture'" : '';
$select .= '>';
if ($var['level'] > 0)
{
$select .= str_repeat('&nbsp;', $var['level'] * 4);
}
$select .= htmlspecialchars(addslashes($var['cat_name'])) . '</option>';
}
return $select;
}
else
{
foreach ($options AS $key => $value)
{
$options[$key]['url'] = build_uri('article_cat', array('acid' => $value['cat_id']), $value['cat_name']);
}
return $options;
}
}
/**
* 過濾和排序所有文章分類,返回一個帶有縮進級別的數組
*
* @access private
* @param int $cat_id 上級分類ID
* @param array $arr 含有所有分類的數組
* @param int $level 級別
* @return void
*/
function article_cat_options($spec_cat_id, $arr)
{
static $cat_options = array();
if (isset($cat_options[$spec_cat_id]))
{
return $cat_options[$spec_cat_id];
}
if (!isset($cat_options[0]))
{
$level = $last_cat_id = 0;
$options = $cat_id_array = $level_array = array();
while (!empty($arr))
{
foreach ($arr AS $key => $value)
{
$cat_id = $value['cat_id'];
if ($level == 0 && $last_cat_id == 0)
{
if ($value['parent_id'] > 0)
{
break;
}
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] == 0)
{
continue;
}
$last_cat_id = $cat_id;
$cat_id_array = array($cat_id);
$level_array[$last_cat_id] = ++$level;
continue;
}
if ($value['parent_id'] == $last_cat_id)
{
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] > 0)
{
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id;
}
$last_cat_id = $cat_id;
$cat_id_array[] = $cat_id;
$level_array[$last_cat_id] = ++$level;
}
}
elseif ($value['parent_id'] > $last_cat_id)
{
break;
}
}
$count = count($cat_id_array);
if ($count > 1)
{
$last_cat_id = array_pop($cat_id_array);
}
elseif ($count == 1)
{
if ($last_cat_id != end($cat_id_array))
{
$last_cat_id = end($cat_id_array);
}
else
{
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
continue;
}
}
if ($last_cat_id && isset($level_array[$last_cat_id]))
{
$level = $level_array[$last_cat_id];
}
else
{
$level = 0;
}
}
$cat_options[0] = $options;
}
else
{
$options = $cat_options[0];
}
if (!$spec_cat_id)
{
return $options;
}
else
{
if (empty($options[$spec_cat_id]))
{
return array();
}
$spec_cat_id_level = $options[$spec_cat_id]['level'];
foreach ($options AS $key => $value)
{
if ($key != $spec_cat_id)
{
unset($options[$key]);
}
else
{
break;
}
}
$spec_cat_id_array = array();
foreach ($options AS $key => $value)
{
if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
($spec_cat_id_level > $value['level']))
{
break;
}
else
{
$spec_cat_id_array[$key] = $value;
}
}
$cat_options[$spec_cat_id] = $spec_cat_id_array;
return $spec_cat_id_array;
}
}
/**
* 調用UCenter的函數
*
* @param string $func
* @param array $params
*
* @return mixed
*/
function uc_call($func, $params=null)
{
restore_error_handler();
if (!function_exists($func))
{
include_once(ROOT_PATH . 'uc_client/client.php');
}
$res = call_user_func_array($func, $params);
set_error_handler('exception_handler');
return $res;
}
/**
* error_handle回調函數
*
* @return
*/
function exception_handler($errno, $errstr, $errfile, $errline)
{
return;
}
/**
* 重新獲得商品圖片與商品相冊的地址
*
* @param int $goods_id 商品ID
* @param string $image 原商品相冊圖片地址
* @param boolean $thumb 是否為縮略圖
* @param string $call 調用方法(商品圖片還是商品相冊)
* @param boolean $del 是否刪除圖片
*
* @return string $url
*/
function get_image_path($goods_id, $image='', $thumb=false, $call='goods', $del=false)
{
$url = empty($image) ? $GLOBALS['_CFG']['no_picture'] : $image;
return $url;
}
/**
* 調用使用UCenter插件時的函數
*
* @param string $func
* @param array $params
*
* @return mixed
*/
function user_uc_call($func, $params = null)
{
if (isset($GLOBALS['_CFG']['integrate_code']) && $GLOBALS['_CFG']['integrate_code'] == 'ucenter')
{
restore_error_handler();
if (!function_exists($func))
{
include_once(ROOT_PATH . 'includes/lib_uc.php');
}
$res = call_user_func_array($func, $params);
set_error_handler('exception_handler');
return $res;
}
else
{
return;
}
}
/**
* 取得商品優惠價格列表
*
* @param string $goods_id 商品編號
* @param string $price_type 價格類別(0為全店優惠比率1為商品優惠價格2為分類優惠比率)
*
* @return 優惠價格列表
*/
function get_volume_price_list($goods_id, $price_type = '1')
{
$volume_price = array();
$temp_index = '0';
$sql = "SELECT `volume_number` , `volume_price`".
" FROM " .$GLOBALS['ecs']->table('volume_price'). "".
" WHERE `goods_id` = '" . $goods_id . "' AND `price_type` = '" . $price_type . "'".
" ORDER BY `volume_number`";
$res = $GLOBALS['db']->getAll($sql);
$count = count($res);
foreach ($res as $k => $v)
{
$volume_price[$temp_index] = array();
if(($temp_index+1)==$count)
{
$volume_price[$temp_index]['number_format'] = '≥'.$v['volume_number'];
}
else
{
$last_number = $res[$k+1]['volume_number']-1;
$volume_price[$temp_index]['number_format'] = $v['volume_number'].'-'.$last_number;
}
$volume_price[$temp_index]['number'] = $v['volume_number'];
$volume_price[$temp_index]['price'] = $v['volume_price'];
$volume_price[$temp_index]['shop_price'] = $rank_price-$v['volume_price'];
$volume_price[$temp_index]['format_price'] = price_format($v['volume_price']);
$volume_price[$temp_index]['format_shop_price'] = price_format($volume_price[$temp_index]['shop_price']);
$temp_index ++;
}
return $volume_price;
}
/**
* 取得商品最終使用價格
*
* @param string $goods_id 商品編號
* @param string $goods_num 購買數量
* @param boolean $is_spec_price 是否加入規格價格
* @param mix $spec 規格ID的數組或者逗號分隔的字符串
*
* @return 商品最終購買價格
*/
function get_final_price($goods_id, $goods_num = '1', $is_spec_price = false, $spec = array())
{
$final_price = '0'; //商品最終購買價格
$volume_price = '0'; //商品優惠價格
$promote_price = '0'; //商品促銷價格
$user_price = '0'; //商品會員價格
/* 判斷商品是否參與預售活動,如果參與則獲取商品 start */
if(!empty($_REQUEST['pre_sale_id']))
{
$pre_sale = pre_sale_info($_REQUEST['pre_sale_id'], $goods_num);
if(!empty($pre_sale)){
$final_price = $pre_sale['cur_price'];
//如果需要加入規格價格
if ($is_spec_price)
{
if (!empty($spec))
{
$spec_price = spec_price($spec);
$final_price += $spec_price;
}
}
return $final_price;
}
}
/* 判斷商品是否參與預售活動,如果參與則獲取商品 end */
//取得商品優惠價格列表
$price_list = get_volume_price_list($goods_id, '1');
if (!empty($price_list))
{
foreach ($price_list as $value)
{
if ($goods_num >= $value['number'])
{
$volume_price = $value['price'];
}
}
}
//取得商品促銷價格列表
/* 取得商品信息 */
$sql = "SELECT g.promote_price, g.promote_start_date, g.promote_end_date,g.sale_price, g.sale_start_date, g.sale_end_date, ".//限時秒殺增加字段
"IFNULL(mp.user_price, g.shop_price * '" . $_SESSION['discount'] . "') AS shop_price ".
" 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.goods_id = '" . $goods_id . "'" .
" AND g.is_delete = 0";
$goods = $GLOBALS['db']->getRow($sql);
/* 計算限時秒殺價格 開始*/
$nowtime = gmtime();
if ($goods['is_sale'] = 1 && $nowtime >= $goods['sale_start_date'] && $nowtime <= $goods['sale_end_date'])
{
$sale_price =$goods['sale_price'];
}
/* 計算限時秒殺價格 結束 */
/* 計算商品的促銷價格 */
if ($goods['promote_price'] > 0)
{
$promote_price = bargain_price($goods['promote_price'], $goods['promote_start_date'], $goods['promote_end_date']);
}
else
{
$promote_price = 0;
}
//取得商品會員價格列表
$user_price = $goods['shop_price'];
//比較商品的促銷價格,會員價格,優惠價格
if (!empty($sale_price))
{
//如果有秒殺價格,則取秒殺價格
$final_price = $sale_price;
}
elseif (empty($volume_price) && empty($promote_price))
{
//如果優惠價格,促銷價格都為空則取會員價格
$final_price = $user_price;
}
elseif (!empty($volume_price) && empty($promote_price))
{
//如果優惠價格為空時不參加這個比較。
$final_price = min($volume_price, $user_price);
}
elseif (empty($volume_price) && !empty($promote_price))
{
//如果促銷價格為空時不參加這個比較。
$final_price = min($promote_price, $user_price);
}
elseif (!empty($volume_price) && !empty($promote_price))
{
//取促銷價格,會員價格,優惠價格最小值
$final_price = min($volume_price, $promote_price, $user_price);
}
else
{
$final_price = $user_price;
}
//如果需要加入規格價格
if ($is_spec_price)
{
if (!empty($spec))
{
$spec_price = spec_price($spec);
$final_price += $spec_price;
}
}
//返回商品最終購買價格
return $final_price;
}
/**
* 將 goods_attr_id 的序列按照 attr_id 重新排序
*
* 注意非規格屬性的id會被排除
*
* @access public
* @param array $goods_attr_id_array 一維數組
* @param string $sort 序號asc|desc默認為asc
*
* @return string
*/
function sort_goods_attr_id_array($goods_attr_id_array, $sort = 'asc')
{
if (empty($goods_attr_id_array))
{
return $goods_attr_id_array;
}
//重新排序
$sql = "SELECT a.attr_type, v.attr_value, v.goods_attr_id
FROM " .$GLOBALS['ecs']->table('attribute'). " AS a
LEFT JOIN " .$GLOBALS['ecs']->table('goods_attr'). " AS v
ON v.attr_id = a.attr_id
AND a.attr_type = 1
WHERE v.goods_attr_id " . db_create_in($goods_attr_id_array) . "
ORDER BY a.attr_id $sort";
$row = $GLOBALS['db']->GetAll($sql);
$return_arr = array();
foreach ($row as $value)
{
$return_arr['sort'][] = $value['goods_attr_id'];
$return_arr['row'][$value['goods_attr_id']] = $value;
}
return $return_arr;
}
/**
*
* 是否存在規格
*
* @access public
* @param array $goods_attr_id_array 一維數組
*
* @return string
*/
function is_spec($goods_attr_id_array, $sort = 'asc')
{
if (empty($goods_attr_id_array))
{
return $goods_attr_id_array;
}
//重新排序
$sql = "SELECT a.attr_type, v.attr_value, v.goods_attr_id
FROM " .$GLOBALS['ecs']->table('attribute'). " AS a
LEFT JOIN " .$GLOBALS['ecs']->table('goods_attr'). " AS v
ON v.attr_id = a.attr_id
AND a.attr_type = 1
WHERE v.goods_attr_id " . db_create_in($goods_attr_id_array) . "
ORDER BY a.attr_id $sort";
$row = $GLOBALS['db']->GetAll($sql);
$return_arr = array();
foreach ($row as $value)
{
$return_arr['sort'][] = $value['goods_attr_id'];
$return_arr['row'][$value['goods_attr_id']] = $value;
}
if(!empty($return_arr))
{
return true;
}
else
{
return false;
}
}
/**
* 獲取指定id package 的信息
*
* @access public
* @param int $id package_id
*
* @return array array(package_id, package_name, goods_id,start_time, end_time, min_price, integral)
*/
function get_package_info($id)
{
global $ecs, $db,$_CFG;
$id = is_numeric($id)?intval($id):0;
$now = gmtime();
$sql = "SELECT act_id AS id, act_name AS package_name, goods_id , goods_name, start_time, end_time, act_desc, ext_info".
" FROM " . $GLOBALS['ecs']->table('goods_activity') .
" WHERE act_id='$id' AND act_type = " . GAT_PACKAGE;
$package = $db->GetRow($sql);
/* 將時間轉成可閲讀格式 */
if ($package['start_time'] <= $now && $package['end_time'] >= $now)
{
$package['is_on_sale'] = "1";
}
else
{
$package['is_on_sale'] = "0";
}
$package['start_time'] = local_date('Y-m-d H:i', $package['start_time']);
$package['end_time'] = local_date('Y-m-d H:i', $package['end_time']);
$row = unserialize($package['ext_info']);
unset($package['ext_info']);
if ($row)
{
foreach ($row as $key=>$val)
{
$package[$key] = $val;
}
}
$sql = "SELECT pg.package_id, pg.goods_id, pg.goods_number, pg.admin_id, ".
" g.goods_sn, g.goods_name, g.market_price, g.goods_thumb, g.is_real, ".
" 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('member_price') . " AS mp ".
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
" WHERE pg.package_id = " . $id. " ".
" ORDER BY pg.package_id, pg.goods_id";
$goods_res = $GLOBALS['db']->getAll($sql);
$market_price = 0;
$real_goods_count = 0;
$virtual_goods_count = 0;
foreach($goods_res as $key => $val)
{
$goods_res[$key]['goods_thumb'] = get_image_path($val['goods_id'], $val['goods_thumb'], true);
$goods_res[$key]['market_price_format'] = price_format($val['market_price']);
$goods_res[$key]['rank_price_format'] = price_format($val['rank_price']);
$market_price += $val['market_price'] * $val['goods_number'];
/* 統計實體商品和虛擬商品的個數 */
if ($val['is_real'])
{
$real_goods_count++;
}
else
{
$virtual_goods_count++;
}
}
if ($real_goods_count > 0)
{
$package['is_real'] = 1;
}
else
{
$package['is_real'] = 0;
}
$package['goods_list'] = $goods_res;
$package['market_package'] = $market_price;
$package['market_package_format'] = price_format($market_price);
$package['package_price_format'] = price_format($package['package_price']);
return $package;
}
/**
* 獲得指定禮包的商品
*
* @access public
* @param integer $package_id
* @return array
*/
function get_package_goods($package_id)
{
$sql = "SELECT pg.goods_id, g.goods_name, pg.goods_number, p.goods_attr, p.product_number, p.product_id
FROM " . $GLOBALS['ecs']->table('package_goods') . " AS pg
LEFT JOIN " .$GLOBALS['ecs']->table('goods') . " AS g ON pg.goods_id = g.goods_id
LEFT JOIN " . $GLOBALS['ecs']->table('products') . " AS p ON pg.product_id = p.product_id
WHERE pg.package_id = '$package_id'";
if ($package_id == 0)
{
$sql .= " AND pg.admin_id = '$_SESSION[admin_id]'";
}
$resource = $GLOBALS['db']->query($sql);
if (!$resource)
{
return array();
}
$row = array();
/* 生成結果數組 取存在貨品的商品id 組合商品id與貨品id */
$good_product_str = '';
while ($_row = $GLOBALS['db']->fetch_array($resource))
{
if ($_row['product_id'] > 0)
{
/* 取存商品id */
$good_product_str .= ',' . $_row['goods_id'];
/* 組合商品id與貨品id */
$_row['g_p'] = $_row['goods_id'] . '_' . $_row['product_id'];
}
else
{
/* 組合商品id與貨品id */
$_row['g_p'] = $_row['goods_id'];
}
//生成結果數組
$row[] = $_row;
}
$good_product_str = trim($good_product_str, ',');
/* 釋放空間 */
unset($resource, $_row, $sql);
/* 取商品屬性 */
if ($good_product_str != '')
{
$sql = "SELECT goods_attr_id, attr_value FROM " .$GLOBALS['ecs']->table('goods_attr'). " WHERE goods_id IN ($good_product_str)";
$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[0] = '%s[%s]--[%d]';
$format[1] = '%s--[%d]';
foreach ($row as $key => $value)
{
if ($value['goods_attr'] != '')
{
$goods_attr_array = explode('|', $value['goods_attr']);
$goods_attr = array();
foreach ($goods_attr_array as $_attr)
{
$goods_attr[] = $_goods_attr[$_attr];
}
$row[$key]['goods_name'] = sprintf($format[0], $value['goods_name'], implode('', $goods_attr), $value['goods_number']);
}
else
{
$row[$key]['goods_name'] = sprintf($format[1], $value['goods_name'], $value['goods_number']);
}
}
return $row;
}
/**
* 取商品的貨品列表
*
* @param mixed $goods_id 單個商品id多個商品id數組以逗號分隔商品id字符串
* @param string $conditions sql條件
*
* @return array
*/
function get_good_products($goods_id, $conditions = '')
{
if (empty($goods_id))
{
return array();
}
switch (gettype($goods_id))
{
case 'integer':
$_goods_id = "goods_id = '" . intval($goods_id) . "'";
break;
case 'string':
case 'array':
$_goods_id = db_create_in($goods_id, 'goods_id');
break;
}
/* 取貨品 */
$sql = "SELECT * FROM " .$GLOBALS['ecs']->table('products'). " WHERE $_goods_id $conditions";
$result_products = $GLOBALS['db']->getAll($sql);
/* 取商品屬性 */
$sql = "SELECT goods_attr_id, attr_value FROM " .$GLOBALS['ecs']->table('goods_attr'). " WHERE $_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'];
}
/* 過濾貨品 */
foreach ($result_products as $key => $value)
{
$goods_attr_array = explode('|', $value['goods_attr']);
if (is_array($goods_attr_array))
{
$goods_attr = array();
foreach ($goods_attr_array as $_attr)
{
$goods_attr[] = $_goods_attr[$_attr];
}
$goods_attr_str = implode('', $goods_attr);
}
$result_products[$key]['goods_attr_str'] = $goods_attr_str;
}
return $result_products;
}
/**
* 取商品的下拉框Select列表
*
* @param int $goods_id 商品id
*
* @return array
*/
function get_good_products_select($goods_id)
{
$return_array = array();
$products = get_good_products($goods_id);
if (empty($products))
{
return $return_array;
}
foreach ($products as $value)
{
$return_array[$value['product_id']] = $value['goods_attr_str'];
}
return $return_array;
}
/**
* 取商品的規格列表
*
* @param int $goods_id 商品id
* @param string $conditions sql條件
*
* @return array
*/
function get_specifications_list($goods_id, $conditions = '')
{
/* 取商品屬性 */
$sql = "SELECT ga.goods_attr_id, ga.attr_id, ga.attr_value, a.attr_name
FROM " .$GLOBALS['ecs']->table('goods_attr'). " AS ga, " .$GLOBALS['ecs']->table('attribute'). " AS a
WHERE ga.attr_id = a.attr_id
AND ga.goods_id = '$goods_id'
$conditions";
$result = $GLOBALS['db']->getAll($sql);
$return_array = array();
foreach ($result as $value)
{
$return_array[$value['goods_attr_id']] = $value;
}
return $return_array;
}
/**
* 調用array_combine函數
*
* @param array $keys
* @param array $values
*
* @return $combined
*/
if (!function_exists('array_combine')) {
function array_combine($keys, $values)
{
if (!is_array($keys)) {
user_error('array_combine() expects parameter 1 to be array, ' .
gettype($keys) . ' given', E_USER_WARNING);
return;
}
if (!is_array($values)) {
user_error('array_combine() expects parameter 2 to be array, ' .
gettype($values) . ' given', E_USER_WARNING);
return;
}
$key_count = count($keys);
$value_count = count($values);
if ($key_count !== $value_count) {
user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING);
return false;
}
if ($key_count === 0 || $value_count === 0) {
user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING);
return false;
}
$keys = array_values($keys);
$values = array_values($values);
$combined = array();
for ($i = 0; $i < $key_count; $i++) {
$combined[$keys[$i]] = $values[$i];
}
return $combined;
}
}
?>