공지사항이 일반리스트에서 중복으로보이지 않게하기.. > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

공지사항이 일반리스트에서 중복으로보이지 않게하기.. 정보

공지사항이 일반리스트에서 중복으로보이지 않게하기..

본문

6월 17일 수정되었습니다. 댓글을 읽어보지 못해 제가 빼먹은 부분을 적지 못하였습니다.

뒷북일지..도 모르겠으나.. 방법을 약간 달리해봤습니다..
장점은 sql서버에 약간이나마 부하를 덜어주는것..(공지사항이 있을때만 --;;)
단점은 수정하기가 조금 손이 많이간다는것..
그누버전 4.31.06 버전으로 설명드립니다.
라인수가 헷갈리지 않게 라인수대로 설명합니다..
붙여넣기 수정 신공이 좀 필요해서 ^^;;

1. 20라인 수정
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);  를
$sql_search = $where . get_sql_search($sca, $sfl, $stx, $sop);  //6번에서 처리된 $where를 붙임 쿼리 에러 방지.

2. 38~40 라인에 추가 및 수정
    $sql_search = "";  
    $total_count = $board[bo_count_write];

    //$sql_search = "";  //주석처리 6번에서 처리됨.
    $total_count = $board[bo_count_write] - $i;
//최종카운트에서 공지사항 수만큼 뺌
/*
최종적인 $total_count에서 $i를 빼지 않는 이유는
if ($sca || $stx) {
   $total_count = mysql_num_rows($result);  //== 이부분에서는 이미 검색쿼리($sql_search)를 사용했으므로 빼줄 필요가 없다.
} else {
    $total_count = $board[bo_count_write];  //==하지만 이부분은 공지사항이 포함된 갯수이므로 이곳에서만 공지사항 수를 빼주게 됩니다.
}
*/
3. 76라인 부근 수정
if ($sca || $stx)
{
    $sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
}
else
{
    if($sql_search) $sql_search .= " and ";
    $sql = " select * from $write_table where $sql_search wr_is_comment = 0 $sql_order limit $from_record, $board[bo_page_rows] ";
    //$sql = " select * from $write_table where wr_is_comment = 0 $sql_order limit $from_record, $board[bo_page_rows] ";
}
4. 84~103라인을 잘라내기
$list = array();
$i = 0;

if (!$sca && !$stx)
{
      ==중략==
}

5 잘라낸 부분을 16라인 빈줄에 혹은 12라인 빈줄에 붙여넣기

6. 붙여넣은 내용에 파란색 소스 추가
$sql_notice = ""; //쿼리구문 초기화
if (!$sca && !$stx)
{
    $arr_notice = split("\n", trim($board[bo_notice]));
    for ($k=0; $k<count($arr_notice); $k++)
    {
        if (trim($arr_notice[$k])=='') continue;

        $row = sql_fetch(" select * from $write_table where wr_id = '$arr_notice[$k]' ");

        if (!$row[wr_id]) continue;

        $list[$i] = get_list($row, $board, $board_skin_path, $board[bo_subject_len]);
        $list[$i][is_notice] = true;
        if($sql_notice)  //만약 sql_notice구문이 있다면
            $sql_notice .= ", '$row[wr_id]'";  //wr_id를 추가
        else
            $sql_notice = " wr_id NOT IN('$row[wr_id]'"; 
//기본구문 생성
        $i++;
    }
}
if($sql_notice) { //notice 쿼리 구문이 있다면
    $sql_notice .= ")";  //마지막 괄호를 닫아주고
    $where = " and ";  //검색 조건을 and로 바꿔준다. (쿼리 에러를 방지하기 위함.)
}
$sql_search = $sql_notice;  //$sql_search를 정의함.

이렇게 하시면 끝납니다.
조금 복잡시럽지요 --;;
생각해보면 간단할지도 모르겠습니다.
공지사항을 먼저 읽어와 리스트에서는 그 공지사항을 제외해서 검색해라~ 라는건데요
6번의 추가된 내용들이 검색 조건을 만들어 주는 것입니다.

참고.. 6번을 다르게 처리하는 방법.. 5번 붙여넣기를 한후 붙여넣은 마지막줄 다음줄에
if(trim($board[bo_notice])){
 $sql_search = " wr_id NOT IN (".str_replace("\n", "," ,str_replace("\r", "", trim($board[bo_notice]))).") ";
 $where = " and ";
}
//\r 을 삭제후 \n을 ,로 변경한다.
과같이 넣어준다..

추천
5

댓글 14개

아무리핻 안되네요.. 글리스트 번호가 마이너스로 나오고 공지사항은 역시 중복되네요...
수정하신 list.php를 파일로 첨부해 주시기를 부탁드립니다.
//찾으로왔다가 알아서햇삼..      "/bbs/list.php"  118 라인쯤 될거삼.. 기존소스 주석처리하고  붙여넣으삼

/*공지사항글  중복으로 노출안되게하기  -_-;*/
$noNotice = true;
while ($row = sql_fetch_array($result))
{

    for ($k=0; $k<count($arr_notice); $k++)
    {
if (trim($arr_notice[$k])== $row[wr_parent] ){
$noNotice = false;
break;
}else{
$noNotice = true;
}
}

if($noNotice){
// 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
if ($sca || $stx)
$row = sql_fetch(" select * from $write_table where wr_id = '$row[wr_parent]' ");

$list[$i] = get_list($row, $board, $board_skin_path, $board[bo_subject_len]);
if (strstr($sfl, "subject"))
$list[$i][subject] = search_font($stx, $list[$i][subject]);
$list[$i][is_notice] = false;
//$list[$i][num] = number_format($total_count - ($page - 1) * $board[bo_page_rows] - $k);
$list[$i][num] = $total_count - ($page - 1) * $board[bo_page_rows] - $k;

$i++;
$k++;
}

}

/*  기존소스
while ($row = sql_fetch_array($result))
{
    // 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
    if ($sca || $stx)
        $row = sql_fetch(" select * from $write_table where wr_id = '$row[wr_parent]' ");

    $list[$i] = get_list($row, $board, $board_skin_path, $board[bo_subject_len]);
    if (strstr($sfl, "subject"))
        $list[$i][subject] = search_font($stx, $list[$i][subject]);
    $list[$i][is_notice] = false;
    //$list[$i][num] = number_format($total_count - ($page - 1) * $board[bo_page_rows] - $k);
    $list[$i][num] = $total_count - ($page - 1) * $board[bo_page_rows] - $k;

    $i++;
    $k++;
}
*/
죄송합니다. 답글달리는걸 신경 못썼네요..
if ($sca || $stx)
{
    $sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
}
else
{
    $sql = " select * from $write_table where wr_is_comment = 0 $sql_order limit $from_record, $board[bo_page_rows] ";
}

이부분을 찾아
if ($sca || $stx)
{
    $sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
}
else
{
    if($sql_search) $sql_search .= " and "; //새로추가
    $sql = " select * from $write_table where $sql_search wr_is_comment = 0 $sql_order limit $from_record, $board[bo_page_rows] ";
}

로 수정하시면됩니다.
꼭 필요했던 기능인데 잘 되지 않네요. ^^;;
글을 너무 어렵게? 써놔서... 그저 수정전, 수정후 식으로 해놨음 따라하기 좋았을 듯...
아님 파일을 첨부하시지... 여튼 열심히 하다가 포기네욤.
전체 3,310 |RSS
그누4 팁자료실 내용 검색

회원로그인

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