예전에 본문에서 카테고리 제목을 표시할 때 상위 카테고리의 제목도 같이 출력하는 팁을 쓴 적이 있었는데요.
이번에 빵조각 애드온이라는 걸 배포하면서 관련 팁을 좀 더 업그레이드해봤습니다.
카테고리 정보가 3차, 4차 분류에 속하더라도 1차 분류까지 소급해서 모든 상위 카테고리의 정보를 받아오는 방법입니다.
다만, 재귀함수를 사용해야 해서 게시판 스킨에서 php 함수를 정의할 수 있는 상황이 아니라면, 애드온이나 위젯 같은 다른 서드파티 자료들에서 사용하는 게 적절하다는 점을 고려하시면 좋을 듯합니다.
빵조각 애드온에서 사용한 소스 코드를 중심으로 설명해보도록 하겠습니다.
1. 먼저 함수를 선언해둡니다.
// $mid는 카테고리가 소속된 mid값 // $category는 url 쿼리스트링의 category값 또는 문서 객체($oDocument)가 가지고 있는 category_srl값 // $category_list는 해당 모듈의 카테고리 목록(보통 캐시로 활용됨) // $show_upper_category는 빵조각 애드온에서 설정된 상위 카테고리 표시 여부 변수값 // $category_info는 본 재귀함수에서 반환할 배열 변수 // 이 인자를 누락하거나 빈 배열을 전달하면 $category_info에는 최종 차수의 카테고리부터 1차 카테고리까지 관련 데이터가 차곡차곡 쌓이게 됨 function getCategoryInfo($mid, $category, $category_list, $show_upper_category = 'Y', $category_info = array()) { // 여기서는 반환받을 카테고리 정보 변수에 링크 주소와 제목만 담음 $category_info[$category] = new stdClass(); $category_info[$category]->href = getUrl('', 'mid', $mid, 'category', $category); $category_info[$category]->title = $category_list[$category]->title; // 애드온에서 상위 카테고리를 표시하기로 한 경우에만 재귀함수 적용 // 현재 함수로 전달된 $category의 분류 depth가 0이 될 때까지(즉 1차 분류에 도달할 때까지) 재귀함수가 돌아감 if ( $category_list[$category]->depth && $show_upper_category !== 'N' ) { // 여기서는 $category가 아니라 상위 카테고리 번호($category_list[$category]->parent_srl)를 함수 getCategoryInfo에 전달함 return getCategoryInfo($mid, $category_list[$category]->parent_srl, $category_list, $show_upper_category, $category_info); } else { // 카테고리의 depth가 0에 도달하면 상위 카테고리의 정보를 담은 $category_info를 반환함 // 다만 여기서는 $category_info의 배열 순서가 4-3-2-1처럼 역순으로 담기게 되므로 배열 순서를 뒤집어서 반환 return array_reverse($category_info, true); } }
2. 이제 이 함수를 호출해서 상위 카테고리가 포함된 카테고리 정보를 반환받아 담을 수 있습니다.
$breadcrumb_info->category_info = getCategoryInfo($module_info->mid, $category, $category_list, $addon_info->show_upper_category);
debugPrint($breadcrumb_info->category_info)를 찍어보면, 이렇게 나옵니다.
Array ( [23845] => stdClass Object ( [href] => /devlog/category/23845 [title] => EXAM ) [23849] => stdClass Object ( [href] => /devlog/category/23849 [title] => Bug Fix ) )
배열의 첫 번째 원소가 1차 분류이고, 두 번째 원소가 2차 분류입니다ㅎ
3. 그리고 이 변수를 html 템플릿 등에 잘 전달한다면, 이런 식으로 사용해볼 수 있습니다.
<!--@foreach($breadcrumb_info->category_info as $category_srl => $category_info)--> <a href="{$category_info->href}">{$category_info->title}</a> <!--@endforeach-->
4. 관련 예시입니다 :) https://dev.aporia.blog/devlog/category/23849
이상 노트 겸 팁 정리였습니다 :)