latest.skin.php 에 특정필드값순으로 정렬하기...... > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

latest.skin.php 에 특정필드값순으로 정렬하기...... 정보

latest.skin.php 에 특정필드값순으로 정렬하기......

본문

안녕하세요......
보통 최근글 스킨의 정렬방식이  최근 글쓴순으로 되는걸로 알고 잇습니다.

하지만 에를 들어 wr_link2 필드에 날짜를 입력받는다면
최근글 정렬을 위 wr_link2 필드값의 날짜가 높은순으로 정렬되게 가능한가요?
for문에서 어떻게 하면 될거는 같은데 음......

아래는 제가 사용하는 최근글 스킨 코드입니다.

----------------------------------------------------------------------------------
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
?>

<table width=100% cellpadding=0 cellspacing=0>
<? for ($i=0; $i<count($list); $i++) { ?>
<tr>
<td height=14><img src='../img/main-aa.gif' align=absmiddle>

<?

    $from_date = str_replace("http://","",$list[$i][wr_link1]);
    $to_date = str_replace("http://","",$list[$i][wr_link2]);
    $from_date = substr($from_date,0,4)."년 ".sprintf("%2d",substr($from_date,4,2))."월 ".sprintf("%2d",substr($from_date,6,2))."일";
    $to_date  = substr($to_date,0,4)."년 ".sprintf("%2d",substr($to_date,4,2))."월 ".sprintf("%2d",substr($to_date,6,2))."일";
    $name = get_sideview($list[$i][mb_id], $list[$i][wr_name]);
 

 $time_ymdhi = date("YmdH:i", $g4['server_time']);
 $stime =  $list[$i][wr_link1].$list[$i][wr_6];
 $etime =  $list[$i][wr_link2].$list[$i][wr_7];


if ($time_ymdhi < $stime){ echo "<a href='{$list[$i]['href']}'>[{$list[$i]['ca_name']}] {$list[$i]['subject']}</a>"; }
elseif ($time_ymdhi < $etime){ echo "<a href='{$list[$i]['href']}'>[{$list[$i]['ca_name']}] {$list[$i]['subject']}</a>"; }
else{ echo "<span class=date>[{$list[$i]['ca_name']}] - 종료</span>"; }


$Co = sql_fetch("select * from $tmp_write_table where wr_num = {$list[$i][wr_num]} and wr_is_comment = 1 and wr_comment = {$list[$i][wr_comment]}");
$Co_datetime = substr($Co[wr_datetime],0,-9);
$Co_datetime = substr($Co_datetime,0,4).substr($Co_datetime,5,2).substr($Co_datetime,8,2);
$To_datetime = date("Ymd");

if($To_datetime - $Co_datetime < 2){
    echo " <span class='fontgreen text8 fb'>+{$list[$i][comment_cnt]}</span>";
}else
    echo " <span class='date fb'>{$list[$i][comment_cnt]}</span>";




            echo " " . $list[$i]['icon_new'];
            echo " " . $list[$i]['icon_secret'];
            ?>
</td>
</tr>
<tr>
<td height=8></td>
</tr>
<? } ?>

<? if (count($list) == 0) { ?><tr><td colspan=4 align=center height=50><font color=#6A6A6A>게시물이 없습니다.</a></td></tr><? } ?>

</table>

댓글 전체

안녕하세요, 히어1님. ^^
우선, list.skin.php에 넘어오는 최신글 배열 ($list)는, 말씀하신대로, 글작성시간 역순으로 정해진 수만큼 담아져서 옵니다.
이렇게 넘어온 내용만을 다시 정렬하는 방법은, usort 등의 함수로 하실 수는 있습니다.

예:
function cmp($a, $b)
{
    return strcmp($a["wr_link2"], $b["wr_link2"]);
}

usort($list, "cmp");

하지만, 해당 $list 배열이 이미 글작성 순서로 선정된 글들이기에, 해당 게시판의 모든 글중 wr_link2 로 가장 최근글들이라고 볼 수 없습니다.  최악의 경우, 전혀 다른 결과를 보실 수도 있고요.

한가지 대안은, latest() 함수가 아닌, 새로 지정된 함수 (예: latest_wr_link2 )로 원하시는 글을 뽑아서 latest 스킨을 이용하는 방법이 있습니다. ( 보편적으로 사용되는 방법입니다. )
스킨에서 하지마시고 전진님 말씀처럼 latest함수를 하나더 만들어도 되고
아래처럼 하세요

latest함수에서 아래부분을 수정합니다
$sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_num limit 0, $rows ";

<수정 후 >
$order="wr_num";
if( $options=='wr_link2') $order="wr_link2 desc";
$sql = " select * from $tmp_write_table where wr_is_comment = 0 order by $order limit 0, $rows ";

호출시
echo latest("basic", '테이블명', 10, 70 , 'wr_link2');

기존대로 정렬시
echo latest("basic", '테이블명', 10, 70 );
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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