개발 꿀팁/PHP

TP5 프레임워크에서 재귀적 무한 등급 구현 방법

Jammie 2022. 7. 25. 14:07
반응형

이 글은 TP5 틀에서 어떻게 재귀적으로 무한 등급을 구현할 수 있는지에 대한 내용입니다(코드 예시). 참고 가치가 있습니다. 필요한 친구가 있으면 참고하시어 도움이 되시기 바랍니다.
저는 tp5 프레임을 사용하는데, 프로젝트가 여러 곳에서 무한 등급을 사용하기 때문에 extend에서 직접 catetree 패킷을 만들고 catetee.php 클래스를 만들면 바로 거기에 있을 수 있습니다.컨트롤러 안에서 바로 인용하시면 돼요

<?php

namespace catetree;

class Catetree {

     

    public function catetree($cateRes){

        return $this->sort($cateRes);

    }

    public function sort($cateRes,$pid=0,$level=0){

        static $arr=array();

        foreach ($cateRes as $k => $v) {

            if($v['pid']==$pid){

                $v['level']=$level;

                $arr[]=$v;

                $this->sort($cateRes,$v['id'],$level+1);

            }

        }

        return $arr;

    }

    //하위 항목 ID 가져오기

   public function childrenids($cateid,$obj){

        $data=$obj->field('id,pid')->select();

        return $this->_childrenids($data,$cateid,TRUE);

   }

   private function _childrenids($data,$cateid,$clear=FALSE){

        static $arr=array();

        if($clear){

          $arr=array();

        }

        foreach ($data as $k => $v) {

            if($v['pid']==$cateid){

                $arr[]=$v['id'];

                $this->_childrenids($data,$v['id']);

            }

        }

        return $arr;

   }

   //작업 표시줄 정렬

   public function cateSort($data,$obj){

    foreach ($data as $k => $v) {

        $obj->update(['id'=>$k,'sort'=>$v]);

    }

   }

   //일괄 삭제 처리

   public function pdel($cateids){

            foreach ($cateids as $k => $v) {

                $childrenidsarr[]=$this->childrenids($v);

                $childrenidsarr[]=(int)$v;

            }  

            $_childrenidsarr=array();

            foreach ($childrenidsarr as $k => $v) {

                if(is_array($v)){

                    foreach ($v as $k1 => $v1) {

                       $_childrenidsarr[]=$v1;

                    }

                }else{

                    $_childrenidsarr[]=$v;

                }

            }

            $_childrenidsarr=array_unique($_childrenidsarr);

            $this::destroy($_childrenidsarr);

     

   }

}

 

반응형