www.gusucode.com > Ectouch手机端网购商城系统PHP版源码程序 > ectouch/include/apps/default/model/GoodsModel.class.php
<?php /** * ECTouch Open Source Project * ============================================================================ * Copyright (c) 2012-2014 http://ectouch.cn All rights reserved. * ---------------------------------------------------------------------------- * 文件名称:商品Model.class.php * ---------------------------------------------------------------------------- * 功能描述:ECTOUCH 商品模型 * ---------------------------------------------------------------------------- * Licensed ( http://www.ectouch.cn/docs/license.txt ) * ---------------------------------------------------------------------------- */ /* 访问控制 */ defined('IN_ECTOUCH') or die('Deny Access'); class GoodsModel extends BaseModel { protected $table = 'goods'; /** * 获得商品的详细信息 * * @access public * @param integer $goods_id * @return void */ function get_goods_info($goods_id) { $time = gmtime(); $sql = 'SELECT g.*, c.measure_unit, b.brand_id, b.brand_name AS goods_brand, m.type_money AS bonus_money, ' . 'IFNULL(AVG(r.comment_rank), 0) AS comment_rank, ' . "IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS rank_price " . 'FROM ' . $this->pre . 'goods AS g ' . 'LEFT JOIN ' . $this->pre . 'category AS c ON g.cat_id = c.cat_id ' . 'LEFT JOIN ' . $this->pre . 'brand AS b ON g.brand_id = b.brand_id ' . 'LEFT JOIN ' . $this->pre . 'comment AS r ' . 'ON r.id_value = g.goods_id AND comment_type = 0 AND r.parent_id = 0 AND r.status = 1 ' . 'LEFT JOIN ' . $this->pre . 'bonus_type AS m ' . "ON g.bonus_type_id = m.type_id AND m.send_start_date <= '$time' AND m.send_end_date >= '$time'" . " LEFT JOIN " . $this->pre . "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 " . "GROUP BY g.goods_id"; $row = $this->row($sql); if ($row !== false) { /* 用户评论级别取整 */ $row['comment_rank'] = ceil($row['comment_rank']) == 0 ? 5 : ceil($row['comment_rank']); /* 获得商品的销售价格 */ $row['market_price'] = price_format($row['market_price']); $row['shop_price_formated'] = price_format($row['shop_price']); /* 修正促销价格 */ if ($row['promote_price'] > 0) { $promote_price = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']); } else { $promote_price = 0; } /* 处理商品水印图片 */ $watermark_img = ''; if ($promote_price != 0) { $watermark_img = "watermark_promote"; } elseif ($row['is_new'] != 0) { $watermark_img = "watermark_new"; } elseif ($row['is_best'] != 0) { $watermark_img = "watermark_best"; } elseif ($row['is_hot'] != 0) { $watermark_img = 'watermark_hot'; } if ($watermark_img != '') { $row['watermark_img'] = $watermark_img; } $row['promote_price_org'] = $promote_price; $row['promote_price'] = price_format($promote_price); /* 修正重量显示 */ $row['goods_weight'] = (intval($row['goods_weight']) > 0) ? $row['goods_weight'] . L('kilogram') : ($row['goods_weight'] * 1000) . L('gram'); /* 修正上架时间显示 */ $row['add_time'] = local_date(C('date_format'), $row['add_time']); /* 促销时间倒计时 */ $time = gmtime(); if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date']) { $row['gmt_end_time'] = $row['promote_end_date']; } else { $row['gmt_end_time'] = 0; } /* 是否显示商品库存数量 */ $row['goods_number'] = (C('use_storage') == 1) ? $row['goods_number'] : ''; /* 修正积分:转换为可使用多少积分(原来是可以使用多少钱的积分) */ $row['integral'] = C('integral_scale') ? round($row['integral'] * 100 / C('integral_scale')) : 0; /* 修正优惠券 */ $row['bonus_money'] = ($row['bonus_money'] == 0) ? 0 : price_format($row['bonus_money'], false); /* 修正商品图片 */ $row['goods_img'] = get_image_path($goods_id, $row['goods_img']); $row['goods_thumb'] = get_image_path($goods_id, $row['goods_thumb'], true); $row['original_img'] = get_image_path($goods_id, $row['original_img'], true); return $row; } else { return false; } } /** * 获得商品的属性和规格 * * @access public * @param integer $goods_id * @return array */ function get_goods_properties($goods_id) { /* 对属性进行重新排序和分组 */ $sql = "SELECT attr_group " . "FROM " . $this->pre . "goods_type AS gt, " . $this->pre . "goods AS g " . "WHERE g.goods_id='$goods_id' AND gt.cat_id=g.goods_type"; $result = $this->row($sql); $grp = $result['attr_group']; 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 ' . $this->pre . 'goods_attr AS g ' . 'LEFT JOIN ' . $this->pre . '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 = $this->query($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']] : L('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(L('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 ' . $this->pre . 'goods AS g ' . 'LEFT JOIN ' . $this->pre . 'goods_attr as a ON g.goods_id = a.goods_id ' . "LEFT JOIN " . $this->pre . "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 ' . C('attr_related_number'); $res = $this->query($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'] = C('goods_name_length') > 0 ? sub_str($row['goods_name'], C('goods_name_length')) : $row['goods_name']; $lnk[$key]['goods'][$row['goods_id']]['goods_thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true); $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'] = url('goods/index', array('id' => $row['goods_id'])); } } } return $lnk; } /** * 获得指定分类下的商品 * * @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 " . $this->pre . 'goods AS g ' . "LEFT JOIN " . $this->pre . "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 ' . model('Goods')->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 = $this->query($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'] = C('goods_name_length') > 0 ? sub_str($row['goods_name'], C('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'] = url('goods/index', array('id' => $row['goods_id'])); } if ($from == 'web') { ECTouch::view()->assign('cat_goods_' . $cat_id, $goods); } elseif ($from == 'wap') { $cat['goods'] = $goods; } /* 分类信息 */ $sql = 'SELECT cat_name FROM ' . $this->pre . "category WHERE cat_id = '$cat_id'"; $result = $this->row($sql); $cat['name'] = $result['cat_name']; $cat['url'] = url('category/index', array('id' => $cat_id)); $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 ' . $this->pre . 'goods AS g ' . "LEFT JOIN " . $this->pre . "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) { $sql .= 'LIMIT ' . $num; } $res = $this->query($sql); $idx = 0; $goods = array(); foreach ($res as $key => $value) { if ($value['promote_price'] > 0) { $promote_price = bargain_price($value['promote_price'], $value['promote_start_date'], $value['promote_end_date']); } else { $promote_price = 0; } $goods[$idx]['id'] = $value['goods_id']; $goods[$idx]['name'] = $value['goods_name']; $goods[$idx]['short_name'] = C('goods_name_length') > 0 ? sub_str($value['goods_name'], C('goods_name_length')) : $value['goods_name']; $goods[$idx]['market_price'] = price_format($value['market_price']); $goods[$idx]['shop_price'] = price_format($value['shop_price']); $goods[$idx]['promote_price'] = $promote_price > 0 ? price_format($promote_price) : ''; $goods[$idx]['brief'] = $value['goods_brief']; $goods[$idx]['thumb'] = get_image_path($value['goods_id'], $value['goods_thumb'], true); $goods[$idx]['goods_img'] = get_image_path($value['goods_id'], $value['goods_img']); $goods[$idx]['url'] = url('goods/index', array('id' => $value['goods_id'])); $idx++; } /* 分类信息 */ $sql = 'SELECT brand_name FROM ' . $this->pre . "brand WHERE brand_id = '$brand_id'"; $brand['id'] = $brand_id; $result = $this->row($sql); $brand['name'] = $result['brand_name']; $brand['url'] = url('brand/index', array('bid' => $brand_id)); $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 ' . $this->pre . "goods_cat AS g WHERE $cats"; $res = $this->query($sql); if ($res !== false) { $arr = array(); foreach ($res as $key => $value) { $arr[] = $value['goods_id']; } } return db_create_in($arr, 'g.goods_id'); } /** * 获得指定的规格的价格 * * @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 ' . $this->pre . "goods_attr WHERE $where"; $res = $this->row($sql); $price = floatval($res['attr_price']); } else { $price = 0; } return $price; } /** * 取得商品信息 * @param int $goods_id 商品id * @return array */ function goods_info($goods_id) { $sql = "SELECT g.*, b.brand_name " . "FROM " . $this->pre . "goods AS g " . "LEFT JOIN " . $this->pre . "brand AS b ON g.brand_id = b.brand_id " . "WHERE g.goods_id = '$goods_id'"; $row = $this->row($sql); if (!empty($row)) { /* 修正重量显示 */ $row['goods_weight'] = (intval($row['goods_weight']) > 0) ? $row['goods_weight'] . L('kilogram') : ($row['goods_weight'] * 1000) . L('gram'); /* 修正图片 */ $row['goods_img'] = get_image_path($goods_id, $row['goods_img']); } return $row; } /** * 获得购物车中商品的配件 * * @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 ' . $this->pre . 'group_goods AS gg ' . 'LEFT JOIN ' . $this->pre . 'goods AS g ON g.goods_id = gg.goods_id ' . "LEFT JOIN " . $this->pre . "member_price AS mp " . "ON mp.goods_id = gg.goods_id AND mp.user_rank = '$_SESSION[user_rank]' " . "LEFT JOIN " . $this->pre . "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 = $this->query($sql); foreach ($res as $key => $value) { $arr[$temp_index]['parent_id'] = $value['parent_id']; $arr[$temp_index]['parent_name'] = $value['parent_name']; //配件的基本件的名称 $arr[$temp_index]['parent_short_name'] = C('goods_name_length') > 0 ? sub_str($value['parent_name'], C('goods_name_length')) : $value['parent_name']; //配件的基本件显示的名称 $arr[$temp_index]['goods_id'] = $value['goods_id']; //配件的商品ID $arr[$temp_index]['goods_name'] = $value['goods_name']; //配件的名称 $arr[$temp_index]['short_name'] = C('goods_name_length') > 0 ? sub_str($value['goods_name'], C('goods_name_length')) : $value['goods_name']; //配件显示的名称 $arr[$temp_index]['fittings_price'] = price_format($value['goods_price']); //配件价格 $arr[$temp_index]['shop_price'] = price_format($value['shop_price']); //配件原价格 $arr[$temp_index]['goods_thumb'] = get_image_path($value['goods_id'], $value['goods_thumb'], true); $arr[$temp_index]['goods_img'] = get_image_path($value['goods_id'], $value['goods_img']); $arr[$temp_index]['url'] = url('goods/index', array('id' => $value['goods_id'])); $temp_index++; } return $arr; } /** * 获得指定商品的关联商品 * * @access public * @param integer $goods_id * @return array */ function get_linked_goods($goods_id) { foreach ($goods_id as $gid) { $goodsId[] = $gid['goods_id']; } $related_goods_number = C('related_goods_number') ? C('related_goods_number') : 0; $related_goods_number = $related_goods_number * 3; $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 ' . $this->pre . 'link_goods lg ' . 'LEFT JOIN ' . $this->pre . 'goods AS g ON g.goods_id = lg.link_goods_id ' . "LEFT JOIN " . $this->pre . "member_price AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' " . "WHERE lg.goods_id " . db_create_in($goodsId) . " AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 " . "LIMIT " . $related_goods_number; $res = $this->query($sql); $arr = array(); foreach ($res as $row) { if (!in_array($row['goods_id'], $goodsId)) { $arr[$row['goods_id']]['goods_id'] = $row['goods_id']; $arr[$row['goods_id']]['goods_name'] = $row['goods_name']; $arr[$row['goods_id']]['short_name'] = C('goods_name_length') > 0 ? sub_str($row['goods_name'], C('goods_name_length')) : $row['goods_name']; $arr[$row['goods_id']]['goods_thumb'] = get_image_path($row['goods_id'], $row['goods_thumb'], true); $arr[$row['goods_id']]['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']); $arr[$row['goods_id']]['market_price'] = price_format($row['market_price']); $arr[$row['goods_id']]['shop_price'] = price_format($row['shop_price']); $arr[$row['goods_id']]['url'] = url('goods/index', array('id' => $row['goods_id'])); if ($row['promote_price'] > 0) { $arr[$row['goods_id']]['promote_price'] = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']); $arr[$row['goods_id']]['formated_promote_price'] = price_format($arr[$row['goods_id']]['promote_price']); } else { $arr[$row['goods_id']]['promote_price'] = 0; } } } //返回数组 $related_goods_number = C('related_goods_number'); if (count($arr) > $related_goods_number) { $linked_goods = array_rand($arr, $related_goods_number); foreach ($linked_goods as $key) { $array[] = $arr[$key]; } } else { $array = $arr; } return $array; } /** * 获得指定商品的关联商品 * * @access public * @param integer $goods_id * @return array */ function get_related_goods($goods_id) { $sql = 'SELECT g.goods_id, g.goods_name, g.goods_thumb, g.goods_img, g.shop_price AS org_price, ' . "IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, " . 'g.market_price, g.promote_price, g.promote_start_date, g.promote_end_date ' . 'FROM ' . $this->pre . 'link_goods AS lg ' . 'LEFT JOIN ' . $this->pre . 'goods AS g ON g.goods_id = lg.link_goods_id ' . "LEFT JOIN " . $this->pre . "member_price AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' " . "WHERE lg.goods_id = '$goods_id' AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 " . "LIMIT " . C('related_goods_number'); $res = $this->query($sql); $arr = array(); foreach ($res as $row) { $arr [$row ['goods_id']] ['goods_id'] = $row ['goods_id']; $arr [$row ['goods_id']] ['goods_name'] = $row ['goods_name']; $arr [$row ['goods_id']] ['short_name'] = C('goods_name_length') > 0 ? sub_str($row ['goods_name'], C('goods_name_length')) : $row ['goods_name']; $arr [$row ['goods_id']] ['goods_thumb'] = get_image_path($row ['goods_id'], $row ['goods_thumb'], true); $arr [$row ['goods_id']] ['goods_img'] = get_image_path($row ['goods_id'], $row ['goods_img']); $arr [$row ['goods_id']] ['market_price'] = price_format($row ['market_price']); $arr [$row ['goods_id']] ['shop_price'] = price_format($row ['shop_price']); $arr [$row ['goods_id']] ['url'] = url('goods/index', array( 'id' => $row ['goods_id'] )); if ($row ['promote_price'] > 0) { $arr [$row ['goods_id']] ['promote_price'] = bargain_price($row ['promote_price'], $row ['promote_start_date'], $row ['promote_end_date']); $arr [$row ['goods_id']] ['formated_promote_price'] = price_format($arr [$row ['goods_id']] ['promote_price']); } else { $arr [$row ['goods_id']] ['promote_price'] = 0; } } return $arr; } /** * 获得指定商品的关联文章 * * @access public * @param integer $goods_id * @return void */ function get_linked_articles($goods_id) { $sql = 'SELECT a.article_id, a.title, a.file_url, a.open_type, a.add_time ' . 'FROM ' . $this->pre . 'goods_article AS g, ' . $this->pre . 'article AS a ' . "WHERE g.article_id = a.article_id AND g.goods_id = '$goods_id' AND a.is_open = 1 " . 'ORDER BY a.add_time DESC'; $res = $this->query($sql); $arr = array(); foreach ($res as $row) { $row ['url'] = $row ['open_type'] != 1 ? url('article/index', array('id' => $row ['article_id'])) : trim($row ['file_url']); $row ['add_time'] = local_date(C('date_format'), $row ['add_time']); $row ['short_title'] = C('article_title_length') > 0 ? sub_str($row ['title'], C('article_title_length')) : $row ['title']; $arr [] = $row; } return $arr; } /** * 获得指定商品的各会员等级对应的价格 * * @access public * @param integer $goods_id * @return array */ function get_user_rank_prices($goods_id, $shop_price) { $sql = "SELECT rank_id, IFNULL(mp.user_price, r.discount * $shop_price / 100) AS price, r.rank_name, r.discount " . 'FROM ' . $this->pre . 'user_rank AS r ' . 'LEFT JOIN ' . $this->pre . "member_price AS mp " . "ON mp.goods_id = '$goods_id' AND mp.user_rank = r.rank_id " . "WHERE r.show_price = 1 OR r.rank_id = '$_SESSION[user_rank]'"; $res = $this->query($sql); $arr = array(); foreach ($res as $row) { $arr [$row ['rank_id']] = array( 'rank_name' => htmlspecialchars($row ['rank_name']), 'price' => price_format($row ['price']) ); } return $arr; } /** * 获得购买过该商品的人还买过的商品 * * @access public * @param integer $goods_id * @return array */ function get_also_bought($goods_id) { $sql = 'SELECT COUNT(b.goods_id ) AS num, g.goods_id, g.goods_name, g.goods_thumb, g.goods_img, g.shop_price, g.promote_price, g.promote_start_date, g.promote_end_date ' . 'FROM ' . $this->pre . 'order_goods AS a ' . 'LEFT JOIN ' . $this->pre . 'order_goods AS b ON b.order_id = a.order_id ' . 'LEFT JOIN ' . $this->pre . 'goods AS g ON g.goods_id = b.goods_id ' . "WHERE a.goods_id = '$goods_id' AND b.goods_id <> '$goods_id' AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 " . 'GROUP BY b.goods_id ' . 'ORDER BY num DESC ' . 'LIMIT ' . C('bought_goods'); $res = $this->query($sql); $key = 0; $arr = array(); foreach ($res as $row) { $arr [$key] ['goods_id'] = $row ['goods_id']; $arr [$key] ['goods_name'] = $row ['goods_name']; $arr [$key] ['short_name'] = C('goods_name_length') > 0 ? sub_str($row ['goods_name'], C('goods_name_length')) : $row ['goods_name']; $arr [$key] ['goods_thumb'] = get_image_path($row ['goods_id'], $row ['goods_thumb'], true); $arr [$key] ['goods_img'] = get_image_path($row ['goods_id'], $row ['goods_img']); $arr [$key] ['shop_price'] = price_format($row ['shop_price']); $arr [$key] ['url'] = url('goods/index', array('id' => $row ['goods_id'])); if ($row ['promote_price'] > 0) { $arr [$key] ['promote_price'] = bargain_price($row ['promote_price'], $row ['promote_start_date'], $row ['promote_end_date']); $arr [$key] ['formated_promote_price'] = price_format($arr [$key] ['promote_price']); } else { $arr [$key] ['promote_price'] = 0; } $key++; } return $arr; } /** * 获得商品选定的属性的附加总价格 * * @param integer $goods_id * @param array $attr * * @return void */ function get_attr_amount($goods_id, $attr) { $sql = "SELECT SUM(attr_price) as amount FROM " . $this->pre . "goods_attr WHERE goods_id='$goods_id' AND " . db_create_in($attr, 'goods_attr_id'); $res = $this->row($sql); return $res['amount']; } /** * 取得跟商品关联的礼包列表 * * @param string $goods_id * 商品编号 * * @return 礼包列表 */ function get_package_goods_list($goods_id) { $now = gmtime(); $sql = "SELECT pg.goods_id, ga.act_id, ga.act_name, ga.act_desc, ga.goods_name, ga.start_time, ga.end_time, ga.is_finished, ga.ext_info FROM " . $this->pre . "goods_activity AS ga, " . $this->pre . "package_goods AS pg WHERE pg.package_id = ga.act_id AND ga.start_time <= '" . $now . "' AND ga.end_time >= '" . $now . "' AND pg.goods_id = " . $goods_id . " GROUP BY ga.act_id ORDER BY ga.act_id "; $res = $this->query($sql); foreach ($res as $tempkey => $value) { $subtotal = 0; $row = unserialize($value ['ext_info']); unset($value ['ext_info']); if ($row) { foreach ($row as $key => $val) { $res [$tempkey] [$key] = $val; } } $sql = "SELECT pg.package_id, pg.goods_id, pg.goods_number, pg.admin_id, p.goods_attr, g.goods_sn, g.goods_name, g.market_price, g.goods_thumb, IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS rank_price FROM " . $this->pre . "package_goods AS pg LEFT JOIN " . $this->pre . "goods AS g ON g.goods_id = pg.goods_id LEFT JOIN " . $this->pre . "products AS p ON p.product_id = pg.product_id LEFT JOIN " . $this->pre . "member_price AS mp ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' WHERE pg.package_id = " . $value ['act_id'] . " ORDER BY pg.package_id, pg.goods_id"; $goods_res = $this->query($sql); foreach ($goods_res as $key => $val) { $goods_id_array [] = $val ['goods_id']; $goods_res [$key] ['goods_thumb'] = get_image_path($val ['goods_id'], $val ['goods_thumb'], true); $goods_res [$key] ['market_price'] = price_format($val ['market_price']); $goods_res [$key] ['rank_price'] = price_format($val ['rank_price']); $subtotal += $val ['rank_price'] * $val ['goods_number']; } /* 取商品属性 */ $sql = "SELECT ga.goods_attr_id, ga.attr_value FROM " . $this->pre . "goods_attr AS ga, " . ECTouch::ecs()->table('attribute') . " AS a WHERE a.attr_id = ga.attr_id AND a.attr_type = 1 AND " . db_create_in($goods_id_array, 'goods_id'); $result_goods_attr = $this->query($sql); $_goods_attr = array(); foreach ($result_goods_attr as $value) { $_goods_attr [$value ['goods_attr_id']] = $value ['attr_value']; } /* 处理货品 */ $format = '[%s]'; foreach ($goods_res as $key => $val) { if ($val ['goods_attr'] != '') { $goods_attr_array = explode('|', $val ['goods_attr']); $goods_attr = array(); foreach ($goods_attr_array as $_attr) { $goods_attr [] = $_goods_attr [$_attr]; } $goods_res [$key] ['goods_attr_str'] = sprintf($format, implode(',', $goods_attr)); } } $res [$tempkey] ['goods_list'] = $goods_res; $res [$tempkey] ['subtotal'] = price_format($subtotal); $res [$tempkey] ['saving'] = price_format(($subtotal - $res [$tempkey] ['package_price'])); $res [$tempkey] ['package_price'] = price_format($res [$tempkey] ['package_price']); } return $res; } }