PHP+MYSQL实现无限级分类管理
一,前言
很多知识用到时总是不太把握,往往都得要上网找资料查一番。
将一些实用的资料收藏在这里,作备忘之用。本贴随时会更新。
皆为学习。
简述:结合TP【Thinkphp】,功能简单,文章末尾提供附件下载.
代码上....
后台控制
class IndexAction extends Action
{
public function index(){
$this->assign('title','hi.xiaohan-ixiaohan.com');
$this->display();
}
/**
* 函数:level
* 功能:level页面初始化
* 简介:
* 时间:2011年7月19日9:43:40
* 作者:by zhjp
* Enter description here ...
*/
public function level(){
$this->assign('title','hi.xiaohan-level');
$category=M('Category');
$sql="
SELECT l.id,l.fid,l.`name`,l.`level`
FROM ixh_category AS l
ORDER BY l.`level`
";
$levelInfo=$category->query($sql);
foreach ($levelInfo as $k=>$v){
$ln=strlen($v['level'])/3;
$pre='';
for($i=0; $i
$pre.='—';
}
$levelInfo[$k]['name']='|'.$pre.''.$levelInfo[$k]['name'];
}
//dump($levelInfo);
$this->assign('levelOption',$levelInfo);
$this->display();
}
/**
* 函数:addLevel
* 功能:添加分类
* 简介:
* 时间:2011年7月19日9:42:06
* 作者:by zhjp
* Enter description here ...
*/
public function addLevel(){
$category=M('Category');
$data['name']=$_REQUEST['name'];
$data['fid']=isset($_REQUEST['fid']) ? $_REQUEST['fid'] : 0;
$data['level']=$this->creatLevel($data['fid']);
if($iid=$category->add($data)){
$this->ajaxReturn('成功添加记录,ID='.$iid,'success');
}else{
$this->ajaxReturn('添加记录失败','error');
}
}
/**
* 函数:creatLevel
* 功能:构造层级字符串
* 简介:构造层级字符串的目的是为了相关层级关系的排序
* 时间:2011年7月19日9:39:07
* 作者:by zhjp
* Enter description here ...
* @param Int $fid
*/
private function creatLevel($fid){
$category=M('Category');
$sqlI="
SELECT COUNT(c.id) AS cc
FROM ixh_category AS c
WHERE c.fid=$fid
";
$resultI=$category->query($sqlI);
$count=$resultI[0]['cc'];
$count++;
$sqlL="
SELECT c.`level`
FROM ixh_category AS c
WHERE c.id=$fid
";
$resultL=$category->query($sqlL);
if($count<10){
$relevel=$resultL[0]['level'].'00'.$count;
}else if($count<100){
$relevel=$resultL[0]['level'].'0'.$count;
}else if($count<1000){
$relevel=$resultL[0]['level'].$count;
}
return $relevel;
}
}
?>
前台显示
{$title}{$title}
若所添加为一级分类,则不选上级别名
类别名
所属上级
请选择
{$vo.name}
当前层级关系如下图
{$vo.name}
$(document).ready(function(){
$('#add').click(function(){
var name=$('#name').val();
var fid=$('#fid').val();
if(name==''){
$('#resultTips').html('类别名不能为空');
$('#resultTips').fadeIn('7000',function(){
$('#resultTips').fadeOut('3000');
});
return ;
}
$.post('__URL__/addLevel',{'name':name,'fid':fid},function(json){
switch(json.info){
case 'success':
$('#resultTips').html(json.data);
$('#resultTips').fadeIn('7000',function(){
location.reload();
});
break;
case 'error':
$('#resultTips').html(json.data);
$('#resultTips').fadeIn('7000',function(){
$('#resultTips').fadeOut('3000');
});
break;
}
},'json');
});
});
简单脚本【可作为外部文件引入】
$(document).ready(function(){
$('#add').click(function(){
var name=$('#name').val();
var fid=$('#fid').val();
if(name==''){
$('#resultTips').html('类别名不能为空');
$('#resultTips').fadeIn('7000',function(){
$('#resultTips').fadeOut('3000');
});
return ;
}
$.post('__URL__/addLevel',{'name':name,'fid':fid},function(json){
switch(json.info){
case 'success':
$('#resultTips').html(json.data);
$('#resultTips').fadeIn('7000',function(){
location.reload();
});
break;
case 'error':
$('#resultTips').html(json.data);
$('#resultTips').fadeIn('7000',function(){
$('#resultTips').fadeOut('3000');
});
break;
}
},'json');
});
});
数据表设计
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50045
Source Host : localhost:3306
Source Database : db_clele
Target Server Type : MYSQL
Target Server Version : 50045
File Encoding : 65001
Date: 2011-07-18 23:35:59
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `clele_category`
-- ----------------------------
DROP TABLE IF EXISTS `clele_category`;
CREATE TABLE `clele_category` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`fid` int(11) default NULL,
`level` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of clele_category
-- ----------------------------