在做一个学校的项目,分类有四级分类,总共一百多个分类,因为每个分类对应不同的老师,用于上传资料作为考核,但是添加系统用户的时候发现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);