让dedecms联动模型支持dede_sys_enum的father字段自动追加


对dede_sys_enum添加father字段,实现目的:在添加联动分类时,自动添加father的值。以500为分类界限。即:503的父类(father)为503,1001的father为1000。   主要修改的文件 stepselect_main.php文件。    解决: 修改有三处。   1.主要添加内容: $father = intval(floor($evalue/500))*500;  

  2.修改内容: $sql = “INSERT INTO `dede58_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`,`father`)                                 VALUES(‘$ename’,’$evalue’,’$egroup’,’$disorder’,’$issign’,’$father’); “;   <?php   /**   * 联动选择管理   *   * @version        $Id: stepselect_main.php 2 13:23 2011-3-24 tianya $   * @package        DedeCMS.Administrator   * @copyright      Copyright (c) 2007 – 2010, DesDev, Inc.   * @license        http://help.dedecms.com/usersguide/license.html   * @link           http://www.dedecms.com   */   require_once(dirname(__FILE__).”/config.php”);   CheckPurview(‘c_Stepselect’);   require_once(DEDEINC.”/datalistcp.class.php”);   require_once(DEDEINC.’/enums.func.php’);   /*—————–  前台视图  function __show() { }  ——————*/   $ENV_GOBACK_URL = (isset($ENV_GOBACK_URL) ? $ENV_GOBACK_URL : ‘stepselect_main.php’);   if(empty($action))   {       setcookie(“ENV_GOBACK_URL”,$dedeNowurl,time()+3600,”/”);       if(!isset($egroup)) $egroup = ”;       if(!isset($topvalue)) $topvalue = 0;       $etypes = array();       $egroups = array();       $dsql->Execute(‘me’,’SELECT * FROM `dede58_stepselect` ORDER BY id DESC’);       while($arr = $dsql->GetArray())       {           $etypes[] = $arr;           $egroups[$arr[‘egroup’]] = $arr[‘itemname’];       }          if($egroup!=”)       {           $orderby = ‘ORDER BY disorder ASC, evalue ASC’;           if(!empty($topvalue))           {               // 判断是否为1级联动               if ($topvalue % 500 == 0)               {                   $egroupsql = ” WHERE egroup LIKE ‘$egroup’ AND evalue>=$topvalue AND evalue < “.($topvalue + 500);               } else {                    $egroupsql = ” WHERE (evalue LIKE ‘$topvalue.%%%’ OR evalue=$topvalue) AND egroup LIKE ‘$egroup'”;               }           }           else           {               $egroupsql = ” WHERE egroup LIKE ‘$egroup’ “;           }           $sql = “SELECT * FROM `dede58_sys_enum` $egroupsql $orderby”;       } else {           $egroupsql = ”;           $sql = “SELECT * FROM `dede58_stepselect` ORDER BY id DESC”;       }       //echo $sql;exit;       $dlist = new DataListCP();       $dlist->SetParameter(‘egroup’,$egroup);       $dlist->SetParameter(‘topvalue’,$topvalue);       $dlist->SetTemplet(DEDEADMIN.”/templets/stepselect_main.htm”);       $dlist->SetSource($sql);       $dlist->display();       exit();   }   else if($action==’edit’ || $action==’addnew’ || $action==’addenum’ || $action==’view’)   {       AjaxHead();       include(‘./templets/stepselect_showajax.htm’);       exit();   }   /*—————–  删除类型或枚举值  function __del() { }  ——————*/   else if($action==’del’)   {       $arr = $dsql->GetOne(“SELECT * FROM `dede58_stepselect` WHERE id=’$id’ “);       if(!is_array($arr))       {           ShowMsg(“无法获取分类信息,不允许后续操作!”, “stepselect_main.php?”.ExecTime());           exit();       }       if($arr[‘issystem’]==1)       {           ShowMsg(“系统内置的枚举分类不能删除!”, “stepselect_main.php?”.ExecTime());           exit();       }       $dsql->ExecuteNoneQuery(“DELETE FROM `dede58_stepselect` WHERE id=’$id’; “);       $dsql->ExecuteNoneQuery(“DELETE FROM `dede58_sys_enum` WHERE egroup='{$arr[‘egroup’]}’; “);       ShowMsg(“成功删除一个分类!”, “stepselect_main.php?”.ExecTime());       exit();   }   else if($action==’delenumAllSel’)   {       if(isset($ids) && is_array($ids))       {           $id = join(‘,’, $ids);              $groups = array();           $dsql->Execute(‘me’, “SELECT egroup FROM `dede58_sys_enum` WHERE id IN($id) GROUP BY egroup”);           while($row = $dsql->GetArray(‘me’))           {               $groups[] = $row[‘egroup’];           }              $dsql->ExecuteNoneQuery(“DELETE FROM `dede58_sys_enum` WHERE id IN($id); “);              //更新缓存           foreach($groups as $egropu)            {               WriteEnumsCache($egroup);           }              ShowMsg(“成功删除选中的枚举分类!”, $ENV_GOBACK_URL);       }       else       {           ShowMsg(“你没选择任何分类!”, “-1”);       }       exit();   }   else if($action==’delenum’)   {       $row = $dsql->GetOne(“SELECT egroup FROM `dede58_sys_enum` WHERE id = ‘$id’ “);       $dsql->ExecuteNoneQuery(“DELETE FROM `dede58_sys_enum` WHERE id='{$id}’; “);       WriteEnumsCache($row[‘egroup’]);       ShowMsg(“成功删除一个枚举!”, $ENV_GOBACK_URL);       exit();   }   /*—————–  保存类型修改  function __edit_save() { }  ——————*/   else if($action==’edit_save’)   {       if(preg_match(“#[^0-9a-z_-]#i”, $egroup))       {           ShowMsg(“组名称不能有全角字符或特殊符号!”,”-1″);           exit();       }       $dsql->ExecuteNoneQuery(“UPDATE `dede58_stepselect` SET `itemname`=’$itemname’,`egroup`=’$egroup’ WHERE id=’$id’; “);       ShowMsg(“成功修改一个分类!”, “stepselect_main.php?”.ExecTime());       exit();   }   /*—————–  保存新类型  function __addnew_save() { }  ——————*/   else if($action==’addnew_save’)   {       if(preg_match(“#[^0-9a-z_-]#i”, $egroup))       {           ShowMsg(“组名称不能有全角字符或特殊符号!”, “-1”);           exit();       }       $arr = $dsql->GetOne(“SELECT * FROM `dede58_stepselect` WHERE itemname LIKE ‘$itemname’ OR egroup LIKE ‘$egroup’ “);       if(is_array($arr))       {           ShowMsg(“你指定的类别名称或组名称已经存在,不能使用!”,”stepselect_main.php”);           exit();       }       $dsql->ExecuteNoneQuery(“INSERT INTO `dede58_stepselect`(`itemname`,`egroup`,`issign`,`issystem`) VALUES(‘$itemname’,’$egroup’,’0′,’0′); “);       WriteEnumsCache($egroup);       ShowMsg(“成功添加一个分类!”,”stepselect_main.php?egroup=$egroup”);       exit();   }   /*———  把旧版全国省市表替换当前地区数据  function __exarea() { }  ———-*/   else if($action==’exarea’)   {       $bigtypes = array();       $dsql->ExecuteNoneQuery(“DELETE FROM `dede58_sys_enum` WHERE egroup=’nativeplace’; “);       $query = “SELECT * FROM `dede58_area` WHERE reid =0 order by id asc”;       $dsql->Execute(‘me’, $query);       $n = 1;       while($row = $dsql->GetArray())       {           $bigtypes[$row[‘id’]] = $evalue = $disorder = $n * 500;           $dsql->ExecuteNoneQuery(“INSERT INTO `dede58_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)                                    VALUES(‘{$row[‘name’]}’,’$evalue’,’nativeplace’,’$disorder’,’0′); “);           $n++;                                       }       $stypes = array();       foreach($bigtypes as $k=>$v)       {           $query = “SELECT * FROM `dede58_area` WHERE reid=$k order by id asc”;           $dsql->Execute(‘me’, $query);           $n = 1;           while($row = $dsql->GetArray())           {               $stypes[$row[‘id’]] = $evalue = $disorder = $v + $n;               $dsql->ExecuteNoneQuery(“INSERT INTO `dede58_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)                                      VALUES(‘{$row[‘name’]}’,’$evalue’,’nativeplace’,’$disorder’,’0′); “);               $n++;            }       }       WriteEnumsCache(‘nativeplace’);       ShowMsg(“成功导入所有旧的地区数据!”, “stepselect_main.php?egroup=nativeplace”);       exit();   }   /*——————–  function __addenum_save() { }  关于二级枚举的说明,为了节省查询速度,二级枚举是通过特殊算法生成的,原理为  凡是能被 500 整除的都是一级枚举,(500 * n) + 1 < em < 500 * (n+1) 为下级枚举  如:1000 的下级枚举对应的值为 1001,1002,1003…1499  对于 issign=1 的,表示这个类别只有一级枚举,则不受上面的算法限制  ————————————————————————  更新算法:  新增二级枚举下添加”-N”自己类别选择,例如:  1001二级枚举下面的3级类目,则为1001-1,1001-2…  这时候需要issign=2  ———————*/   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 `dede58_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);                   $father = intval(floor($evalue/500))*500;               $dsql->ExecuteNoneQuery(“INSERT INTO `dede58_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`,`father`)                                        VALUES(‘$ename’,’$evalue’,’$egroup’,’$disorder’,’$issign’,’$father’); “);            }           WriteEnumsCache($egroup);                                                                     ShowMsg(“成功添加枚举分类!”.$dsql->GetError(), $ENV_GOBACK_URL);           exit();       } else if ($issign == 2 && $topvalue != 0)       {           $minid = $topvalue;           $maxnum = 500; // 三级子类最多500个           $enames = explode(‘,’, $ename);           foreach ($enames as $ename)           {               $arr = $dsql->GetOne(“SELECT * FROM `dede58_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;               }                $father = intval(floor($evalue/500))*500;               $sql = “INSERT INTO `dede58_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`,`father`)                                        VALUES(‘$ename’,’$evalue’,’$egroup’,’$disorder’,’$issign’,’$father’); “;               // echo $sql;exit;               $dsql->ExecuteNoneQuery($sql);            }           // echo $minid;           WriteEnumsCache($egroup);           ShowMsg(“成功添加枚举分类!”, $ENV_GOBACK_URL);           exit();       } else {           $minid = $topvalue;           $maxid = $topvalue + 500;           $enames = explode(‘,’, $ename);           foreach($enames as $ename)           {               $arr = $dsql->GetOne(“SELECT * FROM `dede58_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 = $arr[‘evalue’]+1;               }                $father = intval(floor($evalue/500))*500;               $dsql->ExecuteNoneQuery(“INSERT INTO `dede58_sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`,`father`)                              VALUES(‘$ename’,’$evalue’,’$egroup’,’$disorder’,’$issign’,’$father’); “);           }           WriteEnumsCache($egroup);           ShowMsg(“成功添加枚举分类!”, $ENV_GOBACK_URL);           exit();       }   }   /*—————–  修改枚举名称和排序  function __upenum() { }  ——————*/   else if($action==’upenum’)   {       $ename = trim(preg_replace(“# └─(─){1,}#”, ”, $ename));       $row = $dsql->GetOne(“SELECT egroup FROM `dede58_sys_enum` WHERE id = ‘$aid’ “);       WriteEnumsCache($row[‘egroup’]);       $dsql->ExecuteNoneQuery(“UPDATE `dede58_sys_enum` SET `ename`=’$ename’,`disorder`=’$disorder’ WHERE id=’$aid’; “);       ShowMsg(“成功修改一个枚举!”, $ENV_GOBACK_URL);       exit();   }   /*—————–  更新枚举缓存  function __upallcache() { }  ——————*/   else if($action==’upallcache’)   {       if(!isset($egroup)) $egroup = ”;       WriteEnumsCache($egroup);       ShowMsg(“成更新枚举缓存!”, $ENV_GOBACK_URL);       exit();   }