테스트 사이트 - 개발 중인 베타 버전입니다

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

구비 8년 전 조회 2,300

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

 

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

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

 

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

 

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

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

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

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

 

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

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
8년 전

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인