在DedeCMS 5.7版本中,许多用户在使用联动菜单时遇到了无法添加二级分类的问题,这通常由于源码中的一个BUG导致,只能成功添加一级和三级分类,而二级分类的添加却受到了限制,以下是解决这一问题的方法:
修改dede/stepselect_main.php
文件
1、定位问题代码:
打开dede/stepselect_main.php
文件,找到以下代码段:
“`php
else if($action==’addenum_save’)
{
if(emptyempty($ename) || emptyempty($egroup))
{
Showmsg("类别名称或组名称不能为空!","1");
exit();
}
if($issign == 1 || $topvalue == 0)
{
$enames = explode(‘,’, $ename);
foreach($enames as $ename)
{
$arr = $dsql>GetOne("SELECT * FROM#@__sys_enum
WHERE egroup=’$egroup’ AND (evalue MOD 500)=0 ORDER BY disorder DESC ");
if(!is_array($arr)) $disorder = $evalue = ($issign==1 ? 1 : 500);
else $disorder = $evalue = $arr[‘disorder’] + ($issign==1 ? 1 : 500);
$dsql>ExecuteNoneQuery("INSERT INTO#@__sys_enum
(ename
,evalue
,egroup
,disorder
,issign
)
VALUES(‘$ename’,’$evalue’,’$egroup’,’$disorder’,’$issign’); ");
}
WriteEnumsCache($egroup);
ShowMsg("成功添加枚举分类!".$dsql>GetError(), $ENV_GOBACK_URL);
exit();
} else if ($issign == 3 && $topvalue != 0)
{
$minid = $topvalue;
$maxnum = 500; // 三级子类最多500个
$enames = explode(‘,’, $ename);
foreach ($enames as $ename)
{
$arr = $dsql>GetOne("SELECT * FROM#@__sys_enum
WHERE egroup=’$egroup’ AND evalue LIKE ‘$topvalue.%%%’ ORDER BY evalue DESC ");
if(!is_array($arr))
{
$disorder = $minid;
$evalue = $minid.’.001′;
}
else
{
$disorder = $minid;
preg_match("#([09]{1,}).([09]{1,})#", $arr[‘evalue’], $matchs);
$addvalue = $matchs[2] + 1;
$addvalue = sprintf("%03d", $addvalue);
$evalue = $matchs[1].’.’.$addvalue;
}
$sql = "INSERT INTO#@__sys_enum
(ename
,evalue
,egroup
,disorder
,issign
)
VALUES(‘$ename’,’$evalue’,’$egroup’,’$disorder’,’$issign’); ";
$dsql>ExecuteNoneQuery($sql);
}
WriteEnumsCache($egroup);
ShowMsg("成功添加枚举分类!".$issign, $ENV_GOBACK_URL);
exit();
} else {
$minid = $topvalue;
$maxid = $topvalue + 500;
$enames = explode(‘,’, $ename);
foreach($enames as $ename)
{
$arr = $dsql>GetOne("Select * From#@__sys_enum
where egroup=’$egroup’ And evalue>$minid And evalue<$maxid order by evalue desc ");
if(!is_array($arr))
{
$disorder = $evalue = $minid+1;
}
else
{
$disorder = $arr[‘disorder’]+1;
$evalue = (int)($arr[‘evalue’]+1);
}
$dsql>ExecuteNoneQuery("Insert into#@__sys_enum
(ename
,evalue
,egroup
,disorder
,issign
) values(‘$ename’,’$evalue’,’$egroup’,’$disorder’,’$issign’); ");
}
WriteEnumsCache($egroup);
ShowMsg("成功添加枚举分类!".$issign, $ENV_GOBACK_URL);
exit();
}
}
“`
2、进行代码修改:
将上述代码中的第14行和第28行分别修改为:
“`php
if(!is_array($arr)) $disorder = $evalue = ($issign==1 ? 1 : 500);
“`
改为:
“`php
if(!is_array($arr)) $disorder = $evalue = ($issign==1 ? 1 : 500) 1;
“`
以及:
“`php
if(!is_array($arr))
{
$disorder = $minid;
$evalue = $minid.’.001′;
}
“`
改为:
“`php
if(!is_array($arr))
{
$disorder = $minid 1;
$evalue = $minid.’.001′;
}
“`
3、保存并更新缓存:
保存对dede/stepselect_main.php
文件的修改,然后在系统后台更新系统缓存,这样,在后台的联动类别管理中就可以正常添加二级选择了。
修改dede/templets/stepselect_main.htm
文件
1、定位问题代码:
打开dede/templets/stepselect_main.htm
文件,找到以下代码段:
“`php
if($topvalue % 500 != 0) $arr[‘issign’] = 2;
“`
2、进行代码修改:
将上述代码修改为:
“`php
if($topvalue % 500 != 0) $arr[‘issign’] = 3;
if($topvalue % 500 == 0) $arr[‘issign’] = 2;
“`
3、保存并更新缓存:
保存对dede/templets/stepselect_main.htm
文件的修改,然后在系统后台更新系统缓存,这样,在后台的联动类别管理中就可以正常添加二级选择了。
通过以上步骤,可以有效解决DedeCMS 5.7中无法添加二级联动菜单的问题,如果仍有其他疑问或遇到新的问题,建议参考官方文档或社区论坛获取更多帮助。
Dede联动菜单无法添加二级选择的解决方法
1. 问题分析
在DedeCMS中,当尝试添加二级选择到联动菜单时,可能遇到无法添加的情况,这通常是由于以下几个原因造成的:
配置问题:后台配置设置不正确。
代码错误:模板或插件代码中存在错误。
数据库问题:数据库中的数据结构或数据存在问题。
2. 解决步骤
步骤一:检查后台配置
1、登录DedeCMS后台。
2、进入“系统设置” > “系统参数”。
3、确认“启用联动菜单”选项是否被勾选。
4、检查“联动菜单数据缓存时间”设置是否合理。
步骤二:检查模板代码
1、打开包含联动菜单的模板文件。
2、检查模板中调用联动菜单的代码是否符合DedeCMS的规范。
3、确认模板中的联动菜单代码没有错误。
步骤三:检查插件或自定义代码
1、如果使用了第三方插件或自定义代码,检查这些代码是否与联动菜单有冲突。
2、确认插件或自定义代码的版本与DedeCMS版本兼容。
步骤四:检查数据库
1、登录数据库管理工具。
2、检查联动菜单相关数据表的结构是否正确。
3、确认数据表中包含所有必要的字段和数据。
步骤五:重置联动菜单缓存
1、进入DedeCMS后台。
2、选择“系统设置” > “缓存管理”。
3、找到联动菜单缓存,并清除。
3. 验证与测试
1、保存所有更改后,刷新网站前端页面。
2、尝试再次添加二级选择到联动菜单。
3、如果问题仍然存在,可能需要进一步检查或寻求技术支持。
4. 归纳
通过上述步骤,通常可以解决DedeCMS联动菜单无法添加二级选择的问题,如果问题依旧存在,可能需要更深入的技术分析或寻求专业的技术支持。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1135585.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复