让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();

}

注明:本文为星速云原创版权所有,禁止转载,一经发现将追究版权责任!

(0)
上一篇 2022年5月30日 上午3:56
下一篇 2022年5月30日 上午3:57

相关推荐

发表评论

登录后才能评论
问答社区 QQ客服
微信客服
微信客服
分享本页
返回顶部