查看: 7299|回复: 0
打印 上一主题 下一主题

php无限分类生成树状的类

[复制链接]
跳转到指定楼层
1#
发表于 2007-10-5 11:31:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
一个无限分类生成树状的类,一次数据查询,数据结构简单.
  1. <?php

  2. //一次数据库操作,无限分类,树状显示


  3. class CategoryClass {
  4.         var $prefix                = "tb_";            //表前缀
  5.         var $table                = "category";        //表名称
  6.         var $prikeyfield        = "cid";            //分类编号,smallint  primary auto_increment
  7.         var $parentfield        = "pid";            //上级分类编号,如果是根分类则pid=0; smallint
  8.         var $categoryfield        = "CategoryName";    //分类名称
  9.         var $orderfield            = "displayorder";    //排序字段
  10.    
  11.         var $Category_name       = array();            //所有分类名称数组,key是类别编号,var是类别名称
  12.         var $Target_Category     = array();            //目标分类数组,便于输出树状结构     
  13.         var $option              = array();            //得到的排序后的数状数组,生成select options
  14.         var $order_array         = array();          //所有类别的排序数组,key是类别编号,var是排序字段
  15.         
  16.         
  17.         function init($prefix,$table,$prikeyfield,$parentfield,$categoryfield,$orderfield){
  18.             $this->prefix             = $prefix;
  19.             $this->table             = $this->prefix.$table;
  20.             $this->prikeyfield         = $prikeyfield;
  21.             $this->parentfield         = $parentfield;
  22.             $this->categoryfield     = $categoryfield;
  23.             $this->orderfield         = $orderfield;
  24.             //得到所有数据
  25.             $this->getData();
  26.         }
  27.         
  28.         
  29.         //添加分类
  30.         function Add($category_name, $pid=0) {
  31.                 global $db;
  32.                 $query     = $db->query("SELECT * FROM ".$this->table." WHERE ".$this->categoryfield."='".$category_name."'");
  33.                 if($db->num_rows($query)) {
  34.                     return false;
  35.                 } else {
  36.                     $db->query("INSERT INTO  ".$this->table." (".$this->categoryfield.",
  37.                                ".$this->parentfield.") VALUES ('".$category_name."', '".$pid."')");
  38.                     return true;
  39.                 }
  40.         }
  41.         //得到所有分类数据
  42.         function getData() {
  43.                 global $db;
  44.                 $query     = $db->query("SELECT * FROM ".$this->table." ORDER BY ".$this->orderfield." ASC");
  45.                 while ($sort = $db->fetch_array($query)) {
  46.                   $this->Target_Category[$sort[$this->parentfield]][$sort[$this->prikeyfield]]     = $sort;
  47.                   $this->Category_name[$sort[$this->prikeyfield]]                                 = $sort[$this->categoryfield];
  48.                   $this->order_array[$sort[$this->prikeyfield]]                                   = $sort[$this->orderfield];
  49.                 }
  50.                 $db->free_result($query);
  51.         }
  52.         /***
  53.         * $sortid:   类别ID, 0表示生成所有类别的树状select option
  54.         * $p     :   是否显示本身(例如:如果要找出sortid=1的所有子类及其本身,则P=1)
  55.         *
  56.         * 根据类别ID,找到所有子类,生成$option   
  57.         */   
  58.         function getArrayById($sortid = "0", $p="1", $level = 1) {
  59.                $tmp_array=array();
  60.                foreach($this->Target_Category AS $k => $v) {
  61.                          $tmp_array[]=$k;
  62.                   }
  63.                   if(!empty($this->Category_name)) {
  64.                       if(!in_array($sortid, $tmp_array)) {
  65.                              if($p==1) $this->option[$sortid] = $this->Category_name[$sortid];
  66.                       } else {
  67.                           foreach($this->Target_Category[$sortid] AS $key => $sort) {
  68.                            if($sortid != '0' && $p=='1') {
  69.                                    $this->option[$sortid] = $this->Category_name[$sortid];
  70.                                    $level = 2;
  71.                            }
  72.                            $m = ($sortid==$sort[$this->prikeyfield]||$sortid==0) ? "" : "|- ";
  73.                            $this->option[$sort[$this->prikeyfield]] = str_repeat("   ", $level-1) .$m.$sort[$this->categoryfield];
  74.                            $this->getArrayById($sort[$this->prikeyfield], '0', $level + 1);
  75.                        }
  76.                       }
  77.                   }
  78.           }
  79.          
  80.           //更新分类排序
  81.           function updateOrder($cid, $displayorder) {
  82.                  global $db;
  83.                  $db->unbuffered_query("UPDATE ".$this->table." SET ".$this->orderfield."='".$displayorder."' WHERE ".$this->prikeyfield."='".$cid."'");
  84.           }
  85.          
  86.           //更新类别数据
  87.           function updateCategoryData($category_name, $pid, $cid) {
  88.                  global $db;
  89.                  $db->unbuffered_query("UPDATE ".$this->table." SET ".$this->categoryfield."='".$category_name."',
  90.                                            ".$this->parentfield."='".$pid."' WHERE ".$this->prikeyfield."='".$cid."'");
  91.           }
  92.          
  93.           //得到指定类别数据
  94.           function getCategoryData($cid) {
  95.                  global $db;
  96.                  return $db->fetch_one_array("SELECT * FROM ".$this->table." WHERE ".$this->prikeyfield."='".$cid."'");
  97.           }
  98.          
  99.           //删除指定类别数据
  100.           function deleteCategoryData($cid) {
  101.               global $db;
  102.               $db->query("DELETE  FROM ".$this->table." WHERE ".$this->prikeyfield."='".$cid."'");
  103.               
  104.           }
  105.          
  106.           //删除指定类别及其所有子类
  107.           function deleteAllCategoryData($cid) {
  108.                  global $db;
  109.                  $sql = '';
  110.                  $this->getArrayById($cid,1);
  111.                  foreach($this->option AS $key => $var) {
  112.                         $sql .=$key.",";  
  113.                  }
  114.                  $sql = "DELETE  FROM ".$this->table." WHERE ".$this->prikeyfield." IN (".substr($sql,0,-1).")";
  115.                  $db->query($sql);
  116.           }
  117.          
  118. }
  119. ?>
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表