`
石小阳
  • 浏览: 1557 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

php无限级分类

 
阅读更多

无限级分类,主要从两个方面进行考虑的。

1.数据库的设计,表中的parent_id字段。

2.在程序的层面上,来完成,使用递归。

我们只要理解下面这张图即可了解无限极分类的大部份了,



 

添加分类,首先是要载入添加的表单,确保表单的name和字段一致,首先在view里面创建一个category文件夹在里面将模版放进去,我们先来写add.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>
<title>SHOP 管理中心 - 添加分类 </title>
<meta name="robots" content="noindex, nofollow">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="__ADMIN__/styles/general.css" rel="stylesheet" type="text/css" />
<link href="__ADMIN__/styles/main.css" rel="stylesheet" type="text/css" />
</head>
<body>

<h1>
<span class="action-span"><a href="index.php?p=admin&c=category&a=index">商品分类</a></span>
<span class="action-span1"><a href="index.php?act=main">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 添加分类 </span>
<div style="clear:both"></div>
</h1>
<!-- start add new category form -->
<div class="main-div">
  <form action="" method="post" name="theForm" enctype="multipart/form-data" onsubmit="return validate()">
     <table width="100%" id="general-table">
        <tbody>
            <tr>
                <td class="label">分类名称:</td>
                <td><input type="text" name="cat_name" maxlength="20" value="" size="27"> <font color="red">*</font></td>
            </tr>
            <tr>
                <td class="label">上级分类:</td>
                <td>
                    <select name="parent_id">
                        <option value="0">顶级分类</option>
                        <volist name="cats" id='vo'>
                            <option value="{$vo['cat_id']}">{$vo['cat_name']}</option>
                        </volist>
                    </select>
                </td>
            </tr>

            <tr id="measure_unit">
                <td class="label">数量单位:</td>
                <td><input type="text" name="unit" value="" size="12"></td>
            </tr>
            <tr>
                <td class="label">排序:</td>
                <td><input type="text" name="sort_order" value="50" size="15"></td>
            </tr>

            <tr>
                <td class="label">是否显示:</td>
                <td><input type="radio" name="is_show" value="1" checked="true"> 是<input type="radio" name="is_show" value="0"> 否  </td>
            </tr>
      <tr>
        <td class="label">分类描述:</td>
        <td>
          <textarea name="cat_desc" rows="6" cols="48"></textarea>
        </td>
      </tr>
      </tbody></table>
      <div class="button-div">
        <input type="submit" value=" 确定 ">
        <input type="reset" value=" 重置 ">
      </div>
  </form>
</div>





</div>

</body>
</html>

 这里完成了后,下一步就是开始写CategoryController.class.php控制器里面的add方法了

 

public function add(){
            if(IS_POST){
                //分类信息入库
                $data['cat_name'] = I('cat_name');
                $data['parent_id'] = I('parent_id',0,'int');//parent_id通常是整型,所以做个小处理
                $data['cat_desc'] = I('cat_desc');
                $data['unit'] = I('unit');//数量
                $data['is_show'] = I('is_show');
                $data['sort_order'] = I('sort_order');

                $categoryModel = D('category');
                if($categoryModel->create($data)){
                    //验证通过
                    if($categoryModel->add()){
                        //插入成功
                        $this -> success('分类信息添加成功',U('index'),1);
                    }else{
                        //插入失败
                        $this -> error('分类信息添加失败');
                    }
                }else{
                    //验证失败
                    $this -> error($categoryModel->getError());
                }
                return;
            }
            //载入添加分类页面
            //获取所有的分类
            $cats = M('category')->select();
            $this -> assign('cats',$cats);
            $this -> display();
        }

 

我们做目录树的时候要玩到递归,递归说白了就是让他重复干事情的,给定一个pid,找他的后代节点,找到保存起来。

条件pid等于给定的id。

 

最终目的要成为这样:



 

 

 

 先在model层里面开干

<?php
    //商品分类模型
    namespace Admin\Model;
    use Think\Model;
    class CategoryModel extends Model{
        //自动验证
        protected $_validate = array(
            array('cat_name','require','商品名称不能为空'),
        );

        //定义一个方法,获取树状的分类信息
        public function catTree(){
            $cats = $this->select();
            return $this->tree($cats);
        }

        //定义一个方法,对给定的数组,递归形成树
        public function tree($arr,$pid=0,$level=0){
            static $tree = array();
            foreach($arr as $v){
                if($v['parent_id']==$pid){
                    //说明找到,保存
                    $v['level'] = $level;
                    $tree[] = $v;
                    //继续找
                    $this -> tree($arr,$v['cat_id'],$level+1);
                }
            }
            return $tree;
        }
    }

 然后在控制器下改下他的查询方式,代码如下:

public function add(){
            if(IS_POST){
                //分类信息入库
                $data['cat_name'] = I('cat_name');
                $data['parent_id'] = I('parent_id',0,'int');//parent_id通常是整型,所以做个小处理
                $data['cat_desc'] = I('cat_desc');
                $data['unit'] = I('unit');//数量
                $data['is_show'] = I('is_show');
                $data['sort_order'] = I('sort_order');

                $categoryModel = D('category');
                if($categoryModel->create($data)){
                    //验证通过
                    if($categoryModel->add()){
                        //插入成功
                        $this -> success('分类信息添加成功',U('index'),1);
                    }else{
                        //插入失败
                        $this -> error('分类信息添加失败');
                    }
                }else{
                    //验证失败
                    $this -> error($categoryModel->getError());
                }
                return;
            }
            //载入添加分类页面
            //获取所有的分类
            $cats = D('category')->catTree();
            $this -> assign('cats',$cats);
            $this -> display();
        }

 最后在add.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>
<title>SHOP 管理中心 - 添加分类 </title>
<meta name="robots" content="noindex, nofollow">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="__ADMIN__/styles/general.css" rel="stylesheet" type="text/css" />
<link href="__ADMIN__/styles/main.css" rel="stylesheet" type="text/css" />
</head>
<body>

<h1>
<span class="action-span"><a href="index.php?p=admin&c=category&a=index">商品分类</a></span>
<span class="action-span1"><a href="index.php?act=main">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 添加分类 </span>
<div style="clear:both"></div>
</h1>
<!-- start add new category form -->
<div class="main-div">
  <form action="" method="post" name="theForm" enctype="multipart/form-data" onsubmit="return validate()">
     <table width="100%" id="general-table">
        <tbody>
            <tr>
                <td class="label">分类名称:</td>
                <td><input type="text" name="cat_name" maxlength="20" value="" size="27"> <font color="red">*</font></td>
            </tr>
            <tr>
                <td class="label">上级分类:</td>
                <td>
                    <select name="parent_id">
                        <option value="0">顶级分类</option>
                        <volist name="cats" id='vo'>
                            <option value="{$vo['cat_id']}">{$vo['level']|str_repeat="&nbsp;&nbsp;&nbsp;",###}{$vo['cat_name']}</option>
                        </volist>
                    </select>
                </td>
            </tr>

            <tr id="measure_unit">
                <td class="label">数量单位:</td>
                <td><input type="text" name="unit" value="" size="12"></td>
            </tr>
            <tr>
                <td class="label">排序:</td>
                <td><input type="text" name="sort_order" value="50" size="15"></td>
            </tr>

            <tr>
                <td class="label">是否显示:</td>
                <td><input type="radio" name="is_show" value="1" checked="true"><input type="radio" name="is_show" value="0"></td>
            </tr>
      <tr>
        <td class="label">分类描述:</td>
        <td>
          <textarea name="cat_desc" rows="6" cols="48"></textarea>
        </td>
      </tr>
      </tbody></table>
      <div class="button-div">
        <input type="submit" value=" 确定 ">
        <input type="reset" value=" 重置 ">
      </div>
  </form>
</div>



<div id="footer">
    版权所有 &copy; 2014-2016 夺命雷公狗 - 技术总结 - 
</div>

</div>

</body>
</html>

  • 大小: 30.8 KB
  • 大小: 28.7 KB
分享到:
评论

相关推荐

    php无限级分类 无限级分类

    在PHP开发中,无限级分类是一种常见的数据组织方式,尤其在处理树形结构的数据时,如网站导航菜单、文章分类等。无限级分类允许我们创建一个可以无限深度扩展的分类系统,无需预先设定最大层级。下面我们将深入探讨...

    小贤PHP无限级分类程序

    无限级分类就是可以一直往下分类。 我看过很多网站的无限级分类,大多都是多次循环读取SQL语句,我这次用的是一次循环分类的...小贤PHP无限级分类程序 http://www.myde520.com/down/class.rar http://www.xunbaoke.com/

    小贤PHP无限级分类程序.7z

    这个“小贤PHP无限级分类程序”提供了一个解决方案,让我们来深入探讨这个话题。 无限级分类,顾名思义,就是在数据库或文件系统中,允许类别有任意深度的嵌套。在网站结构中,例如,我们可能有一个主菜单,它下面...

    php 无限级分类的多个方案

    本篇文章将深入探讨几种实现PHP无限级分类的方法,并提供一个带有数据库的示例。 一、递归函数 递归是实现无限级分类的一种基础方法。通过递归调用自身,我们可以遍历整个分类树。通常,递归函数会接收当前分类的...

    php的无限级分类代码

    采用php语言编写的无限级分类程序,使用递归实现的无限极分类!

    php 无限级分类 带分类路径

    PHP作为一门广泛使用的服务器端脚本语言,提供了处理无限级分类的能力,使得我们可以构建出灵活且易于管理的分类系统。下面将详细介绍如何在PHP中实现无限级分类并携带分类路径。 无限级分类通常涉及到树形结构的...

    PHP无限级分类程序

    提供PHP无限级分类程序附带源码!提供下载!经测试可以用!

    PHP 的无限级分类

    以下是对PHP无限级分类技术的详细解释。 **无限级分类的基本概念** 无限级分类通常涉及到自关联的数据库表,即一个分类可以有多个子分类,每个子分类又可以继续有子分类,形成树状结构。这种结构可以有效地存储和...

    PHP无限级分类-非递归

    在PHP编程中,无限级分类是一项常见的需求,特别是在构建网站的导航菜单、文章分类或用户权限系统时。无限级分类允许我们创建一个无限制深度的层级结构,这在数据库设计中通常采用自引用的方式实现。非递归方法是...

    php无限级分类源码

    这是一个很方便的速度,运行速度很快的无限级分类

    php代码-使用代码解决PHP无限级分类,通过子类ID查找顶级分类的ID的源代码

    ——学习参考资料:仅用于个人学习使用! php代码-使用代码解决PHP无限级分类,通过子类ID查找顶级分类的ID的源代码

    php无限级分类菜单类.zip

    在做PHP程序时,经常会遇到设计多级菜单的编程,其实在许多的开源后台都是无限级的分类,而这些分类的数据仅仅只保存到了一个数据表里,只是用源代码进行了关联而已。而这些关联的数据并不复杂,其实一个优秀的后台...

    ajax php mysql 无限级分类

    本项目结合了Ajax、PHP和MySQL技术来实现这一功能,下面将详细介绍这三个技术在无限级分类中的应用。 首先,让我们了解一下**Ajax**。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况...

    php无限级分类-un-limit-tree.zip

    在PHP编程中,无限级分类(Unlimited Level Category)是一个常见的需求,特别是在处理如产品分类、用户组、文章目录等需要层级结构的数据时。`un-limit-tree` 是一个用于实现这种功能的PHP类库,它可以帮助开发者...

    php 无限级分类 获取顶级分类ID

    在IT行业中,数据库设计...总之,处理无限级分类和生成随机数是PHP开发中常见的需求,理解并掌握这些技巧对于提升代码质量和性能至关重要。通过合理的设计和算法,可以有效地解决这些问题,提高系统的效率和用户体验。

    PHP无限级分类算法原理及实例演示

    无限级分类算法原理及实例演示 什么是无限分类呢?就像windows下新建一个文件夹,在新建的文件夹下又可以新建 一个文件夹,这样无限循环下去,无限分类也是这样,父类可以分 出它子类,子类又 可以分出它的子类,...

    小贤PHP无限级分类程序.rar

    无限级分类就是可以一直往下分类。 我看过很多网站的无限级分类,大多都是多次循环读取SQL语句,我这次用的是一次循环分类的全部记录 ,然后将其赋值给一个数据,最后通过对数组的循环来显示分类!效果还不错...

    php+jquery无限级分类

    在这个项目中,我们看到的文件包括`jquery-1.5.2.js`(一个古老的jQuery库版本)、`test.php`(可能是用于测试分类展示的PHP脚本)、`getmenu.php`(负责获取并处理无限级分类数据的PHP文件)以及`test.sql`(可能...

    php无限级分类实现评论及回复功能

    总结来说,实现PHP无限级分类评论及回复功能主要涉及以下步骤: 1. 设计评论数据表,包含必要的字段。 2. 编写控制器层的函数,如递归获取评论列表、添加评论等。 3. 视图层的HTML结构设计,包括评论列表和回复...

    解析PHP无限级分类方法及代码

    总结来说,PHP无限级分类的实现需要考虑数据结构的设计、数据库查询的效率、递归与非递归算法的选择等多个方面。根据不同的应用场景和数据规模,开发者可以选择适合的存储模型和算法来优化性能和用户体验。在实践中...

Global site tag (gtag.js) - Google Analytics