공지사항이 일반리스트에서 중복으로보이지 않게하기..
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개
수정하신 list.php를 파일로 첨부해 주시기를 부탁드립니다.
/*공지사항글 중복으로 노출안되게하기 -_-;*/
$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] ";
}
로 수정하시면됩니다.
수영님 감사합니다~~
안그래도 이부분 질문드릴까 고민하고 있었는데.ㅋㅋ
역시 감동입니다~ ^^
글을 너무 어렵게? 써놔서... 그저 수정전, 수정후 식으로 해놨음 따라하기 좋았을 듯...
아님 파일을 첨부하시지... 여튼 열심히 하다가 포기네욤.
하나씩 따라하니 잘 됩니다.
감사합니다. ^^