카테고리가 선택된 상태에서 다시 정렬되게 하는 방법 채택완료
안녕하세요?
새해 복 많이 받으십시오~
전체가 아닌 카테고리가 선택된 상태에서 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("&", $arr_query);</p>
<p> return "<a href=\"{$_SERVER['SCRIPT_NAME']}?{$qstr}\">";
}</p>
<p><strong>
도움을 주시면 감사하겠습니다.
답변 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";
}</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개
댓글을 작성하려면 로그인이 필요합니다.
glitter0gim 님~
해결은 못했지만, 정성이 담긴 답변 감사드립니다.
원본으로 했는데도 안 되는 것을 보니 다른 곳에서도 얽긴 것(?) 같습니다.
좋은 저녁 되십시오~^^)
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
죄송합니다.
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>
댓글을 작성하려면 로그인이 필요합니다.
배열에 $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개
변화가 없습니다.
그대로 전체로 정렬이 됩니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
그런데...제가 잘못 적용을 해서인지
알려주신 구문을 bbs/list.php에서 잘못 끼워 넣는 것 같습니다...ㅜㅜ
이렇게 저렇게 해봐도 wr_1 또는 wr_2로 다시 정렬을 하면
전체 리스트가 다 나오거나
'게시물이 없습니다.'라고 나타납니다.
그누보드 버전은 5.1 입니다.