最新IT

destoon二次开发之添加无限极联动字段类型

destoon可以定义的字段类型有限,偶尔满足不了个性化的需求,在开发行业网站时偶尔有另类的需求.需要一个字段:可以模块之间通用,项系统分类和地区一样可以查询子类数据,可以无限极联动

模块之间通用

后台管理

defined('DT_ADMIN') or exit('Access Denied'); $keyid or $keyid = 1; $linkAGE = cache_read('linkage-'.$keyid.'.php'); $parentid = isset($parentid) ? intval($parentid) : 0; require DT_ROOT.'/admin/linkage.class.php'; $linkageid = isset($linkageid) ? intval($linkageid) : 0; $parentid = isset($parentid) ? intval($parentid) : 0; $do = new linkage($keyid,$linkageid); $table = $DT_PRE.'linkage'; $menus = array ( array('添加菜单', '?file='.$file.'&action=add&keyid='.$keyid.'&parentid='.$parentid), array('管理菜单', '?file='.$file.'&keyid='.$keyid), array('更新缓存', '?file='.$file.'&action=caches&keyid='.$keyid), ); switch($action) { case 'add': if($submit) { // print_r($linkage);die; if(!$linkage['linkagename']) msg('菜单名不能为空'); $linkage['linkagename'] = trim($linkage['linkagename']); $childs = ''; $linkageids = array(); if(strpos($linkage['linkagename'], "\n") === false) { $linkage['linkagedir'] = $do->get_linkagedir($linkage['linkagedir']); $do->add($linkage); $childs .= ','.$do->linkageid; $linkageids[] = $do->linkageid; } else { $linkagenames = explode("\n", $linkage['linkagename']); foreach($linkagenames as $linkagename) { $linkagename = trim($linkagename); if(!$linkagename) continue; $linkage['linkagename'] = $linkagename; $linkage['linkagedir'] = ''; $linkage['letter'] = ''; $do->add($linkage); $childs .= ','.$do->linkageid; $linkageids[] = $do->linkageid; } } if($linkage['parentid']) { $parents = array(); $cid = $linkage['parentid']; $parents[] = $cid; while(1) { if($linkAGE[$cid]['parentid']) { $parents[] = $cid = $linkAGE[$cid]['parentid']; } else { break; } } foreach($parents as $linkageid) { $arrchildid = $linkAGE[$linkageid]['child'] ? $linkAGE[$linkageid]['arrchildid'].$childs : $linkageid.$childs; $db->query("UPDATe {$table} SET child=1,arrchildid='$arrchildid' WHERe linkageid=$linkageid"); } } // foreach($linkageids as $linkageid) { // $linkAGE[$linkageid] = $db->get_one("SELECT * FROM {$table} WHERe linkageid=$linkageid"); // update_linkage($linkAGE[$linkageid]); // } $NUM > 500 ? $do->cache() : $do->repair(); dmsg('添加成功', '?file='.$file.'&keyid='.$keyid.'&parentid='.$linkage['parentid']); } else { include tpl('linkage_add'); } break; case 'edit': $linkageid or msg(); if($submit) { if(!$category['linkagename']) msg('菜单名不能为空'); if($category['parentid'] == $linkageid) msg('上级菜单不能与当前菜单相同'); $do->edit($category); $category['linkageid'] = $linkageid; update_category($category); $NUM > 500 ? $do->cache() : $do->repair(); dmsg('修改成功', '?file='.$file.'&keyid='.$keyid.'&parentid='.$category['parentid']); } else { extract($db->get_one("SELECT * FROM {$table} WHERe linkageid=$linkageid")); include tpl('category_edit'); } break; case 'caches': msg('开始更新', "?file=$file&keyid=$keyid&action=letters"); break; case 'letters': $update = false; foreach($linkAGE as $k=>$v) { if(strlen($v['letter']) != 1) { $letter = $do->get_letter($v['linkagename'], false); if($letter) { $update = true; $letter = substr($letter, 0, 1); $db->query("UPDATE {$table} SET letter='$letter' WHERe linkageid='$v[linkageid]'"); } } } msg('索引修复成功', "?file=$file&keyid=$keyid&action=cache"); break; case 'cache': $do->repair(); dmsg('缓存更新成功', '?file='.$file.'&keyid='.$keyid); break; case 'delete': if($linkageid) $linkageids = $linkageid; $linkageids or msg('请选择菜单'); $do->delete($linkageids); $NUM > 500 ? $do->cache() : $do->repair(); dmsg('删除成功', $forward); break; case 'update': if(!$linkage || !is_array($linkage)) msg(); $do->update($linkage); foreach($linkage as $linkageid=>$v) { $linkAGE[$linkageid] = $db->get_one("SELECT * FROM {$table} WHERe linkageid=$linkageid"); update_linkage($linkAGE[$linkageid]); } $NUM > 500 ? $do->cache() : $do->repair(); dmsg('更新成功', '?file='.$file.'&keyid='.$keyid.'&parentid='.$parentid); break; case 'letter': isset($linkagename) or $linkagename = ''; if(!$linkagename || strpos($linkagename, "\n") !== false) exit(''); exit($do->get_letter($linkagename, false)); break; default: $total = 0; $DTAGE = array(); $condition = "keyid=$keyid"; $condition .= $keyword ? " AND linkagename LIKE '%$keyword%'" : " AND parentid=$parentid"; $result = $db->query("SELECT * FROM {$table} WHERe $condition ORDER BY listorder,linkageid"); while($r = $db->fetch_array($result)) { $r['childs'] = substr_count($r['arrchildid'], ','); $total += $r['item']; $DTAGE[$r['linkageid']] = $r; } if(!$DTAGE && !$parentid && !$keyword) msg('暂无菜单,请先添加', '?file='.$file.'&keyid='.$keyid.'&action=add&parentid='.$parentid); include tpl('linkage'); break; }

本文链接:http://www.zhualeng.com/it/show-38933.html

相关推荐