307 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			307 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace app\model;
 | |
| 
 | |
| class Category extends Base
 | |
| {
 | |
|     const AboutMarketId = 56;//关于市场顶级id
 | |
|     const ProductCategoryId = 57;//产品顶级id
 | |
|     const AquaticSupplyAndDemandId = 62;//水产供求顶级id
 | |
|     const NewsId = 58;//新闻顶级id
 | |
| 
 | |
|     const indexAquaticSupplyDemandId = 74;//首页水产供求id(不是顶级栏目)
 | |
|     const indexAquacultureInformationId = 76;//首页水产养殖资讯id(不是顶级栏目)
 | |
| 
 | |
|     const indexAquaticSeedlingId = 66;//首页水产鱼苗id(不是顶级栏目)
 | |
|     const indexFisheryFeedId = 67;//首页渔用饲料id(不是顶级栏目)
 | |
|     const indexDomesticFishWholesaleId = 68;//首页家鱼批发id(不是顶级栏目)
 | |
|     const indexSeafoodWholesaleId = 69;//首页海鲜批发id(不是顶级栏目)
 | |
|     const indexFisherySuppliesId = 70;//首页渔需物资id(不是顶级栏目)
 | |
| 
 | |
| 
 | |
|     //获取首页栏目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)
 | |
|             ->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) {
 | |
|                 $categoryIds = explode(',', trim($category['path'], ','));
 | |
|                 $categories = self::where('id', 'in', $categoryIds)->column('*', 'id');
 | |
|                 foreach ($categoryIds as $id) {
 | |
|                     if (isset($categories[$id])) {
 | |
|                         $crumbs[] = $categories[$id]['title'];
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             $crumbs[] = $category['title'];
 | |
|         }
 | |
|         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;
 | |
|     }
 | |
| 
 | |
|     public static function getFooterMenu()
 | |
|     {
 | |
|         $items = self::alias('c')
 | |
|             ->leftJoin('model m', 'c.model_id=m.id')
 | |
|             ->field('c.*, m.manager, m.template')
 | |
|             ->where('c.state', 1)
 | |
|             ->where('c.id', "in", self::footer_menu_ids)
 | |
|             ->whereOr('c.parent_id', "in", self::footer_menu_ids)
 | |
|             ->order('is_index desc, sort asc')
 | |
|             ->select()
 | |
|             ->toArray();
 | |
|         return self::getCates($items);
 | |
|     }
 | |
| 
 | |
|     public static function getChildrenIds($parentId)
 | |
|     {
 | |
|         return self::where("parent_id", $parentId)->column("id");
 | |
|     }
 | |
| 
 | |
|     //获取当前位置
 | |
|     public static function getPosition($categoryId, $isIndex = true)
 | |
|     {
 | |
|         $position = "";
 | |
|         $getFirstGrade = self::alias('c')
 | |
|             ->leftJoin('model m', 'c.model_id=m.id')
 | |
|             ->field('c.*, m.manager, m.template, m.name as modelName')
 | |
|             ->where("c.id", $categoryId)
 | |
|             ->find()
 | |
|             ->toArray();
 | |
| 
 | |
|         if (!$getFirstGrade) return $position;
 | |
| 
 | |
|         $position = '<a href="' . getUri($getFirstGrade) . '">' . $getFirstGrade["title"] . "</a>  " . $position;
 | |
|         if (!in_array($getFirstGrade["parent_id"], [0, 1])) {
 | |
|             $position = (self::getPosition($getFirstGrade["parent_id"], false) . $position);
 | |
|         }
 | |
|         return ($isIndex ? "<a href='/'>首页</a>" : "") . $position;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     public static function getProductNewsChildrenIds()
 | |
|     {
 | |
|         return self::where("parent_id","in",[
 | |
|             self::NewsId,
 | |
|             self::ProductCategoryId,
 | |
|         ])->column("id");
 | |
|     }
 | |
| //    ----------web -------
 | |
|     //关于市场
 | |
|     public static function getAboutMarket()
 | |
|     {
 | |
|         $ids = self::where("parent_id", self::AboutMarketId)->column("id");
 | |
|         return self::alias('c')
 | |
|             ->leftJoin('model m', 'c.model_id=m.id')
 | |
|             ->field('c.*, m.manager, m.template, m.name as modelName')
 | |
|             ->where('c.id', "in", $ids)
 | |
|             ->order('c.sort', 'asc')
 | |
|             ->select()
 | |
|             ->toArray();
 | |
|     }
 | |
| 
 | |
|     //产品展示
 | |
|     public static function getProduct()
 | |
|     {
 | |
|         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', "=", self::ProductCategoryId)
 | |
|             ->order('c.sort', 'asc')
 | |
|             ->select()
 | |
|             ->toArray();
 | |
|     }
 | |
| 
 | |
|     //水产供求
 | |
|     public static function getAquaticSupplyAndDemand()
 | |
|     {
 | |
|         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', "=", self::AquaticSupplyAndDemandId)
 | |
|             ->order('c.sort', 'asc')
 | |
|             ->select()
 | |
|             ->toArray();
 | |
|     }
 | |
| 
 | |
|     //新闻 市场动态
 | |
|     public static function getNews()
 | |
|     {
 | |
|         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', "=", self::NewsId)
 | |
|             ->order('c.sort', 'asc')
 | |
|             ->select()
 | |
|             ->toArray();
 | |
|     }
 | |
| }
 |