$value)
{
if($value['level'] == 1)
$this->get_cat_tree($value['id']);
}
/*
foreach ($goods_category2 AS $key => $value)
{
$strpad_count = $value['level']*10;
echo str_pad('',$strpad_count,"-",STR_PAD_LEFT);
echo $value['name'];
echo "
";
}*/
return $goods_category2;
}
/**
* 获取指定id下的 所有分类
* @global type $goods_category 所有商品分类
* @param type $id 当前显示的 菜单id
* @return 返回数组 Description
*/
public function get_cat_tree($id)
{
global $goods_category, $goods_category2;
$goods_category2[$id] = $goods_category[$id];
foreach ($goods_category AS $key => $value){
if($value['parent_id'] == $id)
{
$this->get_cat_tree($value['id']);
$goods_category2[$id]['have_son'] = 1; // 还有下级
}
}
}
/**
* 移除指定$parent_id_path 分类以及下的所有分类
* @global type $cat_list 所有商品分类
* @param type $parent_id_path 指定的id
* @return 返回数组 Description
*/
public function remove_cat($cat_list,$parent_id_path)
{
foreach ($cat_list AS $key => $value){
if(strstr($value['parent_id_path'],$parent_id_path))
{
unset($cat_list[$value['id']]);
}
}
return $cat_list;
}
/**
* 改变或者添加分类时 需要修改他下面的 parent_id_path 和 level
* @global type $cat_list 所有商品分类
* @param type $parent_id_path 指定的id
* @return 返回数组 Description
*/
public function refresh_cat($id,$stoid=0)
{
if(empty($id)) return false;
if(empty($stoid)) $stoid=getAdmStoId();
$GoodsCategory = M("GoodsCategory"); // 实例化User对象
$cat = $GoodsCategory->where("id = $id")->where('store_id',$stoid)->find(); // 找出他自己
// 刚新增的分类先把它的值重置一下
if($cat['parent_id_path'] == '')
{
($cat['parent_id'] == 0) && Db::execute("UPDATE __PREFIX__goods_category set parent_id_path = '0_$id', level = 1 where id = $id"); // 如果是一级分类
Db::execute("UPDATE __PREFIX__goods_category AS a ,__PREFIX__goods_category AS b SET a.parent_id_path = CONCAT_WS('_',b.parent_id_path,'$id'),a.level = (b.level+1) WHERE a.parent_id=b.id AND a.id = $id and a.store_id=".$stoid);
//$cat = $GoodsCategory->where("id = $id")->find();
//没有顶上级别的就不需要下面的循环,直接跳出
return true;
}
if($cat['parent_id'] == 0) //有可能是顶级分类 他没有老爸
{
$parent_cat['parent_id_path'] = '0';
$parent_cat['level'] = 0;
}
else{
$parent_cat = $GoodsCategory->where("id = {$cat['parent_id']}")->find(); // 找出他老爸的parent_id_path
}
// 看看他 相比原来的等级 升级了多少 ($parent_cat['level'] + 1) 他老爸等级加一就是他现在要改的等级
$replace_level = $cat['level'] - ($parent_cat['level'] + 1);
$replace_str = $parent_cat['parent_id_path'].'_'.$id;
$strsql="UPDATE `__PREFIX__goods_category` SET parent_id_path = REPLACE(parent_id_path,'{$cat['parent_id_path']}','$replace_str'), level = (level - $replace_level) WHERE parent_id_path LIKE '{$cat['parent_id_path']}%' and store_id=".$stoid;
mlog($strsql."-".$id,'refresh_cat/'.$stoid);
Db::execute($strsql);
}
/**
* 动态获取商品属性输入框 根据不同的数据返回不同的输入框类型
* @param int $goods_id 商品id
* @param int $type_id 商品属性类型id
*/
public function getAttrInput($goods_id,$type_id)
{
header("Content-type: text/html; charset=utf-8");
$GoodsAttribute = D('GoodsAttribute');
$attributeList = $GoodsAttribute->where("type_id = $type_id")->select();
foreach($attributeList as $key => $val)
{
$curAttrVal = $this->getGoodsAttrVal(NULL,$goods_id, $val['attr_id']);
//促使他 循环
if(count($curAttrVal) == 0)
$curAttrVal[] = array('goods_attr_id' =>'','goods_id' => '','attr_id' => '','attr_value' => '','attr_price' => '');
foreach($curAttrVal as $k =>$v)
{
$str .= "
";
$addDelAttr = ''; // 加减符号
// 单选属性 或者 复选属性
if($val['attr_type'] == 1 || $val['attr_type'] == 2)
{
if($k == 0)
$addDelAttr .= "[+]  ";
else
$addDelAttr .= "[-]  ";
}
$str .= "$addDelAttr {$val['attr_name']} | ";
// if($v['goods_attr_id'] > 0) //tp_goods_attr 表id
// $str .= "";
// 手工录入
if($val['attr_input_type'] == 0)
{
$str .= "";
}
// 从下面的列表中选择(一行代表一个可选值)
if($val['attr_input_type'] == 1)
{
$str .= "";
//$str .= "属性价格";
}
// 多行文本框
if($val['attr_input_type'] == 2)
{
$str .= "";
//$str .= "属性价格";
}
$str .= " |
";
//$str .= "
";
}
}
return $str;
}
/**
* 获取 tp_goods_attr 表中指定 goods_id 指定 attr_id 或者 指定 goods_attr_id 的值 可是字符串 可是数组
* @param int $goods_attr_id tp_goods_attr表id
* @param int $goods_id 商品id
* @param int $attr_id 商品属性id
* @return array 返回数组
*/
public function getGoodsAttrVal($goods_attr_id = 0 ,$goods_id = 0, $attr_id = 0)
{
$GoodsAttr = D('GoodsAttr');
if($goods_attr_id > 0)
return $GoodsAttr->where("goods_attr_id = $goods_attr_id")->select();
if($goods_id > 0 && $attr_id > 0)
return $GoodsAttr->where("goods_id = $goods_id and attr_id = $attr_id")->select();
}
/**
* 给指定商品添加属性 或修改属性 更新到 tp_goods_attr
* @param int $goods_id 商品id
* @param int $goods_type 商品类型id
*/
public function saveGoodsAttr($goods_id,$goods_type)
{
$GoodsAttr = M('GoodsAttr');
//$Goods = M("Goods");
// 属性类型被更改了 就先删除以前的属性类型 或者没有属性 则删除
if($goods_type == 0)
{
$GoodsAttr->where('goods_id = '.$goods_id)->delete();
return;
}
$GoodsAttrList = $GoodsAttr->where('goods_id = '.$goods_id)->select();
$old_goods_attr = array(); // 数据库中的的属性 以 attr_id _ 和值的 组合为键名
foreach($GoodsAttrList as $k => $v)
{
$old_goods_attr[$v['attr_id'].'_'.$v['attr_value']] = $v;
}
// post 提交的属性 以 attr_id _ 和值的 组合为键名
$post_goods_attr = array();
$post = I("post.");
foreach($post as $k => $v)
{
$attr_id = str_replace('attr_','',$k);
if(!strstr($k, 'attr_') || strstr($k, 'attr_price_'))
continue;
foreach ($v as $k2 => $v2)
{
$v2 = str_replace('_', '', $v2); // 替换特殊字符
$v2 = str_replace('@', '', $v2); // 替换特殊字符
$v2 = trim($v2);
if(empty($v2))
continue;
$tmp_key = $attr_id."_".$v2;
$post_attr_price = I("post.attr_price_{$attr_id}");
$attr_price = $post_attr_price[$k2];
$attr_price = $attr_price ? $attr_price : 0;
if(array_key_exists($tmp_key , $old_goods_attr)) // 如果这个属性 原来就存在
{
if($old_goods_attr[$tmp_key]['attr_price'] != $attr_price) // 并且价格不一样 就做更新处理
{
$goods_attr_id = $old_goods_attr[$tmp_key]['goods_attr_id'];
$GoodsAttr->where("goods_attr_id = $goods_attr_id")->save(array('attr_price'=>$attr_price));
}
}
else // 否则这个属性 数据库中不存在 说明要做删除操作
{
$GoodsAttr->add(array('goods_id'=>$goods_id,'attr_id'=>$attr_id,'attr_value'=>$v2,'attr_price'=>$attr_price));
}
unset($old_goods_attr[$tmp_key]);
}
}
//file_put_contents("b.html", print_r($post_goods_attr,true));
// 没有被 unset($old_goods_attr[$tmp_key]); 掉是 说明 数据库中存在 表单中没有提交过来则要删除操作
foreach($old_goods_attr as $k => $v)
{
$GoodsAttr->where('goods_attr_id = '.$v['goods_attr_id'])->delete(); //
}
}
/**
* 获取 tp_spec_item表 指定规格id的 规格项
* @param int $spec_id 规格id
* @return array 返回数组
*/
public function getSpecItem($spec_id)
{
$model = M('SpecItem');
$arr = $model->where("spec_id = $spec_id")->order('id')->select();
$arr = get_id_val($arr, 'id','item');
return $arr;
}
/**
* 获取 规格的 笛卡尔积
* @param $goods_id 商品 id
* @param $spec_arr 笛卡尔积
* @return string 返回表格字符串
*/
public function getSpecInput($goods_id, $spec_arr)
{
//
/*$spec_arr = array(
20 => array('7','8','9'),
10=>array('1','2'),
1 => array('3','4'),
); */
// 排序
foreach ($spec_arr as $k => $v)
{
$spec_arr_sort[$k] = count($v);
}
asort($spec_arr_sort);
foreach ($spec_arr_sort as $key =>$val)
{
$spec_arr2[$key] = $spec_arr[$key];
}
$clo_name = array_keys($spec_arr2);
$spec_arr2 = combineDika($spec_arr2); // 获取 规格的 笛卡尔积
$spec = M('Spec')->getField('id,name'); // 规格表
$specItem = M('SpecItem')->getField('id,item,spec_id');//规格项
$keySpecGoodsPrice = M('SpecGoodsPrice')->where('goods_id = '.$goods_id)->getField('key,key_name,price,store_count,bar_code,sku');//规格项
$str = "";
return $str;
}
/**
* 获取指定规格类型下面的所有规格 但不包括规格项 供商品分类列表页帅选作用
* @param type $type_id
* @param type $checked
*/
function GetSpecCheckboxList($type_id, $checked = array()){
$list = M('Spec')->where("type_id = $type_id")->order('`order` desc')->select();
//$list = M('Spec')->where("1=1")->order('`order` desc')->select();
$str = '';
foreach($list as $key => $val)
{
if(in_array($val['id'],$checked))
$str .= $val['name'].":  ";
else
$str .= $val['name'].":  ";
}
return $str;
}
/**
* 获取指定商品类型下面的所有属性 供商品分类列表页帅选作用
* @param type $type_id
* @param type $checked
*/
function GetAttrCheckboxList($type_id, $checked = array()){
$list = M('GoodsAttribute')->where("type_id = $type_id and attr_index > 0 ")->order('`order` desc')->select();
//$list = M('Spec')->where("1=1")->order('`order` desc')->select();
$str = '';
foreach($list as $key => $val)
{
if(in_array($val['attr_id'],$checked))
$str .= $val['attr_name'].":  ";
else
$str .= $val['attr_name'].":  ";
}
return $str;
}
/**
* 获取选中的下拉框
* @param type $cat_id
*/
function find_parent_cat($cat_id)
{
if($cat_id == null)
return array();
$cat_list = M('goods_category')->where(" store_id=".getAdmStoId())->getField('id,parent_id,level');
$cat_level_arr[$cat_list[$cat_id]['level']] = $cat_id;
// 找出他老爸
$parent_id = $cat_list[$cat_id]['parent_id'];
if($parent_id > 0)
$cat_level_arr[$cat_list[$parent_id]['level']] = $parent_id;
// 找出他爷爷
$grandpa_id = $cat_list[$parent_id]['parent_id'];
if($grandpa_id > 0)
$cat_level_arr[$cat_list[$grandpa_id]['level']] = $grandpa_id;
// 建议最多分 3级, 不要继续往下分太多级
// 找出他祖父
$grandfather_id = $cat_list[$grandpa_id]['parent_id'];
if($grandfather_id > 0)
$cat_level_arr[$cat_list[$grandfather_id]['level']] = $grandfather_id;
return $cat_level_arr;
}
/**
* 获取排好序的品牌列表
*/
function getSortBrands()
{
$brandList = M("Brand")->where(" store_id=".getAdmStoId())
->cache("goodsbrand_".getAdmStoId(),TPSHOP_CACHE_TIME)
->select();
// $brandIdArr = M("Brand")->where("name in (select `name` from `".C('database.prefix')."brand` where store_id=".getAdmStoId()." group by name having COUNT(id) > 1)")
// ->cache(true,TPSHOP_CACHE_TIME)
// ->getField('id,cat_id');
// $goodsCategoryArr = M('goodsCategory')->where("level = 1")->where('store_id',getAdmStoId())
// ->cache(true,TPSHOP_CACHE_TIME)
// ->getField('id,name');
$nameList = array();
foreach($brandList as $k => $v)
{
$name = $v['zm'] .' -- '. $v['name']; // 前面加上拼音首字母
// if(array_key_exists($v[id],$brandIdArr) && $v[cat_id]) // 如果有双重品牌的 则加上分类名称
// $name .= ' ( '. $goodsCategoryArr[$v[cat_id]] . ' ) ';
$nameList[] = $v['name'] = $name;
$brandList[$k] = $v;
}
array_multisort($nameList,SORT_STRING,SORT_ASC,$brandList);
return $brandList;
}
function getParents($categorys,$pId = 0,$l=0){
$list =array();
foreach ($categorys as $k=>$v){
if ($v['parent_id'] == $pId){
unset($categorys[$k]);
if ($l < 3){
//小于三级
$v['children'] = $this->getParents($categorys,$v['id'],$l+1);
}
$list[] = $v;
}
}
return $list;
}
/**
* 获取排好序的国别列表
*/
function getSortNations()
{
$nationList = M("Nation")->where(" store_id=".getAdmStoId())->select();
return $nationList;
}
/**
* 获取排好序的分类列表
*/
function getSortCategory()
{
$categoryList = M("GoodsCategory")->where(" store_id=".getAdmStoId())
->order('`level` asc, sort_order ASC,id asc')
->cache("goodscategory_".getAdmStoId(),TPSHOP_CACHE_TIME)
->getField('id,name,parent_id,level');
$nameList = array();
$nameList=$this->getParents($categoryList);
return $nameList;
}
/*-------------------------------------自定义模板修改--------------------------------------*/
/**
* 获取排好序的品牌列表
*/
function t_getSortBrands($stoid)
{
$brandList = M("Brand")->where(" store_id=".$stoid)->select();
$brandIdArr = M("Brand")->where("name in (select `name` from `".C('database.prefix')."brand` group by name having COUNT(id) > 1)")->getField('id,cat_id');
$goodsCategoryArr = M('goodsCategory')->where("level = 1")->getField('id,name');
$nameList = array();
foreach($brandList as $k => $v)
{
// $name = getFirstCharter($v['name']) .' -- '. $v['name']; // 前面加上拼音首字母
vendor('Pinyin.Pinyin');
$name=substr(strtoupper(Pinyin::getShortPinyin($v['name'])),0,1) .' -- '. $v['name'];
if(array_key_exists($v[id],$brandIdArr) && $v[cat_id]) // 如果有双重品牌的 则加上分类名称
$name .= ' ( '. $goodsCategoryArr[$v[cat_id]] . ' ) ';
$nameList[] = $v['name'] = $name;
$brandList[$k] = $v;
}
array_multisort($nameList,SORT_STRING,SORT_ASC,$brandList);
return $brandList;
}
/**
* 获取排好序的分类列表
*/
function t_getSortCategory($stoid)
{
$categoryList = M("GoodsCategory")->where(" store_id=".$stoid)->getField('id,name,parent_id,level');
$nameList = array();
$nameList=$this->getParents($categoryList);
return $nameList;
}
}