자식 분류가 없는 최하위 분류일 경우에는 형제 분류들 항상 노출

자식 분류가 없는 최하위 분류일 경우에는 형제 분류들 항상 노출

QA

자식 분류가 없는 최하위 분류일 경우에는 형제 분류들 항상 노출

본문

현재 분류가 최대 4차 뎁스까지 있는 상황인데요

 

https://sir.kr/qa/291956

 

이 글을 참고해서 분류번호길이 strlen($ca_id) 가 8자리 일경우 강제로 $ca_id 를 앞에서부터 6자리만 잘라서 강제로 변경해주는 식으로 해결을 했는데요;;

 

스킨은 listcategory.skin.php 순정 사용중이구요...

 

스킨 상단에 참고한 글에서 아래처럼 추가만 해놓은 상태입니다


<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$str = '';
$exists = false;
// 200820 추가
if( strlen($ca_id) == 8 ){
    $ca_id = substr($ca_id, 0, 6);
}
$ca_id_len = strlen($ca_id);
$len2 = $ca_id_len + 2;
$len4 = $ca_id_len + 4;

 

최종 분류뎁스가 최대 4차... 즉, 3차에서 끝나는 분류도 있는 상태라... 3차에서는 3차분류의 형제들이 그대로 출력시키고 싶은데 3차가 끝인경우에는 또 사라지더라구요...;;

 

위 코드에서처럼 if 문으로 일일이 8자냐 6자냐 판별해서 $ca_id 값을 6자리, 4자리로 강제로 바꿔주는 방법밖에 없나요?? 좀 더 간결한 코드로 구현 가능할까요...??ㅠㅠㅠ

 

4차 분류가 있는 3차 접속시 4차 분류 들이 뜨고...

4차 분류가 없는 3차 접속시 형제 분류(3차 분류) 들이 뜨고...

4차 분류(최종) 접속시 형제 분류(4차 분류) 들이 뜨게 구현하고 싶습니다;;

 

ps. 위 코드처럼 if문으로 8자리냐 6자리냐 판별해서 접속해보니... 4차 분류가 있는 3차 분류 임에도... 3차 분류의 형제들이 뜨네요;;

이 질문에 댓글 쓰기 :

답변 2

몇개 안되니 그냥 if문으로 하시는 것이 좋을 것 같습니다.

 

좀더 간결하게 보일려면 switch문으로 하셔도 됩니다.

 

정규식으로도 숫자로만 되어 있다고 하면 아래와 같이 정규식으로 각 그룹을 추출합니다. (테스트는 regex101.com) 

 


(?<cat1>\d{2})(?<cat2>\d{2})?(?<cat3>\d{2})?(?<cat4>\d{2})?

 

cat1은 무조건 있고,  나머지는 있을 수도 있고, 없을 수도 있고

 

 

답변 감사드립니다... 4차 중에는 알파벳도 섞인 id값도 있네요;;

106010a0... 106010g0 까지.... 그래서 알파벳+숫자조합의 정규식 찾아서


(?<cate1>\d{2})(?<cate2>\d{2})?(?<cate3>\d{2})?(?<cate4>\d{2})?


알려주신 정규식에서 cate4 부분의 d를 찾아낸 정규식으로 넣어보니 안되네요;;(제가 정규식을 제대로 못넣었을거라...)

숫자로만 되어있다는 가정하에 알려주신 정규식이

그룹명 cate1, 2, 3, 4 를 뽑아내는거 같은데

뽑아낸 그룹으로 cate4 값이 있냐 없냐로 8자리인지 6자리인지 판단은 할 수 있을듯한데;;

저걸 가지고 3차(6자리) 접속시에 4차(8자리) 뎁스가 있는지 없는지 판단하는 로직...을...

머리가 안돌아가네요ㅠㅠㅠ

sql 쿼리를 한번 더 써서 현재 접속한 분류의 자식 분류가 있는지 카운팅해와서

카운팅값이 있으면 자식분류(4차)를 띄우고,

카운팅값이 없으면 형제분류(3차)를 띄우면 되는걸까요??

이건 제가 개발자가 아니다보니 이리저리 알아보면서 해보려고 한거였는데

제 선에서 해결하기엔 버거운 개발이 될 거 같습니다ㅠㅠㅠ


\d{2}\d{2}(\d{2})([\w\d]{2})?

로 하셔서 PHP에서 그룹 캡쳐로 하면 배열로 나옵니다. https://stackoverflow.com/questions/5642836/php-regex-groups-captures

 

그룹을 세번째와 네번째로 했으니까

 

$matches[1] 이 세번째고, $matches[2]가 네번째 카테고리가 됩니다.

세번째를 체크할때 $matches[2]가 있을 때 없을때를 if로 한번 물어 보면 될 것 같습니다.

 

php를 잘 몰라서..  이것 저것 참조하셔고,  print로 체크해 가면서 해보시면 될 것 같습니다.

알려주신 방법을 사용하진 못했지만... 해결했습니다;;

sql 문을 한 번 더 써서 자식분류가 있는지 카운팅해오고

카운팅한 값이 없을 때 현재 접속한 ca_id 의 분류길이를 조건으로 switch 문 돌려서

8자리일때 6자리일때를 체크해서 현재 접속중인 분류 $ca_id 를 부모 ca_id 값으로 바꿔치기 해주고 $ca_id_len, $len2, $len4 를 다시 계산되게 돌리고나서

현재 접속중인 분류에 활성화가 먹히게 걸어줘야해서... while문 돌리기 직전에 $ca_id 를 원래의 ca_id 로 돌려놓는 식으로 해결했습니다;;

답변을 작성하시기 전에 로그인 해주세요.
전체 164
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT