无限级分类迭代方法的编辑操作方法
2010年3月19日
| 标签:
无限级分类使用迭代的方法时,在显示编辑页面的时候,需要将编辑的分类所对应的本身及其所有子分类从分类列表中清楚,该代码的edit动作即完成此工作。同时还加入了css控制的显示效果。
- /*
- * 迭代sql查询,生成无限级分类树
- * 数据结构
- CREATE TABLE `cat` (
- `cid` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
- `cname` VARCHAR(50) NOT NULL,
- `lev` INT(5) UNSIGNED NOT NULL COMMENT '分类层数',
- `pid` INT(5) UNSIGNED NOT NULL COMMENT '上级cid',
- PRIMARY KEY (`cid`)
- )
- */
- error_reporting(7);
- mysql_connect("localhost", "hfphp", "hfphp");
- mysql_select_db("test");
- mysql_query("set names utf8");
- $act = $_GET['act'];
- if($act == "edit") {
- $edited_cid = intval($_GET['cid']);
- if(empty($edited_cid)) {
- //出错提示
- die("cid is not empty");
- }
- $query = "select * from cat where cid='$edited_cid'";
- $res = mysql_query($query);
- $edited_cat = @mysql_fetch_assoc($res);
- $okArr = array();//保存目录树的数组
- $pid = 0;
- getCat($pid);
- ?>
- <form method="post" action="cat.php?act=insert">
- 分类名:<input type="text" name="cname"/><br /><br />
- 所属分类:<select name="cid">
- <option value="0">根目录</option>
- < ?php
- $jump = false;
- foreach($okArr as $row) {
- if($row['cid'] == $edited_cid) {
- $jump = true;//跳过开关打开
- continue;
- }elseif($row['lev'] <= $edited_cat['lev']) {
- /*
- * 根据迭代结果数组的分类顺序
- * 只要当前循环分类记录的lev等级小于等于所编辑的分类,即跳过阶段结束
- */
- $jump = false;//跳过开关关闭
- }
- if($jump == false) {
- echo "<option value='".$row['cid']."'>";
- for($i=1;$i< $row['lev'];$i++) {
- echo " ";
- }
- echo $row['cname'];
- echo "</option>";
- }
- }
- ?>
- </select><br /><br />
- <input type="submit" name="提交"/>
- </form>
- < ?php
- }elseif($act == "insert") {
- $cname = trim($_POST['cname']);
- $pid = intval($_POST['cid']);
- $query = "select * from cat where cid='$pid'";
- $res = mysql_query($query);
- $row = @mysql_fetch_assoc($res);
- $parent_lev = $row['lev'];
- $query = "insert into cat set cname='$cname',lev='".($parent_lev+1)."',pid='$pid'";
- mysql_query($query);
- echo "<script>alert('增加新分类成功');";
- echo "location.href='".$_SERVER['PHP_SELF']."';";
- die;
- }else{
- $okArr = array();//保存目录树的数组
- $pid = 0;
- getCat($pid);
- ?>
- <h2>目录树</h2>
- <style>
- div{margin:2px;border:1px solid gray;padding:5px;}
- </style>
- <script src="jquery-1.3.2.min.js"></script>
- <script>
- function display(cid) {
- if($(".dd"+cid).css("display") == "block") {
- $(".dd"+cid).css("display", "none");
- $("#btn"+cid).val("查看子分类");
- }else{
- $(".dd"+cid).css("display", "block");
- $("#btn"+cid).val("收起子分类");
- }
- }
- </script>
- < ?php
- //debug
- $lastLev = 0;//上一个分类的层级
- $classArr = array();//div的class数组,按层级计算
- foreach($okArr as $row) {
- echo "<div ";
- if($row['lev'] > $lastLev){//debug
- $classArr[$row['pid']] = 1;
- }elseif($row['lev'] < = $lastLev) {
- for($i=0;$i<($lastLev - $row['lev']);$i++) {//关键*减去当前层级与上一次层级间的多余class
- array_pop($classArr);
- }
- }
- echo " class='dd".str_replace(" ", " dd", implode(" ", array_keys($classArr)))."' ";
- $lastLev = $row['lev'];
- if($row['lev'] != 1) {
- echo "style='display:none;'";
- }
- echo ">";
- //多层级的占位符
- for($i=1;$i< $row['lev'];$i++) {
- echo " ";
- }
- echo $row['cname'].',lev:'.$row['lev'];
- echo " <a href='".$_SERVER['PHP_SELF']."?act=edit&cid=".$row['cid']."' style='font-size:12px;color:red;'>编辑";
- echo " <input type='button' id='btn".$row['cid']."' onclick='display(".$row['cid'].");' value='查看子分类'/>";
- echo "";
- }
- echo "<hr />";
- echo "<h4>创建新分类</h4>";
- ?>
- <form method="post" action="<?php echo($_SERVER['PHP_SELF']);?>?act=insert">
- 分类名:<input type="text" name="cname"/><br /><br />
- 所属分类:<select name="cid">
- <option value="0">根目录</option>
- < ?php
- foreach($okArr as $row) {
- echo "<option value='".$row['cid']."'>";
- for($i=1;$i< $row['lev'];$i++) {
- echo " ";
- }
- echo $row['cname'];
- echo "</option>";
- }
- ?>
- </select><br /><br />
- <input type="submit" name="提交"/>
- </form>
- < ?php
- }
- function getCat($pid) {
- global $okArr, $n;
- $sql = "select * from cat where pid='$pid'";
- $res = mysql_query($sql);
- while($row = @mysql_fetch_assoc($res)) {
- if(!empty($row)) {
- $okArr[] = $row;
- getCat($row['cid']);
- }
- }
- }
发表评论
| Trackback
