게시판 리스트에서 각 항목별로 소트 적용하는 방법
본문
게시판 리스트에서 리스트 부분에 wr_1 을 불러내고, 항목명을 아래와 같이 적용하면
오름차순 정렬은 실행되는데, 한번 정렬하고 나면 아무 동작을 하지 않네요.
항목명 옆에 ▲▼ 을 넣어서, 클릭시 오름차순과 내림차순으로 정렬될 수 있게 하려면
아래 코드를 어떻게 수정해야 할까요?
<th width="12%" scope="col"><?php echo subject_sort_link('wr_1', $qstr2, 1) ?>지역코드</a></th>
※ 추가질문
정렬하려는 대상이 문자가 아니라 숫자인 경우 (ex. wr_4 총매출) 숫자로 오름차순, 내림차순 정렬이 되게 하려면 어떻게 하면 될까요?
도움 부탁 드립니다.
감사합니다.
답변 2
board.php는 데이터 로직을 처리하고, list.skin.php는 UI를 렌더링(최신 그누 기준)
※ 정렬 상태의 토글 기능 구현 ;
항목명 옆에 ▲▼를 추가하여 사용자가 해당 항목명을 클릭했을 때,
오름차순과 내림차순 정렬이 번갈아가며 실행될 수 있도록 코드를 수정
※ 숫자 데이터를 올바르게 정렬하는 방법 ;
정렬하려는 데이터가 문자형이 아닌 숫자인 경우,
이를 기반으로 오름차순 및 내림차순 정렬이 정확히 작동하도록 설정하는 방법.
예를 들어, wr_4 컬럼이 총매출(숫자) 데이터를 가지고 있다면,
이를 숫자형으로 인식하여 올바른 정렬을 구현.
*board.php, 정렬 조건을 파라미터로 받도록 설정
// 기존 정렬 파라미터
$sort_field = isset($_GET['sort']) ? $_GET['sort'] : 'wr_datetime';
$sort_order = isset($_GET['order']) ? $_GET['order'] : 'desc';
// 보안 처리
$allowed_fields = ['wr_1', 'wr_2', 'wr_4', 'wr_datetime'];
if (!in_array($sort_field, $allowed_fields)) {
$sort_field = 'wr_datetime';
}
if (!in_array(strtolower($sort_order), ['asc', 'desc'])) {
$sort_order = 'desc';
}
// 쿼리 수정
$sql = "SELECT * FROM {$g5['write_table']}
WHERE wr_is_comment = 0
ORDER BY {$sort_field} {$sort_order}";
$result = sql_query($sql);
*list.skin.php, 각 항목에 정렬 버튼 및 상태 표시를 추가
<th>
<?php
$order = ($sort_field == 'wr_1' && $sort_order == 'asc') ? 'desc' : 'asc';
?>
<a href="?sort=wr_1&order=<?= $order ?>">
지역코드 <?= ($sort_field == 'wr_1' ? ($sort_order == 'asc' ? '▲' : '▼') : '') ?>
</a>
</th>
<th>
<?php
$order = ($sort_field == 'wr_4' && $sort_order == 'asc') ? 'desc' : 'asc';
?>
<a href="?sort=wr_4&order=<?= $order ?>">
총매출 <?= ($sort_field == 'wr_4' ? ($sort_order == 'asc' ? '▲' : '▼') : '') ?>
</a>
</th>
*숫자 정렬의 경우 SQL에서 별도의 캐스팅 처리를 할 수 있음
ORDER BY CAST(wr_4 AS UNSIGNED) ASC
<th width="12%" scope="col">지역코드<?php if($sst == "wr_1" && $sod=='asc') echo subject_sort_link('wr_1','','desc').'▼</a>'; else echo subject_sort_link('wr_1').'▲</a>'; ?></th>