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.

109 lines
3.5 KiB

<?php
namespace app\mall\model;
use think\model\concern\SoftDelete;
class MallCategory extends Base
{
use SoftDelete;
/**
* 获取商城分类
* @date 2021-03-01
*/
public function getCategory()
{
$where = [
['uid', '=', $this->mid]
];
$array = $this->where($where)
->field('id,pid,name,cover_img,advert_img,advert_img_link')->order('sort desc')->select()
->toArray();
return listToTree($array);
}
/*
* 获取列表信息
*/
public function getListAll($where)
{
//获取一级权限
$data = $this->where($where)->where(array('pid' => 0))->order('sort desc,id asc')->select();
$redata = array();
if (!empty($data)) {
$idData = array();
foreach ($data as $value) {
$idData[] = $value['id'];
}
//获取二级权限
$list = $this->where(array('pid' => $idData))->order('sort desc,id asc')->select();
foreach ($data as $value) {
$temp = array();
$temp['id'] = $value['id'];
$temp['pid'] = $value['pid'];
$temp['name'] = $value['name'];
$temp['cover_img'] = $value['cover_img'];
$temp['advert_img'] = $value['advert_img'];
$temp['sort'] = $value['sort'];
$temp['create_time'] = $value['create_time'];
$temp['level'] = 0;
$temp['list'] = [];
//写入下一级信息
foreach ($list as $val) {
if ($val['pid'] == $value['id']) {
$val['level'] = 1;
$temp['list'][] = $val;
}
}
$redata[] = $temp;
}
return $redata;
}
}
public function getInfiniteNameData($where, $order = '', $limit_level = 0, $name = 'name', $relation_id = 'pid', $keyword = 'level', $now_level = 0, $return_data = [])
{
if (!empty($limit_level)) {
if ($limit_level <= $now_level) {
return $return_data;
}
}
if ($now_level == 0) {
$is_key = array_search($relation_id, array_column($where, 0));
if ($is_key) {
$where[$is_key] = [$relation_id, '<=', 0];
} else {
$where[] = [$relation_id, '<=', 0];
}
}
if (empty($order)) {
$order = $this->getPk() . ' desc';
}
$array = $this->where($where)->order($order)->select()->toArray();
if (empty($array)) {
return $return_data;
}
foreach ($array as $key => $value) {
if ($now_level != 0) {
$value[$name] = $this->where($this->getPk(), $value[$relation_id])->value($name) . '-' . $value[$name];
}
$is_key = array_search($relation_id, array_column($where, 0));
if ($is_key) {
$where[$is_key] = [$relation_id, '=', $value[$this->getPk()]];
} else {
$where[] = [$relation_id, '=', $value[$this->getPk()]];
}
//$where[$relation_id] = $value[$this->getPk()];
$value[$keyword] = $now_level;
$return_data[] = $value;
$return_data = $this->getInfiniteNameData($where, $order, $limit_level, $name, $relation_id, $keyword, $now_level + 1, $return_data);
}
return $return_data;
}
}