-
- //すべての子孫カテゴリを非再帰的に取得します
- 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;
- }
- //パス フィールドを使用して子孫分類を取得します
- 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;
- }
- //子孫分類パスを更新
- 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 =>
- {
- 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;
- }
- //リストをツリー状に整理します
- function get_tree_list($pid, $arr, &$r)
- {
- foreach($ arr as $k = > $v)
- {
- if($v['parent_id'] == $pid)
- {
- if(isset($r[$pid]))// サブクラスタグを設定します
- {
- $r[ $pid]['has_child'] = 1;
- }
-
- $v['cat_path'] = トリム($v['cat_path']);//深さを計算します
- $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' ]);/ /インデントの計算
-
- $r[$v['cat_id']] = $v;//順序付きリストに追加
-
- unset($arr[$k]);//順序なしリストの追加と削除
-
- $this->get_tree_list($v['cat_id'], $arr, $r);
- }
- }
- }
-
-
コードをコピー
|