카테고리가 선택된 상태에서 다시 정렬되게 하는 방법

카테고리가 선택된 상태에서 다시 정렬되게 하는 방법

QA

카테고리가 선택된 상태에서 다시 정렬되게 하는 방법

답변 4

본문

안녕하세요?

새해 복 많이 받으십시오~

 

전체가 아닌 카테고리가 선택된 상태에서 wr_1 또는  wr_2로 다시 정렬을 하고 싶습니다.

 

여분필드는 wr_1와  wr_2로 사용하였으며 bbs/list.php에는 다음처럼 넣었습니다.


// 리스트에서 다른 필드로 정렬을 하려면 아래의 코드에 해당 필드를 추가하세요.
$sst = preg_match("/^(wr_1|wr_2|wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
}

 

lib/common.lib.php 해당부위는 다음처럼 되어 있습니다.


// 날짜, 조회수의 경우 높은 순서대로 보여져야 하므로 $flag 를 추가
// $flag : asc 낮은 순서 , desc 높은 순서
// 제목별로 컬럼 정렬하는 QUERY STRING
function subject_sort_link($col, $query_string='', $flag='asc')
{
    global $sst, $sod, $sfl, $stx, $page;
    $q1 = "sst=$col";
    if ($flag == 'asc')
    {
        $q2 = 'sod=asc';
        if ($sst == $col)
        {
            if ($sod == 'asc')
            {
                $q2 = 'sod=desc';
            }
        }
    }
    else
    {
        $q2 = 'sod=desc';
        if ($sst == $col)
        {
            if ($sod == 'desc')
            {
                $q2 = 'sod=asc';
            }
        }
    }
    $arr_query = array();
    $arr_query[] = $query_string;
    $arr_query[] = $q1;
    $arr_query[] = $q2;
    $arr_query[] = 'sfl='.$sfl;
    $arr_query[] = 'stx='.$stx;
    $arr_query[] = 'page='.$page;
    $qstr = implode("&", $arr_query);
    return "<a href=\"{$_SERVER['SCRIPT_NAME']}?{$qstr}\">";
}

 

도움을 주시면 감사하겠습니다.
 

이 질문에 댓글 쓰기 :

답변 4

bbs/list.php에서 현재 sst 변수는 정렬할 필드이며

여기에 선택된 카테고리 정보(ca_name)를 유지/정렬하도록 구현해야 합니다.

lib/common.lib.php에서는 정렬 링크가 카테고리를 유지하도록

쿼리 스트링에 ca_name을 추가하고 subject_sort_link 함수를 수정하세요.

- bbs/list.php


$sst = preg_match("/^(wr_1|wr_2|wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "wr_datetime";
$sod = in_array($sod, ['asc', 'desc']) ? $sod : 'desc';
if (isset($_GET['ca_name']) && preg_match("/^[a-zA-Z0-9_\-]+$/", $_GET['ca_name'])) {
    $ca_name = trim($_GET['ca_name']);
} else {
    $ca_name = '';
}
if ($ca_name) {
    $escaped_ca_name = addslashes($ca_name); 
    $sql_order = "ca_name = '$escaped_ca_name', $sst $sod";
} else {
    $sql_order = "$sst $sod";
}

- lib/common.lib.php


function subject_sort_link($col, $query_string='', $flag='asc')
{
    global $sst, $sod, $sfl, $stx, $page, $ca_name;
    $q1 = "sst=$col";
    $q2 = ($flag === 'asc') ? 'sod=asc' : 'sod=desc';
    if ($sst === $col) {
        $q2 = ($sod === 'asc') ? 'sod=desc' : 'sod=asc';
    }
    $arr_query = [];
    $arr_query[] = $query_string;
    $arr_query[] = $q1;
    $arr_query[] = $q2;
    $arr_query[] = 'sfl='.htmlspecialchars($sfl, ENT_QUOTES, 'UTF-8');
    $arr_query[] = 'stx='.htmlspecialchars($stx, ENT_QUOTES, 'UTF-8');
    $arr_query[] = 'page='.$page;
    if ($ca_name) {
        $arr_query[] = 'ca_name='.htmlspecialchars(urlencode($ca_name), ENT_QUOTES, 'UTF-8');
    }
    $qstr = implode("&", $arr_query);
    return "<a href=\"".htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8')."?{$qstr}\">";
}

 

감사합니다.
그런데...제가 잘못 적용을 해서인지
알려주신 구문을 bbs/list.php에서 잘못 끼워 넣는 것 같습니다...ㅜㅜ
이렇게 저렇게 해봐도 wr_1 또는  wr_2로 다시 정렬을 하면
전체 리스트가 다 나오거나
'게시물이 없습니다.'라고 나타납니다.
그누보드 버전은 5.1 입니다.

배열에 $arr_query[] = 'sca='.$sca; 추가해보세요



    $arr_query = array();
    $arr_query[] = $query_string;
    $arr_query[] = $q1;
    $arr_query[] = $q2;
    $arr_query[] = 'sfl='.$sfl;
    $arr_query[] = 'stx='.$stx;
    $arr_query[] = 'sca='.$sca; // <--추가
    $arr_query[] = 'page='.$page;
    $qstr = implode("&", $arr_query);
    return "<a href=\"{$_SERVER['SCRIPT_NAME']}?{$qstr}\">";

죄송합니다.

bbs/list.php에서 SQL 정렬 부분이 다음과 같습니다.

 


/ 정렬
// 인덱스 필드가 아니면 정렬에 사용하지 않음
//if (!$sst || ($sst && !(strstr($sst, 'wr_id') || strstr($sst, "wr_datetime")))) {
if (!$sst) {
    if ($board['bo_sort_field']) {
        $sst = $board['bo_sort_field'];
    } else {
        $sst  = "wr_num, wr_reply";
        $sod = "";
    }
} else {
    // 게시물 리스트의 정렬 대상 필드가 아니라면 공백으로 (nasca 님 09.06.16)
    // 리스트에서 다른 필드로 정렬을 하려면 아래의 코드에 해당 필드를 추가하세요.
    $sst = preg_match("/^(wr_1|wr_2|wr_3|wr_4|wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
}
if(!$sst)
    $sst  = "wr_num, wr_reply";
if ($sst) {
    $sql_order = " order by {$sst} {$sod} ";
}
if ($sca || $stx) {
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} else {
    $sql = " select * from {$write_table} where wr_is_comment = 0 ";
    if(!empty($notice_array))
        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}

glitter0gim 님~

해결은 못했지만, 정성이 담긴 답변 감사드립니다.

원본으로 했는데도 안 되는 것을 보니 다른 곳에서도 얽긴 것(?) 같습니다.

좋은 저녁 되십시오~^^)

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