chaoyu/app/model/Category.php

252 lines
8.0 KiB
PHP
Executable File

<?php
namespace app\model;
class Category extends Base
{
public static $CIdList = [
'about' => 1, // 走进超宇
'about_children' => [
'company' => 3, // 企业简介
'honor' => 8, // 资质荣誉
'structure' => 9, // 组织架构
'history' => 10, // 发展历程
'video' => 11, // 企业视频
],
'honors_manage' => 26, // 荣誉资质管理
'history_manage' => 29, // 发展历程管理
'products' => 2, // 产品中心
'service' => 5, // 品质与服务
'service_children' => [
'before' => 12, // 售前服务
'in_progress' => 13, // 售中服务
'after' => 14, // 售后服务
],
'marketing' => 15, // 营销网络(主)
'marketing_children' => [
'network' => 16, // 营销网络
'achievement' => 17, // 主要业绩
],
'achievement_manage' => 34, // 主要业绩管理
'news' => 18, // 新闻动态
'news_children' => [
'enterprise' => 20, // 企业新闻
'industry' => 21, // 行业资讯
'dynamics' => 22, // 最新动态
],
'contact' => 19, // 联系我们
'contact_children' => [
'information' => 23, // 联系方式
'jobs' => 24, // 行业资讯
'message' => 25, // 在线留言
],
'jobs_manage' => 33, // 招聘管理
];
//获取首页栏目ID
public static function getIndex()
{
return self::where('is_index', 1)->findOrEmpty()->toArray();
}
//根据上级ID和语言获取下级栏目
public static function getChildrenByParentId($parentId)
{
if($parentId <= 0){
return [];
}
$category = self::getById($parentId);
if(empty($category)){
return [];
}
return self::alias('c')
->leftJoin('model m', 'c.model_id=m.id')
->field('c.*, m.manager, m.template, m.name as modelName')
->where('c.parent_id', $parentId)
->order('c.sort','asc')
->select()
->toArray();
}
//重写方法
public static function getById($categoryId)
{
return self::alias('c')
->leftJoin('model m', 'c.model_id = m.id')
->where('c.id', $categoryId)
->field('c.*, m.template')
->findOrEmpty()
->toArray();
}
//查看是否有下级栏目
public static function hasChildren($categoryId)
{
if (is_array($categoryId)) {
$count = self::where('parent_id', 'in', $categoryId)->count();
} else {
$count = self::where(['parent_id'=>$categoryId])->count();
}
return $count ? true : false;
}
//获取前台菜单
public static function getListForFrontMenu()
{
$items = self::alias('c')
->leftJoin('model m','c.model_id=m.id')
->field('c.*, m.manager, m.template')
->where('c.state', 1)
->where('c.is_menu', 1)
->order('is_index desc, sort asc')
->select()
->toArray();
return self::getCates($items);
}
/**
* 获取栏目
* @param bool $limit 是否限制查询
* @param array $cates 需要限制查询的栏目IDs
*/
public static function getList($limit = false, $cates = [])
{
if ($limit && empty($cates)) {
return [];
}
return self::alias('c')
->leftJoin('model m', 'c.model_id=m.id')
->field('c.*, m.manager, m.name as modelName')
->when($limit, function($query) use($cates) {
$query->whereIn('c.id', $cates);
})
->order('sort','asc')
->select()
->toArray();
}
//获取栏目分级列表
public static function getListTree($isMenu = false)
{
if ($isMenu) {
$items = self::where('c.state', 1) ->order('sort','asc')->select()->toArray();
} else {
$items = self::order('sort','asc')->select()->toArray();
}
return self::getCates($items);
}
//获取递归栏目
public static function getCates($cates,$parentId=0)
{
$menus = [];
foreach($cates as $cate){
if($cate['parent_id'] == $parentId){
$children = self::getCates($cates,$cate['id']);
if(!empty($children)){
$cate['children'] = $children;
}
$menus[] = $cate;
}
}
return $menus;
}
public static function onAfterInsert($category)
{
$category->sort = $category->id;
$category->save();
}
//递归获取栏目名称面包屑
public static function getCatesCrumbs($currentId = 0)
{
$crumbs = [];
$category = self::getById($currentId);
if($category) {
if($category['parent_id'] == 0){
$crumbs[] = $category;
}else{
$categoryIds = explode(',', trim($category['path'], ','));
$categories = self::alias('c')
->leftJoin('model m', 'c.model_id = m.id')
->where('c.id', 'in', $categoryIds)
->column('c.*,m.template', 'c.id');
foreach($categoryIds as $id){
if(isset($categories[$id])){
$crumbs[] = $categories[$id];
}
}
$crumbs[] = $category;
}
}
return $crumbs;
}
//获取栏目中涉及到的文件
public static function getFilesInUse()
{
$items = self::select()->toArray();
$data = [];
foreach($items as $item){
$src = trim($item['src']);
if(!empty($src)){
$key = getKeyByPath($src);
$data[$key] = $src;
}
}
return $data;
}
//当前分类的最高级分类Id
public static function firstGradeById($id)
{
$res = 0;
$item = self::getById($id);
if ($item) {
$res = $id;
if ($item['parent_id'] > 0) {
$items = self::select()->toArray();
$first = self::getFirstGrade($items, $item['parent_id']);
if (!empty($first)) {
$res = $first['id'];
}
}
}
return $res;
}
public static function getFirstGrade($items, $parentId)
{
$data = [];
foreach ($items as $key=> $item) {
if($item['id'] == $parentId) {
if ($item['parent_id'] > 0) {
unset($items[$key]);
$parent = self::getFirstGrade($items, $item['parent_id']);
if (!empty($parent)) {
$data = $parent;
} else {
$data = $item;
}
} else {
$data = $item;
}
}
}
return $data;
}
//根据栏目ID获取面包屑列表
public static function getListForCrumbs($categoryId)
{
$categories = [];
$category = self::getById($categoryId);
if(!empty($category)){
$categories[] = $category;
if($category['parent_id'] != 0 ){
$parents = self::getListForCrumbs($category['parent_id']);
if(!empty($parents)){
$categories = array_merge($categories, $parents);
}
}
}
return $categories;
}
}