특정필드를 검색하는 최신글로 뿌리는데 적용이 안되네요.

특정필드를 검색하는 최신글로 뿌리는데 적용이 안되네요.

QA

특정필드를 검색하는 최신글로 뿌리는데 적용이 안되네요.

본문

추운 주말인데 다들 감기 조심하세요~

 

이번에 최신글을 공부하면서 특정필드에서 XXX이 들어간 글을 검색해서 최신글로 뿌려주는 연습을 하고 있습니다.

G4에서 힌트를 얻어 복붙을 해보았는데 뜻대로 안되네요 ㅎㅎ

 

1. mwb.search.latest.lib.php 를 먼저 인클루드하고,

 

2. 최신글 불러오는 함수를 실행합니다.


<?php  echo mwb_search_latest("theme/basic","admin_gallery",10,25,"","wr_10","3");?> 

우선을 이렇게 불러오게 해보았습니다.

순서대로 "스킨", "불러올게시판", "갯수", "글자수", "카테고리", "검색필드", "검색어" 순입니다.

 

3. mwb.search.latest.lib.php 의 소스는 다음과 같습니다.


<?php
if (!defined('_GNUBOARD_')) exit;
 
// 최신글 추출
// $cache_time 캐시 갱신시간
function mwb_search_latest($skin_dir='', $bo_table, $rows=10, $subject_len=40, $sca="", $sfl = "", $stx="", $cache_time=1, $options='')
{
    global $g5;
 
    if (!$skin_dir) $skin_dir = 'basic';
 
    if(preg_match('#^theme/(.+)$#', $skin_dir, $match)) {
        if (G5_IS_MOBILE) {
            $latest_skin_path = G5_THEME_MOBILE_PATH.'/'.G5_SKIN_DIR.'/latest/'.$match[1];
            if(!is_dir($latest_skin_path))
                $latest_skin_path = G5_THEME_PATH.'/'.G5_SKIN_DIR.'/latest/'.$match[1];
            $latest_skin_url = str_replace(G5_PATH, G5_URL, $latest_skin_path);
        } else {
            $latest_skin_path = G5_THEME_PATH.'/'.G5_SKIN_DIR.'/latest/'.$match[1];
            $latest_skin_url = str_replace(G5_PATH, G5_URL, $latest_skin_path);
        }
        $skin_dir = $match[1];
    } else {
        if(G5_IS_MOBILE) {
            $latest_skin_path = G5_MOBILE_PATH.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
            $latest_skin_url  = G5_MOBILE_URL.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
        } else {
            $latest_skin_path = G5_SKIN_PATH.'/latest/'.$skin_dir;
            $latest_skin_url  = G5_SKIN_URL.'/latest/'.$skin_dir;
        }
    }
 
    $cache_fwrite = false;
    if(G5_USE_CACHE) {
        $cache_file = G5_DATA_PATH."/cache/latest-{$bo_table}-{$skin_dir}-{$rows}-{$subject_len}.php";
 
        if(!file_exists($cache_file)) {
            $cache_fwrite = true;
        } else {
            if($cache_time > 0) {
                $filetime = filemtime($cache_file);
                if($filetime && $filetime < (G5_SERVER_TIME - 3600 * $cache_time)) {
                    @unlink($cache_file);
                    $cache_fwrite = true;
                }
            }
 
            if(!$cache_fwrite)
                include($cache_file);
        }
    }
 
    if(!G5_USE_CACHE || $cache_fwrite) {
        $list = array();
        $sql_search = "";
 
        $sql = " select * from {$g5['board_table']} where bo_table = '{$bo_table}' ";
        $board = sql_fetch($sql);
        $bo_subject = get_text($board['bo_subject']);
 
        $tmp_write_table = $g5['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
 
        if ($sca || $stx) 
        { 
          $sql_search = get_sql_search($sca, $sfl, $stx); 
          $sql_search = "and ".$sql_search; 
        } 
 
        $sql = " select * from {$tmp_write_table} where wr_is_comment = 0 $sql_search order by wr_num limit 0, {$rows} ";
        $result = sql_query($sql);
        for ($i=0; $row = sql_fetch_array($result); $i++) {
            $list[$i] = get_list($row, $board, $latest_skin_url, $subject_len);
        }
 
        if($cache_fwrite) {
            $handle = fopen($cache_file, 'w');
            $cache_content = "<?php\nif (!defined('_GNUBOARD_')) exit;\n\$bo_subject='".$bo_subject."';\n\$list=".var_export($list, true)."?>";
            fwrite($handle, $cache_content);
            fclose($handle);
        }
    }
 
    ob_start();
    include $latest_skin_path.'/latest.skin.php';
    $content = ob_get_contents();
    ob_end_clean();
 
    return $content;
}
 
?>

이렇게 불러오면 될줄 알았는데 그냥 똑같은 내용만 계속 불러오네요..
추가한 부분은 6번, 63번,69번 라인입니다. 옵션을 지정해주소 옵션값이 있으면 쿼리를 한번 돌리고 그 값을 전체 쿼리에 추가하는 형태인데 잘 안되네요.
어디가 잘못된 것일까요?

이 질문에 댓글 쓰기 :

답변 1

캐시 때문 아닌가요? 쿼리를 이상 없을거 같은데 캐시에 걸리시는 확인해보고 그게 아니라면

 $sql " select * from {$tmp_write_table} where wr_is_comment = 0 $sql_search order by wr_num limit 0, {$rows} "; 

이부분이 원하는데로 나오시는지 확인해보세요

아하~ 맞습니다.. 캐시삭제를 해주니 정상적으로 작동하네요 ㅎㅎ
아주 기본적이고 당연한 것인데도 너무나 당연하니까 그냥 잊어버리고 마네요..
캐시는 생각도 안해보고 다른 곳에서만 찾아보니 당연히 답이 안나오는 것이었네요..

역시 캐시 때문에 편하면서도 불편한게 존재하는군요.
캐시 없이 불러올 수 있는 방법이 있으면 좋겠습니다.

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

회원로그인

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