您的位置:首页 > 其它

dedecms联动类别管理 联动枚举不能添加二级选择三级添加异常

2015-07-23 14:45 369 查看
dede官方提供的联动类别不能添加二级联动。在dedecmsV5.7中添加一二级分类没有出现任何错误,但是,当添加三级分类后,再次添加一级二级

分类就出现错误,一级二级分类分别变成二级三级了。

BUG修复方法如下。

1.打开dede/stepselect_main.php 文件,找到215行至290行。并将其替换为以下代码:

else if($action=='addenum_save') 



  if(empty($ename) || empty($egroup))  

  { 

         Showmsg("类别名称或组名称不能为空!","-1"); 

         exit(); 

    } 

    if($issign == 1 || $topvalue == 0) 

    { 

        $enames = explode(',', $ename); 

        foreach($enames as $ename) 

        { 

            $arr = $dsql->GetOne("SELECT * FROM `dede_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`dede_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 `dede_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("#([0-9]{1,})\.([0-9]{1,})#", $arr['evalue'], $matchs); 

                $addvalue = $matchs[2] + 1; 

                $addvalue = sprintf("%03d", $addvalue); 

                $evalue = $matchs[1].'.'.$addvalue; 

            } 

            $sql = "INSERT INTO`dede_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)  

                                    VALUES('$ename','$evalue','$egroup','$disorder','$issign'); "; 

            // echo $sql;exit;  

            $dsql->ExecuteNoneQuery($sql);  

        } 

        // echo $minid;  

        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 `dede_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 `dede_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`) 

                                 values('$ename','$evalue','$egroup','$disorder','$issign'); "); 

       } 

       WriteEnumsCache($egroup); 

   ShowMsg("成功添加枚举分类!".$issign, $ENV_GOBACK_URL); 

   exit(); 

 } 



2.打开dede/templets/stepselect_main.htm文件。

找到

if($topvalue % 500 != 0) $arr['issign'] = 2;

修改为

if($topvalue % 500 != 0) $arr['issign'] = 3;

if($topvalue % 500 == 0) $arr['issign'] = 2;

以上这样修改后1,2,3 联动能添加,再4级就不行了。因为这里的标记只判断到3,dedecms织梦也最多能添加3级联动。基本足够用了。

注意::数据表的名字要替换成#@__ 这里是两个下划线
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: