자식 분류가 없는 최하위 분류일 경우에는 형제 분류들 항상 노출
본문
현재 분류가 최대 4차 뎁스까지 있는 상황인데요
이 글을 참고해서 분류번호길이 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은 무조건 있고, 나머지는 있을 수도 있고, 없을 수도 있고
!-->
\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로 체크해 가면서 해보시면 될 것 같습니다.
!-->