특정 게시판에만 리스트 정렬 필드 옵션 추가
본문
관리자 게시판 설정에서 리스트 정렬 필드에 특정 게시판인 경우에만 옵션을 추가하려고 합니다.
function get_board_sort_fields($board=array(), $make_key_return=''){
$bo_sort_fields = run_replace('get_board_sort_fields', array(
array('wr_num, wr_reply', '기본'),
array('wr_datetime asc', '날짜 이전것 부터'),
array('wr_datetime desc', '날짜 최근것 부터'),
array('wr_hit asc, wr_num, wr_reply', '조회수 낮은것 부터'),
array('wr_hit desc, wr_num, wr_reply', '조회수 높은것 부터'),
array('wr_last asc', '최근글 이전것 부터'),
array('wr_last desc', '최근글 최근것 부터'),
array('wr_comment asc, wr_num, wr_reply', '댓글수 낮은것 부터'),
array('wr_comment desc, wr_num, wr_reply', '댓글수 높은것 부터'),
array('wr_good asc, wr_num, wr_reply', '추천수 낮은것 부터'),
array('wr_good desc, wr_num, wr_reply', '추천수 높은것 부터'),
array('wr_nogood asc, wr_num, wr_reply', '비추천수 낮은것 부터'),
array('wr_nogood desc, wr_num, wr_reply', '비추천수 높은것 부터'),
array('wr_subject asc, wr_num, wr_reply', '제목 오름차순'),
array('wr_subject desc, wr_num, wr_reply', '제목 내림차순'),
array('wr_name asc, wr_num, wr_reply', '글쓴이 오름차순'),
array('wr_name desc, wr_num, wr_reply', '글쓴이 내림차순'),
array('ca_name asc, wr_num, wr_reply', '분류명 오름차순'),
array('ca_name desc, wr_num, wr_reply', '분류명 내림차순'),
), $board, $make_key_return);
if( $make_key_return ){
$returns = array();
foreach( $bo_sort_fields as $v ){
$key = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $v[0]);
$returns[$key] = $v[0];
}
return $returns;
}
return $bo_sort_fields;
}
기본 정렬 옵션을 출력하는 곳인데, $bo_sort_fields 에 hook 이 적용되어있어서
기본 함수를 건드리지않고 hook 으로 추가할 수 있을 것 같아서 gpt 의 도움을 받아 적용을 해보았는데 정렬 필드에 옵션도 안뜨고, 정렬 필드 이후에 오는 레이아웃들이 뜨질 않습니다ㅠ
if( ! function_exists('get_custom_board_sort_fields') ) {
add_replace('get_board_sort_fields', 'get_custom_board_sort_fields', G5_HOOK_DEFAULT_PRIORITY);
function get_custom_board_sort_fields($bo_sort_fields, $board, $make_key_return) {
if( !isset($board['gr_id']) || $board['gr_id'] !== 'products' ) return $bo_sort_fields;
$color_priority_sort = "wr_11 asc, (case wr_12 when 'red' then 1 when 'orange' then 2 when 'yellow' then 3 else 99 end) asc";
$custom_field = array($color_priority_sort, '출력순서, 색상 오름차순');
$sort_keys = array_map(function($item) {
return preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $item[0]);
}, $bo_sort_fields);
$custom_key = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $custom_field[0]);
if( !in_array($custom_key, $sort_keys) ) {
$bo_sort_fields[] = $custom_field;
}
return $bo_sort_fields;
}
}
이게 gpt 가 알려준 방법인데 적용이 되질 않습니다ㅠ
어떻게 하면 게시판 설정에서 특정 게시판에만 정렬 필드의 옵션을 추가할 수 있나요?
!-->!-->답변 5
extend/default.config.php에 추가
1. 직접 정렬필드 지정하기
if(isset($board['gr_id']) && $board['gr_id']=='products'){ //or if($bo_table=='free')
$board['bo_sort_field']= "wr_11 asc, (case wr_12 when 'red' then 1 when 'orange' then 2 when 'yellow' then 3 else 99 end) asc";
}
2. hook으로 관리자 페이지에 추가하기 : 챗지피티가 쓰잘데없는 잡다한 코드를 알려주었네요
if(isset($board['gr_id']) && $board['gr_id']=='products'){
add_replace('get_board_sort_fields', 'get_custom_board_sort_fields', G5_HOOK_DEFAULT_PRIORITY);
function get_custom_board_sort_fields($bo_sort_fields) {
$color_priority_sort = "wr_11 asc, (case wr_12 when 'red' then 1 when 'orange' then 2 when 'yellow' then 3 else 99 end) asc";
$bo_sort_fields[] = array($color_priority_sort, '출력순서, 색상 오름차순');
return $bo_sort_fields;
}
}
cf1)그룹 아이디가 아닌 게시판 아이디로 하려면 if문에 $board['gr_id'] 대신 $bo_table 을 사용하면 됩니다
cf2) 정렬 코드 확인은 리스트 스킨 상단에 echo $sql;
sorting_add_V1.php
* /extend/ 폴더 아래 넣어주세요
<?php if (!defined('_GNUBOARD_')) exit;
add_replace('get_board_sort_fields', function( $sorting ){
$sorting[] = array('wr_1 asc, wr_num, wr_reply', '여분필드 1 오름차순');
$sorting[] = array('wr_1 desc, wr_num, wr_reply', '여분필드 1 내림차순');
$sorting[] = array('wr_comment_reply asc, wr_num, wr_reply', 'wr_co_re 오름차순');
$sorting[] = array('wr_comment_reply desc, wr_num, wr_reply', 'wr_co_re 내림차순');
$sorting[] = array('wr_parent asc', 'wr_parent 오름차순');
$sorting[] = array('wr_parent desc', 'wr_parent 내림차순');
$sorting[] = array('wr_datetime asc, wr_parent', '부모날짜 이전것 부터');
$sorting[] = array('wr_datetime desc, wr_parent', '부모날짜 최근것 부터');
//같은 방식으로 계속 추가 가능
return $sorting;
}, G5_HOOK_DEFAULT_PRIORITY, 1);
?>
<?php if (!defined('_GNUBOARD_')) exit;
// 재외할 게시판 //
$bo_tables = array('notice', 'free', 'aifree', 'hu', 'moa', 'moatip', 'dev', 'membermoa', 'chu');
// 제외할 게시판 끝 //
// 현재 게시판이 제외 목록에 있는지 확인
if (!in_array($bo_table, $bo_tables)) {
add_replace('get_board_sort_fields', function($sorting) {
$sorting[] = array('wr_1 asc, wr_num, wr_reply', '여분필드 1 오름차순');
$sorting[] = array('wr_1 desc, wr_num, wr_reply', '여분필드 1 내림차순');
$sorting[] = array('wr_comment_reply asc, wr_num, wr_reply', 'wr_co_re 오름차순');
$sorting[] = array('wr_comment_reply desc, wr_num, wr_reply', 'wr_co_re 내림차순');
$sorting[] = array('wr_parent asc', 'wr_parent 오름차순');
$sorting[] = array('wr_parent desc', 'wr_parent 내림차순');
$sorting[] = array('wr_datetime asc, wr_parent', '부모날짜 이전것 부터');
$sorting[] = array('wr_datetime desc, wr_parent', '부모날짜 최근것 부터');
//같은 방식으로 계속 추가 가능
return $sorting;
}, G5_HOOK_DEFAULT_PRIORITY, 1);
}
?>