在做一个学校的项目,分类有四级分类,总共一百多个分类,因为每个分类对应不同的老师,用于上传资料作为考核,但是添加系统用户的时候发现DEDECMS只有两级分类,所以修改啦一些代码,目前不知道是否修改完全,暂时来看,四级目录授权功能是可以授权的,下面是修改的代码。
1.添加/修改系统用户-展示全部分类
打开dede/sys_admin_user_add.php 和dede/sys_admin_user_edit.php
在顶部下引入文件,具体啥用不清楚,因为之前也是参考别人的文章,我估计不引用也没关系,但是我没时间测试,先这样吧
require_once(dirname(__FILE__)."/config.php");
require_once(DEDEADMIN."/inc/inc_catalog_options.php"); // 引入这行代码
修改底部
$dsql->Execute('op');
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
include DedeInclude('templets/sys_admin_user_add.htm');
替换中间的代码为
$typeOptions .= GetOptionList(0,$cuserLogin->getUserChannel(),0);
2.修改include/typeunit.class.admin.php文件
找到
while($row = $this->dsql->GetObject())
{
if($row->reid==0) continue;
$topidstr .= ($topidstr=='' ? $row->reid : ','.$row->reid);
}
在它下面添加以下代码
/*****************************修改代码,后台管理三级栏目授权开始*******************************/
// 获取所有顶级栏目id
$current_id = (string)$admin_catalogs[0];
$category_arr = [];
$categorys = explode(',',$admin_catalog);
foreach ($categorys as $key=>$value) {
array_push($category_arr,$categorys[$key]);
$this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($categorys[$key]) group by reid ");
$this->dsql->Execute();
if(($reid = $this->dsql->GetObject()->reid) != 0) {
// 不是二级分类
array_push($category_arr,$reid);
// 继续判断是否为二级分类
$this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
$this->dsql->Execute();
if(($reid = $this->dsql->GetObject()->reid) != 0) {
array_push($category_arr,$reid);
// 继续判断是否为二级分类
$this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
$this->dsql->Execute();
if(($reid = $this->dsql->GetObject()->reid) != 0) {
array_push($category_arr,$reid);
// 继续判断是否为二级分类
$this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
$this->dsql->Execute();
if(($reid = $this->dsql->GetObject()->reid) != 0) {
array_push($category_arr,$reid);
// 继续判断是否为二级分类
$this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
$this->dsql->Execute();
}
}
}
}
}
此处写得有点糟糕,循环,我因为只有四级就先这么简单写
然后在$admin_catalogs = array_unique($admin_catalogs);后添加一行
$admin_catalogs = array_unique($category_arr);