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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
카테고리가 선택된 상태에서 다시 정렬되게 하는 방법

QA

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

본문

안녕하세요?

새해 복 많이 받으십시오~

 

전체가 아닌 카테고리가 선택된 상태에서 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 님~

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

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

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

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT