完善 无限极分类 的 无刷新编辑
参考网址
http://www.56gee.com/demoshow/8aeb74e423/?tdsourcetag=s_pcqq_aiomsg
最终效果
我是 如何和 数据库 建立连接的
html 页面中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="56gee 39℃" />
<meta name="ComeFrom" content="www.56gee.com" />
<script src="/tpl/default/static/js/jquery-2.2.3.min.js"></script>
<script src="/tpl/default/static/js/bootstrap.js"></script>
<title>Jquery实现无限极树状结构并动态添加增删改等编辑功能——56gee</title>
<style type="text/css">
div, ul, li {
margin: 0px;
padding: 0px;
list-style-type: none;
}
body {
background-color: #FFFFFF;
font-size: 12px;
margin: 0px;
padding: 0px;
}
#TreeList {
background-color: #FFFFFF;
margin-top: 6px;
margin-right: auto;
margin-bottom: 6px;
margin-left: auto;
border: 1px solid #5d7b96;
padding-bottom: 6px;
padding-left: 6px;
width: 680px;
}
#TreeList .mouseOver {
background-color: #FAF3E2;
}
#TreeList .ParentNode {
line-height: 21px;
height: 21px;
margin-top: 2px;
clear: both;
}
#TreeList .ChildNode {
background-image: url(../demoImgs/Sys_ModuleIcos.png);
/*background-image: url('/tpl/default/static/images/duigou.jpg');*/
background-position: 15px -58px;
padding-left: 39px;
line-height: 21px;
background-repeat: no-repeat;
border-top-width: 0px;
border-right-width: 0px;
border-bottom-width: 1px;
border-left-width: 0px;
border-top-style: dashed;
border-right-style: dashed;
border-bottom-style: dashed;
border-left-style: dashed;
border-top-color: #aabdce;
border-right-color: #aabdce;
border-bottom-color: #aabdce;
border-left-color: #aabdce;
cursor: default;
clear: both;
height: 21px;
color: #314f6a;
}
#TreeList .title {
float: left;
}
#TreeList .input {
font-size: 12px;
line-height: 18px;
color: #FFF;
height: 16px;
background-color: #3F6B8F;
width: 120px;
text-align: center;
margin-top: 1px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
border-top-color: #1F3547;
border-right-color: #FFF;
border-bottom-color: #FFF;
border-left-color: #1F3547;
float: left;
}
#TreeList .editBT {
float: left;
overflow: visible;
}
#TreeList .editBT .ok {
/*background-image: url('/tpl/default/static/images/duigou.jpg');*/
background-image: url(/tpl/default/static/images/duigou.png);
/*background-image: url(../demoImgs/Sys_ModuleIcos.png);*/
background-repeat: no-repeat;
background-position: 0px -89px;
height: 13px;
width: 12px;
float: left;
margin-left: 3px;
padding: 0px;
margin-top: 3px;
cursor: pointer;
}
#TreeList .editBT .cannel {
background-image: url(../demoImgs/Sys_ModuleIcos.png);
background-repeat: no-repeat;
background-position: 0px -120px;
float: left;
height: 13px;
width: 12px;
margin-left: 3px;
padding: 0px;
margin-top: 3px;
cursor: pointer;
}
#TreeList .editArea {
float: right;
color: #C3C3C3;
cursor: pointer;
margin-right: 6px;
}
#TreeList .editArea span {
margin: 2px;
}
#TreeList .editArea .mouseOver {
color: #BD4B00;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
border-top-color: #C9925A;
border-right-color: #E6CFBB;
border-bottom-color: #E6CFBB;
border-left-color: #C9925A;
background-color: #FFFFFF;
margin: 0px;
padding: 1px;
}
#TreeList .ParentNode .title {
color: #314f6a;
cursor: pointer;
background-image: url(../demoImgs/Sys_ModuleIcos.png);
background-repeat: no-repeat;
padding-left: 39px;
}
#TreeList .ParentNode.show .title {
font-weight: bold;
background-position: 3px -27px;
}
#TreeList .ParentNode.hidden .title {
background-position: 3px 4px;
}
#TreeList .ParentNode .editArea {
color: #999;
}
#TreeList .ParentNode.show {
background-color: #d1dfeb;
border-top-width: 0px;
border-right-width: 0px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
border-top-color: #5d7b96;
border-right-color: #5d7b96;
border-bottom-color: #5d7b96;
border-left-color: #5d7b96;
}
#TreeList .ParentNode.hidden {
border-top-width: 0px;
border-right-width: 0px;
border-bottom-width: 1px;
border-left-width: 0px;
border-top-style: dashed;
border-right-style: dashed;
border-bottom-style: dashed;
border-left-style: dashed;
border-top-color: #aabdce;
border-right-color: #aabdce;
border-bottom-color: #aabdce;
border-left-color: #aabdce;
}
#TreeList .Row {
clear: both;
margin-left: 24px;
background-image: url(../demoImgs/Sys_ModuleIcos2.png);
background-repeat: repeat-y;
background-position: 7px 0px;
}
</style>
<script type="text/javascript" src="/js/jquery-1.5.min.js"></script>
<script type="text/javascript">
$(document).ready(function(e) {
var TreeName = 'TreeList';//树状ID
var PrentNodeClass = 'ParentNode';//父节点的标识
var ChildNodeClass = 'ChildNode';//没有下级子节点的标识
var ChildrenListClass = 'Row';//子节点被包着的外层样式
var NewNodeName = '新建目录';//默认新建节点的名称
var Orititle = 'Temptitle';//保存原来名称的属性名称
var TModuleNode,TChildNode,TModuleNodeName;
TModuleNode = $('#TreeList .'+PrentNodeClass);//顶层节点
TChildNode = $('.'+ChildNodeClass);
TModuleNodeName = $('#TreeList .' + PrentNodeClass + ' .title');//顶层节点名称
TModuleNode.removeClass('show').addClass('hidden');
if(TModuleNode.next().hasClass(ChildrenListClass)){
TModuleNode.next().css('display','none');//紧跟的下一个是子节点
}
//========================编辑区域的HTML源码==============================
function EditHTML(NewName){
var str = '<div class="title">' + NewName + '</div>';
str += '<div class="editBT"></div>';
str += '<div class="editArea"><span>[编辑]</span><span>[添加同级目录]</span><span>[添加下级目录]</span><span>[删除]</span></div>';
return str;
}
//==========================树状展开收缩的效果============================
TModuleNodeName.click(function(){
TModuleNodeName_Click($(this));
});
//-------------------------------(定义)----------------------------------
function TModuleNodeName_Click(Obj){
if(Obj.has('input').length==0){ //非编辑模式下进行
var tempNode = Obj.parent();
if(tempNode.hasClass('hidden')){
tempNode.removeClass('hidden').addClass('show');
if(tempNode.next().hasClass(ChildrenListClass)){
tempNode.next().css('display','');
}
}
else{
tempNode.removeClass('show').addClass('hidden');
if(tempNode.next().hasClass(ChildrenListClass)){
tempNode.next().css('display','none');
}
}
}
}
//==========================鼠标经过、离开节点的效果============================
with(TModuleNode){
mouseover(function(){
TNode_MouseOver($(this));
});
mouseout(function(){
TNode_MouseOut($(this));
});
}
with(TChildNode){
mouseover(function(){
TNode_MouseOver($(this));
});
mouseout(function(){
TNode_MouseOut($(this));
});
}
//-------------------------------(定义)----------------------------------
function TNode_MouseOver(Obj){
if(!(Obj.hasClass('show'))){
Obj.addClass('mouseOver');
}
}
function TNode_MouseOut(Obj){
Obj.removeClass('mouseOver');
}
//==========================编辑区操作============================
$('.editArea').each(function(){ //1.编辑,删除什么第一步都先走这个。。$(this) 是指当前的对象,也就是
EditArea_Event($(this));
});
//-------------------------------(定义)----------------------------------
function EditArea_Event(Obj){ //Obj这个是当前编辑的对象 <input type="text" class="input" value="测试模块">
var objParent = Obj.parent(); //是父节点
var objTitle = objParent.find('.title');//节点名称
//-----------------编辑区的鼠标效果------------------
Obj.children().each(function(){
with($(this)){
mouseover(function(){
$(this).addClass('mouseOver');
});
mouseout(function(){
$(this).removeClass('mouseOver');
});
}
});
//--------------------第一步,判断是哪个操作-----------------------------
Obj.children().each(function(index, element) {
$(this).click(function(){
// index 是数字,element 是对应的html元素
if($('#TreeList').has('input').length==0){
switch(index){
case 0: EditNode(objTitle,objTitle.html());break;//编辑
case 1: AddNode(0,objParent,NewNodeRename(0,objTitle));break;//添加同级目录
case 2: AddNode(1,objParent,NewNodeRename(1,objTitle));break;//添加下级目录
case 3: DelNode(objParent);break;//删除
}
}
else{
alert('请先取消编辑状态!');
}
});
});
}
//************************************************************************************************************
//************************************************************************************************************
//===============================验证编辑结果================================
function CheckEdititon(pNode,text){
var SameLevelTags = new Array(PrentNodeClass,ChildNodeClass);
var SameLevelTag = '';
for(var i=0;i<SameLevelTags.length;i++){
if(pNode.parent().attr('class').indexOf(SameLevelTags[i]) > -1){
SameLevelTag = SameLevelTags[i];
break;
}
}
if(SameLevelTag!=''){
if(text!=''){
//---------------- 根据节点样式遍历同级节点 --------------------
var IsExsit = false;
pNode.parent().parent().children('div').children('.title').each(function(){
if(pNode.find('input').val()==$(this).html()){
IsExsit = true;
alert('抱歉!同级已有相同名称!');
return false;
}
});
return !IsExsit;
}
else{
alert('不能为空!');
return false;
}
}
}
//=================================自动命名================================
function NewNodeRename(tag,pNode){
//---------------- 根据节点样式遍历同级节点 --------------------
var MaxNum = 0;
var TObj;
if(tag==0){//添加同级目录
if(pNode.attr('id')==TreeName){
TObj = pNode.children('div').children('.title');
}
else{
TObj = pNode.parent().parent().children('div').children('.title');
}
var dataid =TObj.attr('data_id'); // 添加同级时候有
}
else{ //添加下级目录
var aaa = pNode.parent().next().html();
// if(pNode.parent().next().html()!=null){//原来已有子节点
if(aaa.indexOf('编辑') != -1){//原来已有子节点
TObj = pNode.parent().next().children('div').children('.title');
// alert(1);
// console.log(TObj);
}
else{//没有子节点
// TObj = null;
// alert(2);
TObj = pNode.parent().children('div').children('.title');
// var dataid = TObj.parent().find('.title').attr('data_id');
// var dataid = TObj.prevObject.find('.title').attr('data_id');
var arr = TObj.prevObject[0]; // html
var arr1 = $(arr); // 转化成jquery
var dataid = arr1.attr('data_id'); // 我这获取的是data_id
// alert(arr1.attr('data_id'));
}
}
if(TObj){
TObj.each(function(){
var CurrStr = $(this).html();
var temp;
if(CurrStr.indexOf(NewNodeName)>-1){
temp = parseInt(CurrStr.replace(NewNodeName,''));
if(!isNaN(temp)){
if(!(temp<MaxNum)){
MaxNum = temp + 1;
}
}
else{
MaxNum = 1;
}
}
});
}
// var dataidxiaji =TObj.parent().find('.title').attr('data_id'); // 取的点击添加同级目录时,同一结构的第一个div的id
// console.log(dataid);
var TempNewNodeName = NewNodeName;
if(MaxNum>0){
TempNewNodeName += MaxNum;
}
var array = TempNewNodeName+'=='+dataid;
// return TempNewNodeName; // 新建目录名称
return array; // 新建目录名称加id
}
//=============================== 第二步是确定编辑还是取消 编辑定义 ================================
function EditNode(obj,text){
// alert(obj.attr('data_id')); // 得到id
obj.attr(Orititle,text);//将原来的text保存到Orititle中, text是原来模块操作的名字
obj.html("<input type='text' class=input value=" + text + ">"); //切换成编辑模式
obj.parent().find('.editBT').html("<div class=ok title=确定></div><div class=cannel title=取消></div>");
obj.has('input').children().first().focusEnd();//聚焦到编辑框内
// 点击确定点击取消,触发的操作
obj.parent().find('.ok').click(function(){
Edit_OK(obj);
});
obj.parent().find('.cannel').click(function(){
Edit_Cannel(obj);
});
}
//=============================== 添加节点 目录================================
function AddNode(tag,obj,NameStr){
arr = NameStr.split("==");
NameStr = arr[0]; // 这就是 自动命名的 新建目录,
id = arr[1]; // 我获取的是同一级的第一个id,
// alert('添加节点');
// 现在添加同级是获取的同级的第一个id,添加下级的是获取的当前id
if(tag==0 || tag==1){
var newNode = $('<div class=' + ChildNodeClass + '></div>');
if(tag==0){ //添加同级目录
newNode.appendTo(obj.parent());
}
else{ //添加下级目录
if(!(obj.next()) || (obj.next().attr('class')!=ChildrenListClass)){//最后一个节点和class!=ChildrenListClass都表示没有子节点
var ChildrenList = $('<div class=' + ChildrenListClass + '></div>');
ChildrenList.insertAfter(obj);//将子节点的”外壳“加入到对象后面
newNode.appendTo(ChildrenList);//将子节点加入到”外壳“内
}
else{
newNode.appendTo(obj.next());//将子节点加入到”外壳“内
}
obj.attr('class',PrentNodeClass + ' show');//**父节点展开状态模式
obj.next().css('display','');//展开子节点列表
}
with(newNode){
html(EditHTML(NameStr)); // 这是用来显示编辑框的好像
//---------------------------------动态添加事件-------------------------------
mouseover(function(){
TNode_MouseOver($(this));
});
mouseout(function(){
TNode_MouseOut($(this));
});
find('.title').click(function(){
TModuleNodeName_Click($(this));
});
find('.editArea').each(function(){
EditArea_Event($(this));
});
//---------------------------------------------------------------------------
}
// 点击添加目录时,输入的名字就是传过去的
// 调的 EditNode 方法,走编辑状态,这是第一种方法,把默认名字存进数据库再点击编辑进行修改新目录名称
// EditNode(newNode.find('.title'),newNode.find('.title').html());//添加后自动切换到编辑状态
// 这是第二种方法,直接把用户输入的目录名存进数据库
var obj2 = newNode.find('.title');
var text = newNode.find('.title').html();
obj2.attr(Orititle,text);//将原来的text保存到Orititle中, text是原来模块操作的名字
obj2.html("<input type='text' class=input value=" + text + ">"); //切换成编辑模式
obj2.parent().find('.editBT').html("<div class=ok title=确定></div><div class=cannel title=取消></div>");
obj2.has('input').children().first().focusEnd();//聚焦到编辑框内
console.log(obj2);
// alert(obj.attr('data_id')); // 得到id
// 点击确定点击取消,触发的操作
obj2.parent().find('.ok').click(function(){
// alert('ok');
var tempText = obj2.has('input').children().first().val(); // 文本内容
// var id = obj.attr('data_id'); // 编辑操作的id
// alert(tempText);
$.ajax({
url:'ewm-xuqiu_add333',
type:'POST',
data:{
pid : id, // 根据判断tag来决定传过来的id做父id还是它是子id
name: tempText, // 默认名字 新建目录
tag:tag, // 判断是添加同级目录还是下级目录
},
dataType:'json',
success:function(data){
// console.log(data);
if(data.code == '3'){
alert('添加分类成功');
// alert('data.id');
}
if(data.code == '4'){
alert('添加分类失败');
}
// location.reload(true);
},
error:function(data){
// console.log(data);
// alert('添加失败');
}
})
// 原先的js样式
if(CheckEdititon(obj2,tempText)){
obj2.html(tempText);
}
else{
obj2.html(obj2.attr(Orititle));
}
obj2.removeAttr(Orititle);
obj2.parent().find('.editBT').html('');
});
obj.parent().find('.cannel').click(function(){
// Edit_Cannel(obj);
});
}
}
//=============================== [删除]按钮 ================================
function DelNode(obj){ // 这个obj 是editarea的父节点 editarea父节点的find 发现 class等于title的标签,然后在取在这个标签的data_id 属性
// console.log(obj);
if(confirm('确定要删除吗?')){
var objParent = obj.parent();
var objChildren = obj.next('.Row');
// var id = objParent.attr('data_id');
var id = obj.find('.title').attr('data_id'); //节点名称
$.ajax({
url:'ewm-xuqiu_delete333',
type:'POST',
data:{
id : id,
},
dataType:'json',
success:function(data){
// alert(111);
console.log(data);
if(data.code == '3'){
alert('删除分类成功');
}
if(data.code == '4'){
alert('删除分类失败');
}
if(data.code == '5'){
alert('模块下操作不能空,不能删除');
}
// location.reload(true);
},
error:function(data){
alert(222);
console.log(data);
}
})
// 原来js样式
obj.remove();//基于Jquery是利用析构函数,所以“删除”后其相关属性仍然存在,除非针对ID来操作就可以彻底删除
objChildren.remove();//删除对象所有子节点
ChangeParent(objParent);
}
}
//===============================第3步 确定编辑操作 编辑[确定]按钮 ================================
function Edit_OK(obj){
var tempText = obj.has('input').children().first().val(); // 文本内容
var id = obj.attr('data_id'); // 编辑操作的id
$.ajax({
url:'ewm-xuqiu_update333',
type:'POST',
data:{
name : tempText,
id : id,
},
dataType:'json',
success:function(data){
// console.log(data);
if(data.code == '3'){
// alert('编辑成功');
}
if(data.code == '4'){
alert('编辑失败');
}
// location.reload(true);
},
error:function(data){
alert('编辑失败');
}
})
// 原先的js样式
if(CheckEdititon(obj,tempText)){
obj.html(tempText);
}
else{
obj.html(obj.attr(Orititle));
}
obj.removeAttr(Orititle);
obj.parent().find('.editBT').html('');
}
//=============================== 编辑[取消]按钮 ================================
function Edit_Cannel(obj){
obj.html(obj.attr(Orititle));
obj.removeAttr(Orititle);
obj.parent().find('.editBT').html('');
}
//=============================== 改变父节点样式 ================================
function ChangeParent(obj){
if(obj.find('.ChildNode').length==0){//没有子节点
obj.prev('.'+PrentNodeClass).attr('class',ChildNodeClass);
obj.remove();
}
}
//************************************************************************************************************
//************************************************************************************************************
//************************************************************************************************************
//=============================== 设置聚焦并使光标设置在文字最后 ================================
$.fn.setCursorPosition = function(position){
if(this.lengh == 0) return this;
return $(this).setSelection(position, position);
}
$.fn.setSelection = function(selectionStart, selectionEnd) {
if(this.lengh == 0) return this;
input = this[0];
if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
} else if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(selectionStart, selectionEnd);
}
return this;
}
$.fn.focusEnd = function(){
this.setCursorPosition(this.val().length);
}
//=========================================================================================
});
</script>
<link href="/DemoShow/styles/public.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="TopAD"></div>
<div id="TopADCode" style="display:none">
<script type="text/javascript" >BAIDU_CLB_SLOT_ID = "772619";</script>
<script type="text/javascript" src="http://cbjs.baidu.com/js/o.js"></script>
</div>
<script type="text/javascript">
if(document.getElementById('TopAD')!=null){
document.getElementById('TopAD').innerHTML = '<div class="SearchEngine_AD1">' + document.getElementById('TopADCode').innerHTML + '</div>';
}
</script>
<div id="AD_B"></div>
<div id="TreeList">
<{foreach $commlist as $data}>
<{foreach $data.children as $child}>
<div class="ParentNode hidden">
<!-- <div class="title" id="dataid" data_id="<{$child.id}>"><{$child.name}></div> -->
<div class="title" data_id="<{$child.id}>"><{$child.name}></div>
<div class="editBT"></div>
<div class="editArea" id="<{$child.id}>"><span>[编辑]</span><span>[添加同级目录]</span><span>[添加下级目录]</span><span>[删除]</span></div>
</div>
<div class="Row" style="display:none">
<{foreach $child.children as $grandson}>
<div class="ParentNode">
<div class="title" data_id="<{$grandson.id}>"><{$grandson.name}></div>
<div class="editBT"></div>
<div class="editArea" id="<{$grandson.id}>"><span >[编辑]</span><span>[添加同级目录]</span><span>[添加下级目录]</span><span>[删除]</span></div>
</div>
<div class="Row" style="display:none">
<{foreach $grandson.children as $grandsonson}>
<div class="ChildNode">
<div class="title" data_id="<{$grandsonson.id}>"><{$grandsonson.name}></div>
<div class="editBT"></div>
<div class="editArea" id="<{$grandsonson.id}>"><span>[编辑]</span><span>[添加同级目录]</span><span>[添加下级目录]</span><span>[删除]</span></div>
</div>
<{/foreach}>
</div>
<{/foreach}>
</div>
<{/foreach}>
<{/foreach}>
</div>
<div id="AD_T"></div>
<div id="ADCode_B" style="display:none">
<script src="/js/sogouad/AD_468-15.js" type="text/javascript"></script>
<script language='JavaScript' type='text/javascript' src='http://images.sohu.com/cs/jsfile/js/l.js'></script>
</div>
<div id="ADCode_T" style="display:none">
<script type="text/javascript" >BAIDU_CLB_SLOT_ID = "772426";</script>
<script type="text/javascript" src="http://cbjs.baidu.com/js/o.js"></script>
</div>
<script type="text/javascript" >BAIDU_CLB_SLOT_ID = "772399";</script>
<script type="text/javascript" src="http://cbjs.baidu.com/js/o.js"></script>
<script type="text/javascript" src="/js/ad_alliance/ad_alliance.js"></script>
</body>
</html>
第2种页面,以 - 格式展示下级目录
请选择父级分类:<select name="pid" size="20">
<option value="0">根分类</option>
{volist name="alist" id="vo"}
<option value="{$vo['id']}">
// 统计有几个 - 页面就显示几个 —
{:str_repeat("__",$vo['count']-2)}
{$vo['name']}
</option>
{/volist}
</select><br />
新的分类名称:<input type="text" name="name" /><br />
<input type="submit" value="添加分类" />
</form>
控制器中
第一种方法,以 - 递进格式展示的html页面
public function xuqiu()
{
$list = K::M('code/xuqiu')->chaxun555();
// var_dump($result);
foreach($list as $key=>$value){
$list[$key]['count']=count(explode('-',$value['bpath']));
}
// die;
$this->pagedata['alist'] = $list;
$this->tmpl = 'xuqiu_add.html';
}
public function xuqiu_list()
{
$list = K::M('code/xuqiu')->chaxun555();
foreach($list as $key=>$value){
$list[$key]['count']=count(explode('-',$value['bpath']));
}
$this->pagedata['alist'] = $list;
$this->tmpl = 'xuqiu_list.html';
}
public function xuqiu_add()
{
echo '<pre>';
$pid = $this->GP('pid'); // pid是新添加数据的id
$name = $this->GP('name');
// 执行添加操作
$list = K::M('code/xuqiu')->add555($pid,$name);
if($list)
{
$this->err->add('添加分类成功', 201);
}else{
$this->err->add('添加分类失败', 201);
}
// var_dump($list);
// die;
$this->tmpl = 'xuqiu_add.html';
}
// 应该是 ajax 删除
public function xuqiu_delete()
{
echo '<pre>';
$url = $this->request['uri'];
$url = explode('=',$url);
$id = $url[1];
$result = K::M('code/xuqiu')->chaxun222('pid',$id);
// var_dump($result);
// die;
if($result)
{
$this->err->add('模块下操作不能空,不能删除', 201);
}else{
$list = K::M('code/xuqiu')->delete('id',$id);
// 设置有子类的情况下不能删除
if($list)
{
$this->err->add('删除分类成功', 201);
}else{
$this->err->add('删除分类失败', 201);
}
}
$this->tmpl = 'xuqiu_list222.html';
}
// 第2 种方法,是 栏目层级的展示页面
public function xuqiu333()
{
echo '<pre>';
$list = K::M('code/xuqiu')->chaxun555();
// $a = $this->array2level($list); // 这个有level字段
$b = $this->arr2tree($list); // 展示出树级结构,chilren,遍历显示在页面
$this->pagedata['commlist'] = $b;
$this->tmpl = 'xuqiu_list222.html';
}
public function xuqiu_add222()
{
// echo '<pre>';
$name = $this->GP('name');
$pid = $this->GP('id');
$list = K::M('code/xuqiu')->addfenlei($pid,$name);
// 返回json数据给前台
$returnData = json_encode($list,JSON_UNESCAPED_UNICODE);
// return $returnData;
echo $returnData; // 只有echo才打印信息,如果是return就返回信息为空,格式正确,但是走error
exit;
}
public function xuqiu_delete222()
{
// echo '<pre>';
$id = $this->GP('id');
$a = K::M('code/xuqiu')->deletefenlei($id);
$returnData = json_encode($a,JSON_UNESCAPED_UNICODE);
echo $returnData;
exit;
}
// level 数据的展示
function array2level($array, $pid = 0, $level = 1)
{
static $list = [];
foreach ($array as $v)
{
if ($v['pid'] == $pid)
{
$v['level'] = $level;
$list[] = $v;
$this->array2level($array, $v['id'], $level + 1);
}
}
return $list;
}
// tree 数据的展示
function arr2tree($tree, $rootId = 0,$level=1)
{
$return = array();
foreach($tree as $leaf)
{
if($leaf['pid'] == $rootId)
{
$leaf["level"] = $level;
foreach($tree as $subleaf)
{
if($subleaf['pid'] == $leaf['id'])
{
$leaf['children'] = $this->arr2tree($tree, $leaf['id'],$level+1); break;
}
}
$return[] = $leaf;
}
}
return $return;
}
// 第三种
// 把增加同级目录,下级目录修改成,输入名字之后就存数据库
public function xuqiu_update333()
{
// echo '<pre>';
$name = $this->GP('name');
$pid = $this->GP('id');
$data['name'] = $name;
$list = K::M('code/xuqiu')->update($pid,$data,true);
if($list)
{
$returnData = ['code'=>3, 'info'=>'编辑成功'];
}else{
$returnData = ['code'=>4, 'info'=>'编辑失败'];
}
$returnData = json_encode($returnData,JSON_UNESCAPED_UNICODE);
echo $returnData; // 只有echo才打印信息,如果是return就返回信息为空,格式正确,但是走error
exit;
// die;
}
public function xuqiu_delete333()
{
// echo '<pre>';
$id = $this->GP('id');
// var_dump($id);
// die;
$a = K::M('code/xuqiu')->deletefenlei($id);
$returnData = json_encode($a,JSON_UNESCAPED_UNICODE);
echo $returnData;
exit;
}
public function xuqiu_add333()
{
// 添加同级目录,就是添加id 的同pid =pid
// 添加下级目录,就是pid=id
// 添加同级还是下级 tag=0 添加同级 tag=1 添加下级
echo '<pre>';
$pid = $this->GP('pid'); // pid是新添加数据的id,当添加的是下级目录时,提示$pid没有定义
$name = $this->GP('name');
$tag = $this->GP('tag');
var_dump($pid);
// 执行添加操作
$list = K::M('code/xuqiu')->add666($pid,$name,$tag);
// die;
// var_dump($pid);
// var_dump($name);
// var_dump($tag);
// die;
$returnData = json_encode($list,JSON_UNESCAPED_UNICODE);
echo $returnData; // 只有echo才打印信息,如果是return就返回信息为空,格式正确,但是走error
exit;
}