특정 게시판에만 리스트 정렬 필드 옵션 추가

특정 게시판에만 리스트 정렬 필드 옵션 추가

QA

특정 게시판에만 리스트 정렬 필드 옵션 추가

답변 5

그누보드5(영카트) 버전

5.6.10

사용 PHP 버전

7.3

본문

관리자 게시판 설정에서 리스트 정렬 필드에 특정 게시판인 경우에만 옵션을 추가하려고 합니다.


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; 

 

 

답변 감사드립니다!

알려주신 방법을 보고 $board 가 문제였단거를 깨달았네요;;

get_custom_board_sort_fields 함수에 매개변수 $bo_sort_fileds 만 넣으니 리스트정렬 아래에 오는 내용들도 잘 출력이 됩니다.

함수 안에서 $board['gr_id'] 로 걸어놨던 조건문을 밖으로 빼서 해결 했습니다!


if( ! function_exists('get_custom_board_sort_fields') ) {
    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, wr_num, wr_reply";
            $bo_sort_fields[] = array($color_priority_sort, '출력순서, 색상 오름차순');
            return  $bo_sort_fields;
        }
    }
}

알려주신 방법으로 적용되어 해결했습니다!

답변 감사드립니다!

좋은 하루 되세요! :)

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);
?>
 

https://sir.kr/g5_tip/22019

 

여기도 한번 확인해보세요

 
<?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);
}
?>

상세한 답변 감사드립니다!

우선 알려주신 방법은 기존 run_replace 있던거를 한번 더 다시 정의해주는 느낌이네요;;

제가 하려고 했던 방법은 그냥 원하는 option 만 추가하는 방법이었어서...

제 의도와 맞는 답변은 균이님께서 알려주신 방법이라 채택드리지 못해 죄송합니다!ㅠ

추후에 또 지금과 같은 상황이 생긴다면 알려주신 방법으로도 적용해볼게요!

좋은 하루 되세요! :)

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 5
© SIRSOFT
현재 페이지 제일 처음으로