• 无限极分类信息


    1.数据库设计:

    CREATE TABLE `smar_category` (
      `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT '栏目ID',
      `pid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父ID',
      `catname` varchar(30) NOT NULL COMMENT '栏目名称',
      `sort` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
      PRIMARY KEY (`id`),
      INDEX pid (pid)
    ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

    2.思路:

        ①设置pid 保存父级栏目

        ②取出所有数据

        ③调用递归函数进行排序

    3.源码

      1 <?php
      2     //处理栏目
      3     class CateModel extends Model{
      4         /**
      5         *===============取出所有栏目=====================================
      6         * @param int $issort 是否进行栏目排序                            |
      7         * @param string $field 取出来的字段 如多个字段中间用,隔开        |
      8         * @param string $sort 数据排序                                     |
      9         * @return array 返回数组                                        |
     10         *================================================================
     11         */
     12         public function getAllCate($issort = true,$field = '*',$sort = 'sort ASC'){
     13             if($issort){
     14                 $rows = $this->field($field)->order($sort)->select();
     15                 $allCate = $this->getCate($rows);
     16             }else{
     17                 $allCate = $this->field($field)->order($sort)->select();
     18             }
     19             
     20             return $allCate;
     21         }
     22         /**
     23         *============栏目排序============================================
     24         * @param array $data 需要进行排序的数组                            |
     25         * @param int $parantid 父级栏目                                    |
     26         * @param int $level 对栏目进行属于第几层进行标示                |
     27         * @return array 返回排列好的数据                                |
     28         *================================================================
     29         */
     30         public function getCate($data , $parentid = 0 , $level = 0){
     31             static $rel = array();
     32             foreach($data as $k => $v){
     33                 if($v['pid'] == $parentid){
     34                     $v['level'] = $level;
     35                     $rel[] = $v;
     36                     unset($data[$k]);
     37                     $this->getCate($data,$v['id'],$level+1);
     38                 }
     39             }
     40             return $rel;
     41         }
     42 
     43         /**
     44         *=================对栏目进行数组层层递进排序=======================
     45         * @param array $data 获取的栏目                                         |
     46         * @param int $parentid 父级栏目                                         |
     47         * @return array 排序好的栏目                                         |
     48         *==================================================================
     49         */
     50         static function sortArrCate($data,$parentid = 0){
     51             $rel = array();
     52             foreach($data as $k => $v){
     53                 if($v['pid'] == $parentid){
     54                     $v['child'] =self::sortArrCate($data,$v['id']);
     55                     $rel[] = $v;
     56                 }
     57             }
     58             return $rel;
     59         }
     60         /**
     61         *=================================根据ID获取下级所有栏目信息===========================
     62         * @param array $data 获取的栏目                                                           |
     63         * @param int $id 传递父级栏目的ID                                                       |
     64         * @param char $isid 传递一个字段名称,默认为取全部的内容                                   |
     65         * @param array  返回该栏目的所有子栏目                                                   |
     66         *======================================================================================
     67         */
     68         static public function getSonCate($data,$id,$isid = ''){
     69             $rel = array();
     70             foreach($data as $k => $v){
     71                 if($v['pid'] == $id){
     72                     $rel[] = empty($isid)?$v:$v[$isid];
     73                     $rel = array_merge($rel , self::getSonCate($data,$v['id'],$isid));
     74                 }
     75             }
     76             return $rel;
     77         }
     78         /**
     79         *============================根据子栏目ID获取所有上级栏目信息==========================
     80         * @param array $data 获取的栏目                                                           |
     81         * @param int $id 传递子级栏目的ID                                                       |
     82         * @param char $isid 传递一个字段名称,默认为取全部的内容                                   |
     83         * @param array  返回该栏目的所有子栏目                                                   |
     84         *======================================================================================
     85         */
     86         static public function getParentCate($data,$id,$isid = ''){
     87             $rel = array();
     88             foreach($data as $k => $v){
     89                 if($v['id'] == $id){
     90                     $rel[] = empty($isid)?$v:$v[$isid];
     91                     $rel = array_merge(self::getParentCate($data,$v['pid'],$isid),$rel);
     92                 }
     93             }
     94             return $rel;
     95         }
     96         /**
     97         *====================修改栏目========================================
     98         * @param array $data 传递过来的POST数据                                  |
     99         * @param int $id       将要修改的栏目ID                                  |    
    100         * @return boolen     返回BOOLEN值                                      |
    101         * ===================================================================
    102         */
    103         public function exitCate($data,$id){
    104             if($this->where(array('id'=>$id))->save($data)){
    105                 return true;
    106             }else
    107                 return false;
    108         }
    109         /**
    110         *=======================删除栏目========================
    111         * @param int $id 需要删除的ID信息        
    112         * ======================================================
    113         */
    114         public function delCate($id){
    115             $data = self::getAllCate(false);
    116             $sonId = self::getSonCate($data,$id,'id');
    117             $this->where(array('id'=>$id))->delete();
    118             foreach($sonId as $k =>$v ){
    119                 $this->where(array('id'=>$v))->delete();
    120             }
    121         }
    122     }
    123 ?>

     

  • 相关阅读:
    js 特殊字符处理
    sql server 查询新增
    idea 很多基础文件找不到
    js 千分位
    Navicat Premium 12新增标识列
    Javascript 树形菜单 (11个)
    Javascript调用后台方法
    Treeview绑定数据库
    Repeater实现GridView编辑修改模式
    如何用JS获取键盘上任意按键的值?兼容FireFox和IE js获取键盘ASCII码?js键盘事件全面控制
  • 原文地址:https://www.cnblogs.com/subtract/p/4230145.html
Copyright © 2020-2023  润新知