테스트 사이트 - 개발 중인 베타 버전입니다

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

coDribble 6개월 전 조회 1,518

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

</p>

<p>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);</p>

<p>    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;

}</p>

<p>

기본 정렬 옵션을 출력하는 곳인데, $bo_sort_fields 에 hook 이 적용되어있어서

기본 함수를 건드리지않고 hook 으로 추가할 수 있을 것 같아서 gpt 의 도움을 받아 적용을 해보았는데 정렬 필드에 옵션도 안뜨고, 정렬 필드 이후에 오는 레이아웃들이 뜨질 않습니다ㅠ

</p>

<p>if( ! function_exists('get_custom_board_sort_fields') ) {

    add_replace('get_board_sort_fields', 'get_custom_board_sort_fields', G5_HOOK_DEFAULT_PRIORITY);</p>

<p>    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;</p>

<p>        $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";</p>

<p>        $custom_field = array($color_priority_sort, '출력순서, 색상 오름차순');</p>

<p>        $sort_keys = array_map(function($item) {

            return preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $item[0]);

        }, $bo_sort_fields);</p>

<p>        $custom_key = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $custom_field[0]);</p>

<p>        if( !in_array($custom_key, $sort_keys) ) {

            $bo_sort_fields[] = $custom_field;

        }</p>

<p>        return $bo_sort_fields;

    }

}</p>

<p>

 

이게 gpt 가 알려준 방법인데 적용이 되질 않습니다ㅠ

 

어떻게 하면 게시판 설정에서 특정 게시판에만 정렬 필드의 옵션을 추가할 수 있나요?

댓글을 작성하려면 로그인이 필요합니다.

답변 5개

채택된 답변
+20 포인트
6개월 전

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; 

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

c
coDribble
6개월 전
답변 감사드립니다!

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

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

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

[code]
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;
}
}
}
[/code]
알려주신 방법으로 적용되어 해결했습니다!

답변 감사드립니다!

좋은 하루 되세요! :)

댓글을 작성하려면 로그인이 필요합니다.

모아비즈
6개월 전

 </p>

<p><?php if (!defined('_GNUBOARD_')) exit;

// 재외할 게시판    //

$bo_tables = array('notice', 'free', 'aifree', 'hu', 'moa', 'moatip', 'dev', 'membermoa', 'chu');

// 제외할 게시판 끝  //</p>

<p>// 현재 게시판이 제외 목록에 있는지 확인

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

}

?></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

c
coDribble
6개월 전
상세한 답변 감사드립니다!

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

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

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

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

좋은 하루 되세요! :)

댓글을 작성하려면 로그인이 필요합니다.

모아비즈
6개월 전

https://sir.kr/g5_tip/22019

 

여기도 한번 확인해보세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

c
coDribble
6개월 전
알려주신 팁을 보니 제가 예전에 추천하고 스크랩했던 글이네요!
감사합니다! :)

댓글을 작성하려면 로그인이 필요합니다.

모아비즈
6개월 전

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

모아비즈
6개월 전

sorting_add_V1.php 

* /extend/ 폴더 아래 넣어주세요 

 

 

</p>

<p><?php if (!defined('_GNUBOARD_')) exit;</p>

<p>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', '부모날짜 최근것 부터');

    

    

        

    //같은 방식으로 계속 추가 가능</p>

<p>    return $sorting;

}, G5_HOOK_DEFAULT_PRIORITY, 1);</p>

<p>?></p>

<p> </p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인