카테고리가 선택된 상태에서 다시 정렬되게 하는 방법
본문
안녕하세요?
새해 복 많이 받으십시오~
전체가 아닌 카테고리가 선택된 상태에서 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}\">";
}
!-->!-->
배열에 $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 님~
해결은 못했지만, 정성이 담긴 답변 감사드립니다.
원본으로 했는데도 안 되는 것을 보니 다른 곳에서도 얽긴 것(?) 같습니다.
좋은 저녁 되십시오~^^)
답변을 작성하시기 전에 로그인 해주세요.