这个问题在网上搜了好多基本都是这样说的:修改sys_admin_user_edit.php文件(后台管理的文件夹下,默认为dede)
把最下面 //显示用户信息 下面的内容改成
$randcode = mt_rand(10000,99999);
$safecode = substr(md5($cfg_cookie_encode.$randcode),0,24);
$typeOptions = '';
$row = $dsql->GetOne("Select * From `#@__admin` where id='$id'");
$typeids = explode(',', $row['typeid']);
$dsql->SetQuery("Select id,typename From `#@__arctype` where reid=0 And (ispart=0 Or ispart=1)");
$dsql->Execute('op');
while($nrow = $dsql->GetObject('op'))
{
$typeOptions .= "<option value='{$nrow->id}' class='btype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">{$nrow->typename}</option>\r\n";
$dsql->SetQuery("Select id,typename From #@__arctype where reid={$nrow->id} And (ispart=0 Or ispart=1)");
$dsql->Execute('s');
while($nrow = $dsql->GetObject('s'))
{
$typeOptions .= "<option value='{$nrow->id}' class='stype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">{$nrow->typename}</option>\r\n";
$dsql->SetQuery("Select id,typename From #@__arctype where reid={$nrow->id} And (ispart=0 Or ispart=1)");
$dsql->Execute('t');
while($nrow = $dsql->GetObject('t'))
{
$typeOptions .= "<option value='{$nrow->id}' class='stype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">─{$nrow->typename}</option>\r\n";
}
}
}
include DedeInclude('templets/sys_admin_user_edit.htm');
其实就是把二级循环里又套了个三级循环,改的是系统-系统用户管理-更改的用于栏目选择的列表,添加管理员的栏目选择列表在sys_admin_user_add.php里,同样是在文件末尾部分,需要修改的代码页相同。
改完这些之后,并不能让有三级栏目权限的管理员的 核心-网站栏目管理 中出现选择的三级栏目,在网上没找到想要的解决方法,于是就自己改了。下面是详细的方法:
修改的文件为:typeunit.class.admin.php(include文件夹下), 织梦版本是5.7
需要修改的方法: function ListAllType($channel=0,$nowdir=0),红色为修改的部分
function ListAllType($channel=0,$nowdir=0)
{
global $cfg_admin_channel, $admin_catalogs;
$this->dsql = $GLOBALS['dsql'];
//检测用户有权限的顶级栏目
if($cfg_admin_channel=='array')
{
$admin_catalog = join(',', $admin_catalogs);
$this->dsql->SetQuery("SELECT topid,id FROM `#@__arctype` WHERE id in($admin_catalog) group by topid ");
$this->dsql->Execute();
$topidstr = '';
while($row = $this->dsql->GetObject())
{
if($row->topid==0) continue;
$topidstr .= ($topidstr=='' ? $row->topid : ','.$row->topid);
}
$admin_catalog .= ','.$topidstr;
$admin_catalogs = explode(',', $admin_catalog);
$admin_catalogs = array_unique($admin_catalogs);
}
$this->dsql->SetQuery("SELECT id,typedir,typename,ispart,sortrank,ishidden FROM `#@__arctype` WHERE reid=0 order by sortrank");
$this->dsql->Execute(0);
while($row = $this->dsql->GetObject(0))
{
if( $cfg_admin_channel=='array' && !in_array($row->id, $admin_catalogs) )
{
continue;
}
$typeDir = $row->typedir;
$typeName = $row->typename;
$ispart = $row->ispart;
$id = $row->id;
$rank = $row->sortrank;
if($row->ishidden=='1')
{
$nss = "<font color='red'>[隐]</font>";
}
else
{
$nss = '';
}
echo "<table width='100%' border='0' cellspacing='0' cellpadding='2'>\r\n";
//普通列表
if($ispart==0)
{
echo " <tr>\r\n";
echo " <td style='background-color:#FBFCE2;' width='2%' class='bline'><img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'></td>\r\n";
echo " <td style='background-color:#FBFCE2;' class='bline'><table width='98%' border='0' cellspacing='0' cellpadding='0'><tr><td width='50%'><input class='np' type='checkbox' name='tids[]' value='{$id}'><a href='catalog_do.php?cid=".$id."&dopost=listArchives' oncontextmenu=\"CommonMenu(event,this,$id,'".urlencode($typeName)."')\">{$nss}".$typeName."[ID:".$id."]</a>(文档:".$this->GetTotalArc($id).") <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"><img src='images/write2.gif'/></a>";
echo " </td><td align='right'>";
echo "<a href='{$GLOBALS['cfg_phpurl']}/list.php?tid={$id}' target='_blank'>预览</a>";
echo "|<a href='catalog_do.php?cid={$id}&dopost=listArchives'>内容</a>";
echo "|<a href='catalog_add.php?id={$id}'>增加子类</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
//带封面的频道
else if($ispart==1)
{
echo " <tr >\r\n";
echo " <td style='background-color:#FBFCE2;' width='2%' class='bline'><img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'></td>\r\n";
echo " <td style='background-color:#FBFCE2;' class='bline'><table width='98%' border='0' cellspacing='0' cellpadding='0'><tr><td width='50%'><input class='np' type='checkbox' name='tids[]' value='{$id}'><a href='catalog_do.php?cid=".$id."&dopost=listArchives' oncontextmenu=\"CommonMenuPart(event,this,$id,'".urlencode($typeName)."')\">{$nss}".$typeName."[ID:".$id."]</a> <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"> <img src='images/write2.gif'/> </a>";
echo " </td><td align='right'>";
echo "<a href='{$GLOBALS['cfg_phpurl']}/list.php?tid={$id}' target='_blank'>预览</a>";
echo "|<a href='catalog_do.php?cid={$id}&dopost=listArchives'>内容</a>";
echo "|<a href='catalog_add.php?id={$id}'>增加子类</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
//独立页面
else if($ispart==2)
{
echo " <tr height='24' bgcolor='#FBFCE2'>\r\n";
echo " <td width='2%' class='bline2'><img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'></td>\r\n";
echo " <td class='bline2'><table width='98%' border='0' cellspacing='0' cellpadding='0'><tr><td width='50%'><input class='np' type='checkbox' name='tids[]' value='{$id}'><a href='catalog_edit.php?id=".$id."' oncontextmenu=\"SingleMenu(event,this,$id,'".urlencode($typeName)."')\">{$nss}".$typeName."[ID:".$id."]</a> <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"><img src='images/write2.gif'/></a>";
echo " </td><td align='right'>";
echo "<a href='{$typeDir}' target='_blank'>预览</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
echo " <tr><td colspan='2' id='suns".$id."'>";
$lastid = GetCookie('lastCid');
if($channel==$id || $lastid==$id || isset($GLOBALS['exallct']) || $cfg_admin_channel=='array')
{
echo " <table width='100%' border='0' cellspacing='0' cellpadding='0'>\r\n";
$this->GetSecondType($id," ");
echo " </table>\r\n";
}
echo "</td></tr>\r\n</table>\r\n";
}
}
需要添加的方法,我是加到上一个方法下面了,其实是只要是在这个文件内都可以,别加到别的方法里面就行
/**
* 获得有权限的二级类目
*
* @access public
* @param int $id 栏目ID
* @param string $step 层级标志
* @return void
*/
function GetSecondType($id, $step)
{
global $cfg_admin_channel, $admin_catalogs;
if($cfg_admin_channel=='array')
{
$admin_catalog = join(',', $admin_catalogs);
$this->dsql->SetQuery("SELECT reid,topid,id FROM `#@__arctype` WHERE id in($admin_catalog) ");
$this->dsql->Execute();
$secidstr = '';
while($row = $this->dsql->GetObject())
{
if($row->topid==$row->reid){
$secidstr .=($secidstr=='' ? $row->id : ','.$row->id);
} else{
$secidstr .= ($secidstr=='' ? $row->reid : ','.$row->reid);
}
}
$admin_catalog = $secidstr;
$admin_catalogs2 = explode(',', $admin_catalog);
$admin_catalogs2 = array_unique($admin_catalogs2);
}
$this->dsql->SetQuery("SELECT id,typedir,typename,ispart,sortrank,ishidden FROM `#@__arctype` WHERE reid=topid AND topid='".$id."' order by sortrank");
$this->dsql->Execute($id);
while($row = $this->dsql->GetObject($id))
{
if( $cfg_admin_channel=='array' && !in_array($row->id, $admin_catalogs2) )
{
continue;
}
$typeDir = $row->typedir;
$typeName = $row->typename;
$reid = $row->reid;
$id = $row->id;
$ispart = $row->ispart;
if($step==" ")
{
$stepdd = 2;
}
else
{
$stepdd = 3;
}
$rank = $row->sortrank;
if($row->ishidden=='1')
{
$nss = "<font color='red'>[隐]</font>";
}
else
{
$nss = '';
}
//普通列表
if($ispart==0)
{
echo "<tr height='24' oncontextmenu=\"CommonMenu(event,this,$id,'".urlencode($typeName)."')\">\r\n";
echo "<td class='nbline'>";
echo "<table width='98%' border='0' cellspacing='0' cellpadding='0'>";
echo "<tr onMouseMove=\"javascript:this.bgColor='#FAFCE0';\" onMouseOut=\"javascript:this.bgColor='#FFFFFF';\"><td width='50%'>";
echo "<input class='np' type='checkbox' name='tids[]' value='{$id}'>$step <img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'> <a href='catalog_do.php?cid=".$id."&dopost=listArchives'>{$nss}".$typeName."[ID:".$id."]</a>(文档:".$this->GetTotalArc($id).") <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"><img src='images/write2.gif'/></a>";
echo "</td><td align='right'>";
echo "<a href='{$GLOBALS['cfg_phpurl']}/list.php?tid={$id}' target='_blank'>预览</a>";
echo "|<a href='catalog_do.php?cid={$id}&dopost=listArchives'>内容</a>";
echo "|<a href='catalog_add.php?id={$id}'>增加子类</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
//封面频道
else if($ispart==1)
{
echo " <tr height='24' oncontextmenu=\"CommonMenu(event,this,$id,'".urlencode($typeName)."')\">\r\n";
echo "<td class='nbline'><table width='98%' border='0' cellspacing='0' cellpadding='0'><tr onMouseMove=\"javascript:this.bgColor='#FAFCE0';\" onMouseOut=\"javascript:this.bgColor='#FFFFFF';\"><td width='50%'>";
echo "<input class='np' type='checkbox' name='tids[]' value='{$id}'>$step <img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'> <a href='catalog_do.php?cid=".$id."&dopost=listArchives'>{$nss}".$typeName."[ID:".$id."]</a> <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"><img src='images/write2.gif'/></a>";
echo "</td><td align='right'>";
echo "<a href='{$GLOBALS['cfg_phpurl']}/list.php?tid={$id}' target='_blank'>预览</a>";
echo "|<a href='catalog_do.php?cid={$id}&dopost=listArchives'>内容</a>";
echo "|<a href='catalog_add.php?id={$id}'>增加子类</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
//独立页面
else if($ispart==2)
{
echo "<tr height='24' oncontextmenu=\"SingleMenu(event,this,$id,'".urlencode($typeName)."')\">\r\n";
echo "<td class='bline2'><table width='98%' border='0' cellspacing='0' cellpadding='0'>";
echo "<tr onMouseMove=\"javascript:this.bgColor='#FAFCE0';\" onMouseOut=\"javascript:this.bgColor='#FFFFFF';\"><td width='50%'>";
echo "<input class='np' type='checkbox' name='tids[]' value='{$id}'>$step <img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'> <a href='catalog_do.php?cid=".$id."&dopost=listArchives'>{$nss}".$typeName."[ID:".$id."]</a> <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"><img src='images/write2.gif'/></a>";
echo "</td><td align='right'>";
echo "<a href='{$typeDir}' target='_blank'>预览</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
echo " <tr><td id='suns".$id."' style='display:none'><table width='100%' border='0' cellspacing='0' cellpadding='0'>";
$this->LogicListAllSunType($id,$step." ");
echo "</table></td></tr>\r\n";
}
}
简单来说,修改之前织梦只确定了二级栏目有权限的顶级栏目,把三级栏目有权限的顶级栏目忽视了,所以在第一个方法里用topid替换reid进行查询,来保证三级栏目的顶级栏目也能够被输出,然后再增加第二个方法保证有需要输出的三级栏目的二级栏目的输出,之后就可以正常迭代输出三级及以下子栏目了。
是个比较笨的解决办法,而且也只能到三级,不过基本够用,记录下来也方便之后改进,说起来php什么的我就看了个基本语法额。。。改来改去的累死宝宝了
因为上面的方法会偶尔抽风,超级管理员栏目显示不全之类的,所以改版了一下
只要把function ListAllType($channel=0,$nowdir=0)修改一下就可以了,增加的function GetSecondType($id, $step)方法可以不要了
然后修改后的function ListAllType($channel=0,$nowdir=0)如下,绿色为与之前不同的部分:
/**
* 读出所有分类,在类目管理页(list_type)中使用
*
* @access public
* @param int $channel 频道ID
* @param int $nowdir 当前操作ID
* @return string
*/
function ListAllType($channel=0,$nowdir=0)
{
global $cfg_admin_channel, $admin_catalogs;
$this->dsql = $GLOBALS['dsql'];
//检测用户有权限的顶级栏目
if($cfg_admin_channel=='array')
{
$admin_catalog = join(',', $admin_catalogs);
$this->dsql->SetQuery("SELECT topid,id FROM `#@__arctype` WHERE id in($admin_catalog) group by topid ");
$this->dsql->Execute();
$topidstr = '';
while($row = $this->dsql->GetObject())
{
if($row->topid==0) continue;
$topidstr .= ($topidstr=='' ? $row->topid : ','.$row->topid);
}
$admin_catalog .= ','.$topidstr;
$admin_catalogs = explode(',', $admin_catalog);
$admin_catalogs = array_unique($admin_catalogs);
$admin_catalog2 = join(',', $admin_catalogs);
$this->dsql->SetQuery("SELECT reid,topid,id FROM `#@__arctype` WHERE id in($admin_catalog2)");
$this->dsql->Execute();
$secidstr = '';
while($row = $this->dsql->GetObject())
{
if($row->reid==0) continue;
$secidstr .= ($secidstr=='' ? $row->reid : ','.$row->reid);
}
$admin_catalog2 .= ','.$secidstr;
$admin_catalogs = explode(',', $admin_catalog2);
$admin_catalogs = array_unique($admin_catalogs);
}
$this->dsql->SetQuery("SELECT id,typedir,typename,ispart,sortrank,ishidden FROM `#@__arctype` WHERE reid=0 order by sortrank");
$this->dsql->Execute(0);
while($row = $this->dsql->GetObject(0))
{
if( $cfg_admin_channel=='array' && !in_array($row->id, $admin_catalogs) )
{
continue;
}
$typeDir = $row->typedir;
$typeName = $row->typename;
$ispart = $row->ispart;
$id = $row->id;
$rank = $row->sortrank;
if($row->ishidden=='1')
{
$nss = "<font color='red'>[隐]</font>";
}
else
{
$nss = '';
}
echo "<table width='100%' border='0' cellspacing='0' cellpadding='2'>\r\n";
//普通列表
if($ispart==0)
{
echo " <tr>\r\n";
echo " <td style='background-color:#FBFCE2;' width='2%' class='bline'><img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'></td>\r\n";
echo " <td style='background-color:#FBFCE2;' class='bline'><table width='98%' border='0' cellspacing='0' cellpadding='0'><tr><td width='50%'><input class='np' type='checkbox' name='tids[]' value='{$id}'><a href='catalog_do.php?cid=".$id."&dopost=listArchives' oncontextmenu=\"CommonMenu(event,this,$id,'".urlencode($typeName)."')\">{$nss}".$typeName."[ID:".$id."]</a>(文档:".$this->GetTotalArc($id).") <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"><img src='images/write2.gif'/></a>";
echo " </td><td align='right'>";
echo "<a href='{$GLOBALS['cfg_phpurl']}/list.php?tid={$id}' target='_blank'>预览</a>";
echo "|<a href='catalog_do.php?cid={$id}&dopost=listArchives'>内容</a>";
echo "|<a href='catalog_add.php?id={$id}'>增加子类</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
//带封面的频道
else if($ispart==1)
{
echo " <tr >\r\n";
echo " <td style='background-color:#FBFCE2;' width='2%' class='bline'><img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'></td>\r\n";
echo " <td style='background-color:#FBFCE2;' class='bline'><table width='98%' border='0' cellspacing='0' cellpadding='0'><tr><td width='50%'><input class='np' type='checkbox' name='tids[]' value='{$id}'><a href='catalog_do.php?cid=".$id."&dopost=listArchives' oncontextmenu=\"CommonMenuPart(event,this,$id,'".urlencode($typeName)."')\">{$nss}".$typeName."[ID:".$id."]</a> <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"> <img src='images/write2.gif'/> </a>";
echo " </td><td align='right'>";
echo "<a href='{$GLOBALS['cfg_phpurl']}/list.php?tid={$id}' target='_blank'>预览</a>";
echo "|<a href='catalog_do.php?cid={$id}&dopost=listArchives'>内容</a>";
echo "|<a href='catalog_add.php?id={$id}'>增加子类</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
//独立页面
else if($ispart==2)
{
echo " <tr height='24' bgcolor='#FBFCE2'>\r\n";
echo " <td width='2%' class='bline2'><img style='cursor:pointer' id='img".$id."' onClick=\"LoadSuns('suns".$id."',$id);\" src='images/dedeexplode.gif' width='11' height='11'></td>\r\n";
echo " <td class='bline2'><table width='98%' border='0' cellspacing='0' cellpadding='0'><tr><td width='50%'><input class='np' type='checkbox' name='tids[]' value='{$id}'><a href='catalog_edit.php?id=".$id."' oncontextmenu=\"SingleMenu(event,this,$id,'".urlencode($typeName)."')\">{$nss}".$typeName."[ID:".$id."]</a> <a onclick=\"AlertMsg('快捷编辑窗口','$id');\" href=\"javascript:;\"><img src='images/write2.gif'/></a>";
echo " </td><td align='right'>";
echo "<a href='{$typeDir}' target='_blank'>预览</a>";
echo "|<a href='catalog_edit.php?id={$id}'>更改</a>";
echo "|<a href='catalog_do.php?dopost=moveCatalog&typeid={$id}'>移动</a>";
echo "|<a href='catalog_del.php?id={$id}&typeoldname=".urlencode($typeName)."'>删除</a>";
echo " <input type='text' name='sortrank{$id}' value='{$rank}' style='width:25px;height:20px'></td></tr></table></td></tr>\r\n";
}
echo " <tr><td colspan='2' id='suns".$id."'>";
$lastid = GetCookie('lastCid');
if($channel==$id || $lastid==$id || isset($GLOBALS['exallct']) || $cfg_admin_channel=='array')
{
echo " <table width='100%' border='0' cellspacing='0' cellpadding='0'>\r\n";
$this->LogicListAllSunType($id," ");
echo " </table>\r\n";
}
echo "</td></tr>\r\n</table>\r\n";
}
}