146 lines
3.8 KiB
PHP
146 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace app\model;
|
|
|
|
use think\Collection;
|
|
use think\db\exception\DbException;
|
|
use think\db\exception\DataNotFoundException;
|
|
use think\db\exception\ModelNotFoundException;
|
|
use think\model\relation\HasOne;
|
|
|
|
class ArchivesCategory extends Base
|
|
{
|
|
const index_id = 1;//首页
|
|
/**
|
|
* 检测数据下 是否有子栏目
|
|
*
|
|
* @param array $ids
|
|
* @return bool
|
|
*/
|
|
public static function hasChildrenByIds(array $ids): bool
|
|
{
|
|
return self::whereIn('pid', $ids)->count() > 0;
|
|
}
|
|
|
|
/**
|
|
* 检测数据下 是否有子内容
|
|
*
|
|
* @param array $ids
|
|
* @return bool
|
|
*/
|
|
public static function hasContentByIds(array $ids): bool
|
|
{
|
|
return Archives::whereIn('category_id', $ids)->count() > 0;
|
|
}
|
|
|
|
/**
|
|
* 获取列表
|
|
*
|
|
* @return ArchivesCategory[]|array|Collection
|
|
* @throws DataNotFoundException
|
|
* @throws DbException
|
|
* @throws ModelNotFoundException
|
|
*/
|
|
public static function getList()
|
|
{
|
|
return self::field('id,pid,title,name,sort,path,true as open')
|
|
->order('sort', 'desc')
|
|
->order('id', 'asc')
|
|
->select();
|
|
}
|
|
|
|
/**
|
|
* 模型
|
|
*
|
|
* @return HasOne
|
|
*/
|
|
public function model(): HasOne
|
|
{
|
|
return $this->hasOne(ArchivesModel::class, 'id', 'model_id')->bind(['model' => 'name']);
|
|
}
|
|
|
|
|
|
//--王兴龙 auth start --------------------------------------------------------------------------------------------------
|
|
//获取前台菜单
|
|
public static function getListForFrontMenu()
|
|
{
|
|
$items = self::withJoin(["model"])
|
|
->order(['sort' =>'desc',"id"=>"asc"])
|
|
->select()
|
|
->toArray();
|
|
return self::getCates($items);
|
|
}
|
|
|
|
//获取递归栏目
|
|
public static function getCates($cates, $parentId = 0)
|
|
{
|
|
$menus = [];
|
|
foreach ($cates as $cate) {
|
|
if ($cate['pid'] == $parentId) {
|
|
$children = self::getCates($cates, $cate['id']);
|
|
if (!empty($children)) {
|
|
$cate['children'] = $children;
|
|
}
|
|
$menus[] = $cate;
|
|
}
|
|
}
|
|
return $menus;
|
|
}
|
|
|
|
//当前分类的最高级分类Id
|
|
public static function firstGradeById($id)
|
|
{
|
|
$res = 0;
|
|
$item = self::getById($id);
|
|
if ($item) {
|
|
$res = $id;
|
|
if ($item['pid'] > 0) {
|
|
$items = self::select()->toArray();
|
|
$first = self::getFirstGrade($items, $item['pid']);
|
|
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['pid'] > 0) {
|
|
unset($items[$key]);
|
|
$parent = self::getFirstGrade($items, $item['pid']);
|
|
if (!empty($parent)) {
|
|
$data = $parent;
|
|
} else {
|
|
$data = $item;
|
|
}
|
|
} else {
|
|
$data = $item;
|
|
}
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 获取每个栏目文章封面大小 数组
|
|
* */
|
|
public static function getArchiveCoverSizeArr()
|
|
{
|
|
return json_encode(self::column(["id","archive_cover_size"],"id"));
|
|
}
|
|
/**
|
|
* 获取每个栏目 设置路由
|
|
* */
|
|
public static function getRoute()
|
|
{
|
|
return self::column(["id","name","route"],"id");
|
|
}
|
|
|
|
//--王兴龙 auth end --------------------------------------------------------------------------------------------------
|
|
}
|