검색할때 답글도 함께 보이기 ...

검색할때 답글도 함께 보이기 ...

QA

검색할때 답글도 함께 보이기 ...

본문

검색할때 답글도 함께 보이는 기능이 필요해서 커스텀 중인데

원하는 결과가 나오지 않아서 이렇게 질문을 등록합니다.

 

그누보드5.4 / bbs / list.php 커스텀 내용 입니다.

 

작동조건

1. test 게시판

2. 회원등급 2 이상

 

주요기능

1. 검색결과에 답변글도 함께 표시

2. 1:1 비공개 기능

 

 

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

// 분류 사용 여부
$is_category = false;
$category_option = '';
if ($board['bo_use_category']) {
    $is_category = true;
    $category_href = get_pretty_url($bo_table);

    $category_option .= '<li><a href="'.$category_href.'"';
    if ($sca=='')
        $category_option .= ' id="bo_cate_on"';
    $category_option .= '>전체</a></li>';

    $categories = explode('|', $board['bo_category_list']); // 구분자가 , 로 되어 있음
    for ($i=0; $i<count($categories); $i++) {
        $category = trim($categories[$i]);
        if ($category=='') continue;
        $category_option .= '<li><a href="'.(get_pretty_url($bo_table,'','sca='.urlencode($category))).'"';
        $category_msg = '';
        if ($category==$sca) { // 현재 선택된 카테고리라면
            $category_option .= ' id="bo_cate_on"';
            $category_msg = '<span class="sound_only">열린 분류 </span>';
        }
        $category_option .= '>'.$category_msg.$category.'</a></li>';
    }
}

$sop = strtolower($sop);
if ($sop != 'and' && $sop != 'or')
    $sop = 'and';

// 분류 선택 또는 검색어가 있다면
$stx = trim($stx);
//검색인지 아닌지 구분하는 변수 초기화
$is_search_bbs = false;

if ($sca || $stx || $stx === '0') {     //검색이면
    $is_search_bbs = true;      //검색구분변수 true 지정
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);

    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
    $row = sql_fetch($sql);
    $min_spt = (int)$row['min_wr_num'];

    if (!$spt) $spt = $min_spt;

    $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";

    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
    // 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
    //$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
    //$row = sql_fetch($sql);
    //$total_count = $row['cnt'];
    /*
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} ";
    $result = sql_query($sql);
    $total_count = sql_num_rows($result);
    */
    
    // 검색 답글도 함께 보기 -- 시작
    if ($member['mb_id'] && $member['mb_level'] < 2 && ($bo_table == 'test')) {
        $sql = " SELECT DISTINCT wr_parent FROM {$write_table} WHERE mb_id = '{$member['mb_id']}' AND {$sql_search} ";
    } else {
        $sql = " SELECT DISTINCT wr_parent FROM {$write_table} WHERE {$sql_search} "; //if($member['mb_level'] == '20') echo $sql;
    }
    echo "sql1 = ". $sql ."<br>";
    $result = sql_query($sql);
    $total_count = sql_num_rows($result);
    // 검색 답글도 함께 보기 -- 종료
    
} else {
    //$sql_search = "";

    //$total_count = $board['bo_count_write'];
    
    // 검색 답글도 함께 보기 -- 시작
    if (!$member['mb_id'] && ($bo_table == 'test')) {
        $total_count = 0;
    } else if ($member['mb_id'] && $member['mb_level'] < 2 && ($bo_table == 'test')) {
        $sql = " SELECT DISTINCT wr_parent FROM {$write_table} WHERE mb_id = '{$member['mb_id']}'";
        
        $result = sql_query($sql);
        $total_count = sql_num_rows($result);
    } else {
        $total_count = $board['bo_count_write'];
    }
    echo "sql2 = ". $sql ."<br>";
    // 검색 답글도 함께 보기 -- 종료
    
}

if(G5_IS_MOBILE) {
    $page_rows = $board['bo_mobile_page_rows'];
    $list_page_rows = $board['bo_mobile_page_rows'];
} else {
    $page_rows = $board['bo_page_rows'];
    $list_page_rows = $board['bo_page_rows'];
}

if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)

// 년도 2자리
$today2 = G5_TIME_YMD;

$list = array();
$i = 0;
$notice_count = 0;
$notice_array = array();

// 공지 처리
if (!$is_search_bbs) {
    $arr_notice = explode(',', trim($board['bo_notice']));
    $from_notice_idx = ($page - 1) * $page_rows;
    if($from_notice_idx < 0)
        $from_notice_idx = 0;
    $board_notice_count = count($arr_notice);

    for ($k=0; $k<$board_notice_count; $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;

        $notice_array[] = $row['wr_id'];

        if($k < $from_notice_idx) continue;

        $list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
        $list[$i]['is_notice'] = true;

        $i++;
        $notice_count++;

        if($notice_count >= $list_page_rows)
            break;
    }
}

$total_page  = ceil($total_count / $page_rows);  // 전체 페이지 계산
$from_record = ($page - 1) * $page_rows; // 시작 열을 구함

// 공지글이 있으면 변수에 반영
if(!empty($notice_array)) {
    $from_record -= count($notice_array);

    if($from_record < 0)
        $from_record = 0;

    if($notice_count > 0)
        $page_rows -= $notice_count;

    if($page_rows < 0)
        $page_rows = $list_page_rows;
}

// 관리자라면 CheckBox 보임
$is_checkbox = false;
if ($is_member && ($is_admin == 'super' || $group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id']))
    $is_checkbox = true;

// 정렬에 사용하는 QUERY_STRING
$qstr2 = 'bo_table='.$bo_table.'&sop='.$sop;

// 0 으로 나눌시 오류를 방지하기 위하여 값이 없으면 1 로 설정
$bo_gallery_cols = $board['bo_gallery_cols'] ? $board['bo_gallery_cols'] : 1;
$td_width = (int)(100 / $bo_gallery_cols);

// 정렬
// 인덱스 필드가 아니면 정렬에 사용하지 않음
//if (!$sst || ($sst && !(strstr($sst, 'wr_id') || strstr($sst, "wr_datetime")))) {
if (!$sst) {
    if ($board['bo_sort_field']) {
        //$sst = $board['bo_sort_field'];
        
        // 검색 답글도 함께 보기 -- 시작
        if ($bo_table == 'job') {
            $sst  = "wr_datetime, wr_reply";
        } else {
            $sst  = "wr_num, wr_reply";
        }
        // 검색 답글도 함께 보기 -- 종료
        
    } else {
        $sst  = "wr_num, wr_reply";
        $sod = "";
    }
} else {
    $board_sort_fields = get_board_sort_fields($board, 1);
    if (!$sod && array_key_exists($sst, $board_sort_fields)) {
        $sst = $board_sort_fields[$sst];
    } else {
        // 게시물 리스트의 정렬 대상 필드가 아니라면 공백으로 (nasca 님 09.06.16)
        // 리스트에서 다른 필드로 정렬을 하려면 아래의 코드에 해당 필드를 추가하세요.
        // $sst = preg_match("/^(wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
        $sst = preg_match("/^(wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
    }
}

if(!$sst)
    $sst  = "wr_num, wr_reply";

if ($sst) {
    $sql_order = " order by {$sst} {$sod} ";
}

if ($is_search_bbs) {
    //$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, {$page_rows} ";
    
    // 검색 답글도 함께 보기 -- 시작
    if($member['mb_id'] && $member['mb_level'] < 2 && ($bo_table == 'test')) {
        $strSQL = " SELECT wr_num FROM {$write_table} WHERE mb_id = '{$member['mb_id']}' and {$sql_search} {$sql_order} LIMIT {$from_record}, {$board['bo_page_rows']} ";
        if ($member['mb_id']=='happyjungcom') {
            echo "sql3-1 = ".$strSQL."<br>";
        }
    } else {
        $strSQL = " SELECT wr_num FROM {$write_table} WHERE {$sql_search} {$sql_order} LIMIT {$from_record}, {$board['bo_page_rows']} ";
        if ($member['mb_id']=='happyjungcom') {
            echo "sql3-2 = ".$strSQL."<br>";
        }
    }
    
    $result = sql_query($strSQL);
    $wr_num_in                    =    '';
    for ($i = 0; $row = sql_fetch_array($result); $i++) {
        if ($wr_num_in == '') {
            $wr_num_in            =    "'".$row['wr_num']."'";
        } else {
            $wr_num_in            =    $wr_num_in.",'".$row['wr_num']."'";
        }
    }
    
    if ($wr_num_in == '') {
        $strSQL = " SELECT wr_id FROM {$write_table} WHERE wr_num = '' ";
    } else {
        $strSQL = " SELECT wr_id FROM {$write_table} WHERE wr_num IN ({$wr_num_in}) ";
    }
    echo "sql4 = ". $strSQL ."<br>";
    $result = sql_query($strSQL);
    // 검색 답글도 함께 보기 -- 종료
    
} else {
    //$sql = " select * from {$write_table} where wr_is_comment = 0 ";
    //if(!empty($notice_array))
    //    $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
    //$sql .= " {$sql_order} limit {$from_record}, {$page_rows} ";
    
    // 검색 답글도 함께 보기 -- 시작
    if($member['mb_level'] > 1 || ($bo_table != 'test')) {
        $sql = " SELECT * FROM {$write_table} WHERE wr_is_comment = 0 ";
    } else {
        $sql = " SELECT * FROM {$write_table} WHERE wr_num in (SELECT wr_num FROM {$write_table} WHERE mb_id<>'' and mb_id='{$member['mb_id']}') and wr_is_comment = 0 ";
    }
    if(!empty($notice_array))
        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
    $sql .= " {$sql_order} limit {$from_record}, {$page_rows} ";
    $result = sql_query($sql);
    echo "sql5 = ". $sql ."<br>";
    // 검색 답글도 함께 보기 -- 종료
}

// 검색 답글도 함께 보기 -- 시작
$list = array();
// 검색 답글도 함께 보기 -- 종료

// 페이지의 공지개수가 목록수 보다 작을 때만 실행
if($page_rows > 0) {
    $result = sql_query($sql);

    $k = 0;

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

        $list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
        if (strstr($sfl, 'subject')) {
            $list[$i]['subject'] = search_font($stx, $list[$i]['subject']);
        }
        $list[$i]['is_notice'] = false;
        $list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count;
        $list[$i]['num'] = $list_num - $k;

        $i++;
        $k++;
    }
}

g5_latest_cache_data($board['bo_table'], $list);

$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, get_pretty_url($bo_table, '', $qstr.'&page='));

$list_href = '';
$prev_part_href = '';
$next_part_href = '';
if ($is_search_bbs) {
    $list_href = get_pretty_url($bo_table);

    $patterns = array('#&page=[0-9]*#', '#&spt=[0-9\-]*#');

    //if ($prev_spt >= $min_spt)
    $prev_spt = $spt - $config['cf_search_part'];
    if (isset($min_spt) && $prev_spt >= $min_spt) {
        $qstr1 = preg_replace($patterns, '', $qstr);
        $prev_part_href = get_pretty_url($bo_table,0,$qstr1.'&spt='.$prev_spt.'&page=1');
        $write_pages = page_insertbefore($write_pages, '<a href="'.$prev_part_href.'" class="pg_page pg_prev">이전검색</a>');
    }

    $next_spt = $spt + $config['cf_search_part'];
    if ($next_spt < 0) {
        $qstr1 = preg_replace($patterns, '', $qstr);
        $next_part_href = get_pretty_url($bo_table,0,$qstr1.'&spt='.$next_spt.'&page=1');
        $write_pages = page_insertafter($write_pages, '<a href="'.$next_part_href.'" class="pg_page pg_end">다음검색</a>');
    }
}


$write_href = '';
if ($member['mb_level'] >= $board['bo_write_level']) {
    $write_href = short_url_clean(G5_BBS_URL.'/write.php?bo_table='.$bo_table);
}

$nobr_begin = $nobr_end = "";
if (preg_match("/gecko|firefox/i", $_SERVER['HTTP_USER_AGENT'])) {
    $nobr_begin = '<nobr>';
    $nobr_end   = '</nobr>';
}

// RSS 보기 사용에 체크가 되어 있어야 RSS 보기 가능 061106
$rss_href = '';
if ($board['bo_use_rss_view']) {
    $rss_href = G5_BBS_URL.'/rss.php?bo_table='.$bo_table;
}

$stx = get_text(stripslashes($stx));
include_once($board_skin_path.'/list.skin.php');
?>
 

이 질문에 댓글 쓰기 :

답변 1

검색결과의 목록중에서 답글이 있는 글이면 답글도 같이 표시하고싶다가 맞나요?

답변을 작성하시기 전에 로그인 해주세요.
전체 55
QA 내용 검색

회원로그인

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