www.lightcourse.com/app/common/model/Search.php

312 lines
14 KiB
PHP
Raw Blame History

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
namespace app\common\model;
/**
* ============================================================================
* 联课教育商城系统
* ============================================================================
* 版权所有 2022 刻羽互动科技有限公司,并保留所有权利。
* 网站地址: http://www.o1h.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* 数据层模型
*/
class Search extends BaseModel {
public function __get($key) {
return $this->$key;
}
/**
* 取得商品分类详细信息
* @access public
* @author o1h.cn
* @param type $get 需要的参数内容
* @param type $default_classid 默认分类id
* @return type
*/
public function getAttribute($get, $default_classid, $a_id) {
if (!empty($a_id)) {
$attr_ids = explode('_', $a_id);
}
if (!empty($get['a_id'])) {
$attr_ids = explode('_', $get['a_id']);
//过滤筛选重复的
$m = model('attribute');
$one = array_column($m->getAttributeValueList(['attr_id' => 1], 'attrvalue_id'), 'attrvalue_id');
$two = array_column($m->getAttributeValueList(['attr_id' => 2], 'attrvalue_id'), 'attrvalue_id');
$three = array_column($m->getAttributeValueList(['attr_id' => 3], 'attrvalue_id'), 'attrvalue_id');
$four = array_column($m->getAttributeValueList(['attr_id' => 4], 'attrvalue_id'), 'attrvalue_id');
$new = [];
foreach ($attr_ids as $id) {
if (in_array($id, $one)) {
$new['one'] = $id;
}
if (in_array($id, $two)) {
$new['two'] = $id;
}
if (in_array($id, $three)) {
$new['three'] = $id;
}
if (in_array($id, $four)) {
$new['four'] = $id;
}
}
$attr_ids = array_values($new);
}
$data = array();
// 获取当前的分类内容
$class_array = model('goodsclass')->getGoodsclassForCacheModel();
$data['class'] = isset($get['cate_id'])&&isset($class_array[$get['cate_id']]) ? $class_array[$get['cate_id']]:array();
if (empty($data['class']['child']) && empty($data['class']['childchild'])) {
// 根据属性查找商品
if (isset($attr_ids)) {
// 商品id数组
$goodsid_array = array();
$data['sign'] = false;
foreach ($attr_ids as $val) {
$where = array();
$where[] = array('attrvalue_id','=',$val);
if ($data['sign']) {
$where[] = array('goods_id','in', $goodsid_array);
}
$goodsattrindex_list = model('goodsattrindex')->getGoodsAttrIndexList($where, 'goods_id');
if (!empty($goodsattrindex_list)) {
$data['sign'] = true;
$tpl_goodsid_array = array();
foreach ($goodsattrindex_list as $val) {
$tpl_goodsid_array[] = $val['goods_id'];
}
$goodsid_array = $tpl_goodsid_array;
} else {
$data['goodsid_array'] = $goodsid_array = array();
$data['sign'] = false;
break;
}
}
if ($data['sign']) {
$data['goodsid_array'] = $goodsid_array;
}
}
}
// var_dump($default_classid);die;
$class = isset($class_array[$default_classid])?$class_array[$default_classid]:"";
$brand_array = array();
$initial_array = array();
$attr_array = array();
$checked_brand = array();
$checked_attr = array();
//获得分类对应的类型ID
$type_id = isset($class['type_id']) ? $class['type_id'] : '';
if (!empty($type_id)) {
//品牌列表
$typebrand_list = model('type')->getTypebrandList(array('type_id' => $type_id), 'brand_id');
if (!empty($typebrand_list)) {
$brandid_array = array();
foreach ($typebrand_list as $val) {
$brandid_array[] = $val['brand_id'];
}
$brand_array = model('brand')->getBrandPassedList(array(array('brand_id','in', $brandid_array)), 'brand_id,brand_name,brand_initial,brand_pic,brand_showtype', 0, 'brand_showtype asc,brand_recommend desc,brand_sort asc');
if (!empty($brand_array)) {
$brand_list = array();
foreach ($brand_array as $val) {
$brand_list[$val['brand_id']] = $val;
$initial_array[] = $val['brand_initial'];
}
$brand_array = $brand_list;
$initial_array = array_unique($initial_array);
sort($initial_array);
}
}
// 被选中的品牌
$brand_id = isset($get['b_id']) ? intval($get['b_id']) : "";
if ($brand_id > 0 && !empty($brand_array)) {
if (isset($brand_array[$brand_id])) {
$checked_brand[$brand_id]['brand_name'] = $brand_array[$brand_id]['brand_name'];
}
}
//属性列表
$attribute_model = model('attribute');
$attribute_list = $attribute_model->getAttributeShowList(array(array('type_id' ,'=', $type_id)), 'attr_id,attr_name');
$attributevalue_list = $attribute_model->getAttributeValueList(array('type_id' => $type_id), 'attrvalue_id,attrvalue_name,attr_id');
$attributevalue_list = array_under_reset($attributevalue_list, 'attr_id', 2);
if (!empty($attribute_list)) {
foreach ($attribute_list as $val) {
$attr_array[$val['attr_id']]['name'] = $val['attr_name'];
if(isset($attributevalue_list[$val['attr_id']])){
$tpl_array = array_under_reset($attributevalue_list[$val['attr_id']], 'attrvalue_id');
$attr_array[$val['attr_id']]['value'] = $tpl_array;
}else{
$attr_array[$val['attr_id']]['value'] = array();
}
}
}
// 被选中的属性
if (isset($attr_ids) && is_array($attr_ids) && !empty($attr_array)) {
foreach ($attr_ids as $s) {
foreach ($attr_array as $k => $d) {
if (isset($d['value'][$s])) {
$checked_attr[$k]['attr_name'] = $d['name'];
$checked_attr[$k]['attrvalue_id'] = $s;
$checked_attr[$k]['attrvalue_name'] = $d['value'][$s]['attrvalue_name'];
}
}
}
}
}
return array($data, $brand_array, $initial_array, $attr_array, $checked_brand, $checked_attr);
}
/**
* 从TAG中查找分类
* @access public
* @author o1h.cn
* @param type $keyword
* @return type
*/
public function getTagCategory($keyword = '') {
$data = array();
if ($keyword != '') {
// 跟据class_tag缓存搜索出与keyword相关的分类
$tag_list = rkcache('classtag', true);
if (!empty($tag_list) && is_array($tag_list)) {
foreach ($tag_list as $key => $val) {
$tag_value = $val['gctag_value'];
if (strpos($tag_value, $keyword)!==false) {
$data[] = $val['gc_id'];
}
}
}
}
return $data;
}
/**
* 获取父级分类,递归调用
* @access public
* @author o1h.cn
* @param type $gc_id 分类id
* @param type $goods_class 商品分类
* @param type $data 数据
* @return type
*/
private function _getParentCategory($gc_id, $goods_class, $data) {
array_unshift($data, $gc_id);
if (isset($goods_class[$gc_id]['gc_parent_id']) && $goods_class[$gc_id]['gc_parent_id'] != 0) {
return $this->_getParentCategory($goods_class[$gc_id]['gc_parent_id'], $goods_class, $data);
} else {
return $data;
}
}
/**
* 显示左侧商品分类
* @access public
* @author o1h.cn
* @param type $param 分类id
* @param type $sign 0为取得最后一级的同级分类1为不取得
* @return type
*/
public function getLeftCategory($param, $sign = 0) {
$data = array();
if (!empty($param)) {
$goods_class = model('goodsclass')->getGoodsclassForCacheModel();
foreach ($param as $val) {
$data[] = $this->_getParentCategory($val, $goods_class, array());
}
}
$tpl_data = array();
$gc_list = model('goodsclass')->get_all_category();
foreach ($data as $value) {
//$tpl_data[$val[0]][$val[1]][$val[2]] = $val[2];
if (!empty($gc_list[$value[0]])) { // 一级
$tpl_data[$value[0]]['gc_id'] = $gc_list[$value[0]]['gc_id'];
$tpl_data[$value[0]]['gc_name'] = $gc_list[$value[0]]['gc_name'];
if (isset($value[0]) && isset($value[1]) && isset($gc_list[$value[0]]['class2'][$value[1]])) { // 二级
$tpl_data[$value[0]]['class2'][$value[1]]['gc_id'] = $gc_list[$value[0]]['class2'][$value[1]]['gc_id'];
$tpl_data[$value[0]]['class2'][$value[1]]['gc_name'] = $gc_list[$value[0]]['class2'][$value[1]]['gc_name'];
if (isset($value[0]) && isset($value[1]) && isset($value[2]) && isset($gc_list[$value[0]]['class2'][$value[1]]['class3'][$value[2]])) { // 三级
$tpl_data[$value[0]]['class2'][$value[1]]['class3'][$value[2]]['gc_id'] = $gc_list[$value[0]]['class2'][$value[1]]['class3'][$value[2]]['gc_id'];
$tpl_data[$value[0]]['class2'][$value[1]]['class3'][$value[2]]['gc_name'] = $gc_list[$value[0]]['class2'][$value[1]]['class3'][$value[2]]['gc_name'];
if (!$sign) { // 取得全部三级分类
foreach ($gc_list[$value[0]]['class2'][$value[1]]['class3'] as $val) {
$tpl_data[$value[0]]['class2'][$value[1]]['class3'][$val['gc_id']]['gc_id'] = $val['gc_id'];
$tpl_data[$value[0]]['class2'][$value[1]]['class3'][$val['gc_id']]['gc_name'] = $val['gc_name'];
if ($value[2] == $val['gc_id']) {
$tpl_data[$value[0]]['class2'][$value[1]]['class3'][$val['gc_id']]['default'] = 1;
}
}
}
} else { // 取得全部二级分类
if (!$sign) { // 取得同级分类
if (!empty($gc_list[$value[0]]['class2'])) {
foreach ($gc_list[$value[0]]['class2'] as $gc2) {
$tpl_data[$value[0]]['class2'][$gc2['gc_id']]['gc_id'] = $gc2['gc_id'];
$tpl_data[$value[0]]['class2'][$gc2['gc_id']]['gc_name'] = $gc2['gc_name'];
if (!empty($gc2['class3'])) {
foreach ($gc2['class3'] as $gc3) {
$tpl_data[$value[0]]['class2'][$gc2['gc_id']]['class3'][$gc3['gc_id']]['gc_id'] = $gc3['gc_id'];
$tpl_data[$value[0]]['class2'][$gc2['gc_id']]['class3'][$gc3['gc_id']]['gc_name'] = $gc3['gc_name'];
}
}
}
}
}
}
} else { // 取得全部一级分类
if (!$sign) { // 取得同级分类
if (!empty($gc_list)) {
foreach ($gc_list as $gc1) {
$tpl_data[$gc1['gc_id']]['gc_id'] = $gc1['gc_id'];
$tpl_data[$gc1['gc_id']]['gc_name'] = $gc1['gc_name'];
if (!empty($gc1['class2'])) {
foreach ($gc1['class2'] as $gc2) {
$tpl_data[$gc1['gc_id']]['class2'][$gc2['gc_id']]['gc_id'] = $gc2['gc_id'];
$tpl_data[$gc1['gc_id']]['class2'][$gc2['gc_id']]['gc_name'] = $gc2['gc_name'];
if (!empty($gc2['class3'])) {
foreach ($gc2['class3'] as $gc3) {
$tpl_data[$gc1['gc_id']]['class2'][$gc2['gc_id']]['class3'][$gc3['gc_id']]['gc_id'] = $gc3['gc_id'];
$tpl_data[$gc1['gc_id']]['class2'][$gc2['gc_id']]['class3'][$gc3['gc_id']]['gc_name'] = $gc3['gc_name'];
}
}
}
}
}
}
}
}
}
}
return $tpl_data;
}
}
?>