-
- //Non-recursively get all descendant categories
- function get_offspring($pids, $list)
- {
- $npid = array();
- $offspring = array();
- $has_child = true;
- while( $has_child)
- {
- $has_child = false;
- foreach($list as $lk => $lv)
- {
- if(in_array($lv['pid'], $pids))
- {
- $offspring[ ] = $lv;
- $npid[] = $lv['cid'];
- unset($list[$lk]);
- $has_child = true;
- }
- }
- $pids = $npid;
- }
- return $offspring;
- }
- //Use the path field to get the descendant classification
- function get_offspring($pid)
- {
- $offspring = array();
- $cats = $this->getList('cat_id,cat_name,parent_id, cat_path', array(), 0, -1);
- foreach($cats as $cv)
- {
- if(in_array($pid, explode(',', $cv['cat_path'])))
- {
- $offspring[] = $cv;
- }
- }
- return $offspring;
- }
- //Update descendant classification path
- function update_offspring_path($pid, $ppath)
- {
- if($ppath == ',')
- {
- $ppath = '';
- }
- $offspring = $this->get_offspring($pid);
-
- foreach($offspring as $ov)
- {
- $ov['cat_path'] = substr($ ov['cat_path'], 0, strlen($ov['cat_path'])-1);
- $old_path = explode(',', $ov['cat_path']);
- foreach($old_path as $oldk => $oldv)
- {
- if($oldv == $pid)
- {
- break;
- }
- unset($old_path[$oldk]);
- }
- $new_path = $ppath.implode(',' , $old_path).',';
- if(!$this->update(array('cat_path'=>$new_path), array('cat_id'=>$ov['cat_id'])))
- {
- return false;
- }
- }
- return true;
- }
- //Organize the list into a tree shape
- function get_tree_list($pid, $arr, &$r)
- {
- foreach($arr as $k = > $v)
- {
- if($v['parent_id'] == $pid)
- {
- if(isset($r[$pid]))//Set the subclass tag
- {
- $r[ $pid]['has_child'] = 1;
- }
-
- $v['cat_path'] = trim($v['cat_path']);//Calculate depth
- $path_str = substr($v['cat_path' ], 0, strlen($v['cat_path'])-1);
- if($path_str == '')
- {
- $v['deep'] = 0;
- }
- else
- {
- $v ['deep'] = count(explode(',', $path_str));
- }
-
- $v['format'] = str_repeat(' ', 6*$v['deep']);/ /Calculate indent
-
- $r[$v['cat_id']] = $v;//Add to ordered list
-
- unset($arr[$k]);//Add and remove from unordered list
-
- $this->get_tree_list($v['cat_id'], $arr, $r);
- }
- }
- }
-
-
Copy code
|