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

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

허당빵 10개월 전 조회 2,173

안녕하세요?

새해 복 많이 받으십시오~

 

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

 

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

</strong></p>

<p>// 리스트에서 다른 필드로 정렬을 하려면 아래의 코드에 해당 필드를 추가하세요.

$sst = preg_match("/^(wr_1|wr_2|wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";

}</p>

<p><strong>

 

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

</strong></p>

<p>// 날짜, 조회수의 경우 높은 순서대로 보여져야 하므로 $flag 를 추가

// $flag : asc 낮은 순서 , desc 높은 순서

// 제목별로 컬럼 정렬하는 QUERY STRING

function subject_sort_link($col, $query_string='', $flag='asc')

{

    global $sst, $sod, $sfl, $stx, $page;</p>

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

            }

        }

    }</p>

<p>    $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("&amp;", $arr_query);</p>

<p>    return "<a href=\"{$_SERVER['SCRIPT_NAME']}?{$qstr}\">";

}</p>

<p><strong>

 

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

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

답변 4개

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

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

}</p>

<p>

- lib/common.lib.php

</p>

<p>function subject_sort_link($col, $query_string='', $flag='asc')

{

    global $sst, $sod, $sfl, $stx, $page, $ca_name;</p>

<p>    $q1 = "sst=$col";

    $q2 = ($flag === 'asc') ? 'sod=asc' : 'sod=desc';

    if ($sst === $col) {

        $q2 = ($sod === 'asc') ? 'sod=desc' : 'sod=asc';

    }</p>

<p>    $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');

    }</p>

<p>    $qstr = implode("&", $arr_query);

    return "<a href=\"".htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8')."?{$qstr}\">";

}</p>

<p>

 

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

답변에 대한 댓글 1개

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

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

10개월 전

glitter0gim 님~

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

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

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

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

답변에 대한 댓글 1개

g
glitter0gim
10개월 전
ㅠ ㅠ

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

10개월 전

죄송합니다.

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

 

</strong></p>

<p>/ 정렬

// 인덱스 필드가 아니면 정렬에 사용하지 않음

//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 : "";

}</p>

<p>if(!$sst)

    $sst  = "wr_num, wr_reply";</p>

<p>if ($sst) {

    $sql_order = " order by {$sst} {$sod} ";

}</p>

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

}</p>

<p><strong>

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

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

세크티
10개월 전

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

</p>

<pre>
<code>    $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}\">";</code></pre>

<p>

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

답변에 대한 댓글 1개

허당빵
10개월 전
감사합니다.
변화가 없습니다.
그대로 전체로 정렬이 됩니다.

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

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

로그인