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

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을 ,로 변경한다.
과같이 넣어준다..

|

댓글 14개

아무리&#54651; 안되네요.. 글리스트 번호가 마이너스로 나오고 공지사항은 역시 중복되네요...
수정하신 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++;
}
*/
뒷북님의 소스를 적용하면 공지글이 중복으로 나오지는 않지만 게시글의 num이 같은 숫자로 나오는군요
ㅈㅅ... 그걸몰랏네욤. 담에 시간나면 -_-;
죄송합니다. 답글달리는걸 신경 못썼네요..
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] ";
}

로 수정하시면됩니다.
캬~~ 한방에 적용되네요~~ ^^

수영님 감사합니다~~

안그래도 이부분 질문드릴까 고민하고 있었는데.ㅋㅋ

역시 감동입니다~ ^^
공지 중복방지
꼭 필요했던 기능인데 잘 되지 않네요. ^^;;
글을 너무 어렵게? 써놔서... 그저 수정전, 수정후 식으로 해놨음 따라하기 좋았을 듯...
아님 파일을 첨부하시지... 여튼 열심히 하다가 포기네욤.
감사합니다.
이 기능때문에 고민 많이 했는데..
하나씩 따라하니 잘 됩니다.
감사합니다. ^^
감사합니다..적용했어요..^^
댓글을 작성하시려면 로그인이 필요합니다. 로그인

그누4 팁자료실

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

+
제목 글쓴이 날짜 조회
16년 전 조회 4,130
16년 전 조회 7,209
16년 전 조회 2,297
16년 전 조회 3,901
16년 전 조회 2,559
16년 전 조회 5,135
16년 전 조회 6,981
16년 전 조회 2,599
16년 전 조회 3,075
16년 전 조회 5,608
16년 전 조회 4,264
16년 전 조회 3,352
16년 전 조회 2,134
16년 전 조회 4,404
16년 전 조회 4,696
16년 전 조회 4,204
16년 전 조회 2,523
16년 전 조회 5,596
16년 전 조회 2,515
16년 전 조회 2,967
🐛 버그신고