본문 바로가기
재밌는 IT 개발/그누보드 테마 제작기(記)

그누보드 테마 제작 26 - 전체 검색 페이지 개발

by 만수킴 2020. 7. 16.

오늘은 전체 검색 페이지 작업을 진행합니다.

Metronic Admin Template은 전체 검색 UI를 따로 있습니다.
전 검색어 입력란 하단에,
인기검색어나 최근 검색어...
먼일일지도 모르지만, 자동완성 검색어까지도 넣을 수 있다면 좋을 것 같네요.

Metronic Admin에서 제공하는 검색 화면 UI


방향을 정했으니, 이제 그누의 기본 테마를 살펴보겠습니다.

자주 보던 익숙한 그누보드의 전체 검색 화면

오늘은 위 화면을 만들어야 하는군요.
그 전에 그누보드 기본 테마의 상단에 있는 검색창...
그걸 먼저 처리를 하겠습니다.
(검색이 되어야 전체 화면을 만들 수 있으니까요)

항상 하던 순서대로,
그누 기본 테마의 소스를 살펴봅니다.
(/theme/basic/head.php 부분에 있겠죠?)

<div class="hd_sch_wr">
    <fieldset id="hd_sch">
        <legend>사이트 내 전체검색</legend>
        <form name="fsearchbox" method="get" action="<?php echo G5_BBS_URL ?>/search.php" onsubmit="return fsearchbox_submit(this);">
        <input type="hidden" name="sfl" value="wr_subject||wr_content">
        <input type="hidden" name="sop" value="and">
        <label for="sch_stx" class="sound_only">검색어 필수</label>
        <input type="text" name="stx" id="sch_stx" maxlength="20" placeholder="검색어를 입력해주세요">
        <button type="submit" id="sch_submit" value="검색"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
        </form>

        <script>
        function fsearchbox_submit(f)
        {
            if (f.stx.value.length < 2) {
                alert("검색어는 두글자 이상 입력하십시오.");
                f.stx.select();
                f.stx.focus();
                return false;
            }

            // 검색에 많은 부하가 걸리는 경우 이 주석을 제거하세요.
            var cnt = 0;
            for (var i=0; i<f.stx.value.length; i++) {
                if (f.stx.value.charAt(i) == ' ')
                    cnt++;
            }

            if (cnt > 1) {
                alert("빠른 검색을 위하여 검색어에 공백은 한개만 입력할 수 있습니다.");
                f.stx.select();
                f.stx.focus();
                return false;
            }

            return true;
        }
        </script>

    </fieldset>

    <?php echo popular('theme/basic'); // 인기검색어, 테마의 스킨을 사용하려면 스킨을 theme/basic 과 같이 지정  ?>
</div>

위 내용을 제작중인 테마로 옮기겠습니다.

검색어를 입력하여 조회한 결과 화면

우측의 검색어 아래 화면은 인기검색어를 배치해야겠다.
세로로 너무 길어 허전하겠지만, 없는것보단 낫겠지...
경우에 따라서 "최근검색어"나 "내가 검색한 검색어" 등도 가능할 것이라고 본다.
인기검색어의 스킨은 
/theme/mt703/skin/popular/basic/popular.skin.php 입니다.
$list 배열의 값을 확인합니다.

검색어 배열 => Array
(
    [0] => Array (
            [pp_word] => 공지
            [cnt] => 2
        )
    [1] => Array (
            [pp_word] => abcdedfg
            [cnt] => 1
        )
    [2] => Array (
            [pp_word] => ㅁ
            [cnt] => 1
        )
)

뭐 바로 작업 들어가죠 뭐...
너무 심플해서... 뭐...
아... 이건 좀...

기존 UI를 이용한 결과 모습

버튼으로 해야겠어요. 클릭하고 싶어지도록요~
위 이미지는 버리고 새롭게 완료하였습니다.
검색횟수에 따라 색상을 별도로 주도록 하였고,
검색어 옆에 검색 횟수도 표시하도록 하였다.

인기검색어를 버튼으로 배치하고 검색횟수도 표시해보았다.

완료된 popular.skin.php의 소스입니다.

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

// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
//add_stylesheet('<link rel="stylesheet" href="'.$popular_skin_url.'/style.css">', 0);
//add_javascript('<script src="'.G5_JS_URL.'/owlcarousel/owl.carousel.min.js"></script>', 10);
//add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/owlcarousel/owl.carousel.min.css">', 10);
?>


<!-- 인기검색어 시작 { -->


<!--begin::Section-->
<div class="font-size-sm text-primary font-weight-bolder text-uppercase mb-2">
    인기 검색어
</div>
<div class="mb-10">

<?php                                       //tLog("검색어 배열", $list);
// 검색 횟수 추가, 검색횟수에 따라 인기검색어 버튼의 색상을 변경.
//  ==> 100번 이상 : 빨간색(danger)
//  ==> 50번 이상 : 파란색(primary)
//  ==> 25번 이상 : 초록색(success)
//  ==> 10번 이상 : 주황색(warning)
//  ==> 10번 이하 : 검정(dark)
$cntDanger = 100;
$cntPrimary = 50;
$cntSuccess = 25;
$cntWarning = 10;
if( isset($list) && is_array($list) ) {
    for ($i=0; $i<count($list); $i++) {
        $colorBtn = "";
        if ( $list[$i]["cnt"] >= $cntDanger ) $colorBtn = "danger";
        else if ( $list[$i]["cnt"] >= $cntPrimary ) $colorBtn = "primary";
        else if ( $list[$i]["cnt"] >= $cntSuccess ) $colorBtn = "success";
        else if ( $list[$i]["cnt"] >= $cntWarning ) $colorBtn = "warning";
        else                                        $colorBtn = "dark";
?>
    <a href="<?php echo G5_BBS_URL ?>/search.php?sfl=wr_subject&amp;sop=and&amp;stx=<?php echo urlencode($list[$i]['pp_word']) ?>"
            class="btn btn-light-<?php echo $colorBtn; ?> font-weight-bold mr-2 mb-2"><?php echo get_text($list[$i]['pp_word']); ?>
                    <span class="label label-rounded ml-1"><?php echo get_text($list[$i]['cnt']); ?></span></a>
<?php
    }   //end for
}   //end if
?>

</div>
<!--end::Section-->


<!-- } 인기검색어 끝 -->

이제 전체검색 결과 화면을 만들어야 겠습니다.
/bbs/search.php 를 찾아가 Skin의 경로를 알아봅니다.
/theme/mt703/skin/search/basic/ 디렉토리네요.
search.skin.php 입니다.
상단에 있는 add_stylesheet 함수 실행 줄을 주석 처리합니다.
더 난리가 났네요. ㅠㅠ

완전히 깨져버린 전체 검색 화면의 모습

적당한 UI를 못찾고 있습니다.
화면 만드는거 이제 징글징글하네요. 흠...
간신히 검색어 화면이 대충 완료되었네요.
별거 없죠... 근데 이게 왜 이리 오래 걸리는지 모르겠어요. ㅡㅜ;;
상단에서 검색어를 입력하고, 
하단 Card Box에 게시판 별 검색 결과를 넣을 계획입니다.

상단에 검색 박스를 위치하고, 하단 Card box에 각 게시판의 검색결과


상단 검색어 입력란에서 엔터와 검색 버튼이 동작하지 않아서 
한참 고생하다가 간신히 해결했네요.
(원인은 Metronic Admin Template의 JS는 예술이고 저는 허접이라서 ㅠㅠ)

카테고리 리스트를 출력해야 하는데요.
skin에서는 /bbs/search.php 에서 만들어온 $str_board_list를 출력하고 있습니다.

    <ul id="sch_res_board">
        <li><a href="?<?php echo $search_query ?>&amp;gr_id=<?php echo $gr_id ?>" <?php echo $sch_all ?>>전체게시판</a></li>
        <?php echo $str_board_list; ?>
    </ul>

즉, 이것 역시 저 리스트를 쓸 수 없고,
search.php에서 해당 구문을 가져와 작업을 해야 하죠.
(그누보드가 이런 부분은 애초부터 스킨에 넣어야 하는게 아닌가 하는 생각이 드네요.)
(게시판 리스트의 category 출력도 같은 상황이었습니다.)

테마 이외의 폴더는 수정할 수 없으니, 저 로직은 그대로 존재할거고... 
서버 리소스 낭비가 은근히 있을 것 같네요.
어찌 생각해보면 SKIN 폴더는 주로 디자이너의 영역이니
저런 복잡한 개발 로직을 넣기도 좀 무리가 있긴 하네요
암튼... 저는...
아래와 같이 스킨에서 카테고리 출력 작업을 하였습니다.
(작업 소스는 포스팅의 마지막에 올려놓을게요)

전체검색 화면 중 카테고리 분류 완료 모습

 

이제 남은건 리스트 와 페이징 작업입니다.
리스트 작업 진행합니다.
for문이 엄청 뭐 복잡하게 돌아가는데... 정신이 하나도 없네요. 
for ($idx=$table_index, $k=0; $idx<count($search_table) && $k<$rows; $idx++) {
... 중략 ...
for ($i=0; $i<count($list[$idx]) && $k<$rows; $i++, $k++) {

위의 for는 각 게시판을 순환하는 것이고,
아래의 for는 게시판의 글을 가져오는 것이라고 보여집니다.
$search_table과 $list 를 로그로 찍어봅니다.
뭐가 어떻게 오는지를 봐야겠죠?
(사실 게시판 리스트 작업할때 $list와 같을거라고 생각은 됩니다만...)

// === $search_table 배열 변수의 데이터
search_table => Array
(
    [0] => free
    [1] => gallery
    [2] => notice
    [3] => qa
    [4] => free
    [5] => gallery
    [6] => notice
    [7] => qa
)

// === $list 배열 변수의 데이터
list => Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [wr_id] => 14
                    [wr_num] => -8
                    [wr_reply] => 
                    [wr_parent] => 14
                    [wr_is_comment] => 0
                    [wr_comment] => 0
                    [wr_comment_reply] => 
                    [ca_name] => 카테고리-5
                    [wr_option] => html1,mail
                    [wr_subject] => 언제 나오냐.. 페이징....
                    [wr_content] => 글쓰기 기본 내용입니다.언제 나오냐.. 페이징...<p>언제 나오냐.. 페이징....</p>
                    [wr_seo_title] => 언제-나오냐-페이징
                    [wr_link1] => 
                    [wr_link2] => 
                    [wr_link1_hit] => 0
                    [wr_link2_hit] => 0
                    [wr_hit] => 4
                    [wr_good] => 0
                    [wr_nogood] => 0
                    [mb_id] => hunnovsi
                    [wr_password] => 
                    [wr_name] => 최고관리자
                    [wr_email] => tank@tank.com
                    [wr_homepage] => http://mansu.kim
                    [wr_datetime] => 2020-07-02 22:16:48
                    [wr_file] => 0
                    [wr_last] => 2020-07-02 22:16:48
                    [wr_ip] => 127.0.0.1
                    [wr_facebook_user] => 
                    [wr_twitter_user] => 
                    [wr_1] => 
                    [wr_2] => 
                    [wr_3] => 
                    [wr_4] => 
                    [wr_5] => 
                    [wr_6] => 
                    [wr_7] => 
                    [wr_8] => 
                    [wr_9] => 
                    [wr_10] => 
                    [href] => http://mansu.kim/bbs/board.php?bo_table=free&amp;wr_id=14
                    [subject] => 언제 나오냐.. 페이징....
                    [content] => 글쓰기 기본 내용입니다.언제 나오냐.. 페이징....언제 나오냐.. 페이…
                    [name] => <span c   ... 중략 ...ript></span>
                )

        )

    [1] => Array  ... 이하 생략

딱히 별거 없습니다.
테마 제작하는 입장에서는 가능한 "wr_"이 붙은 필드만 사용하면 됩니다.
"wr_" 없는 것들은 그누 기본 테마에 맞춘 HTML이 붙어서 온다고 판단해도 무방합니다.
이제 코딩만 옮기면 되겠네요.

금방 끝날 줄 알았는데, 반나절은 걸린 것 같네요.
어려웠던 점은...
카테고리 버튼을 배열하는 부분에서 오래 걸렸구요.
그 다음은 복잡하게 돌아가는 이중 for문... 
그걸 이해하는데도 시간이 걸렸습니다.
마지막으로 이미지가 있는 게시물일 경우
이미지를 보여주고 싶어 추가 작업한 것이 또 상당히 시간을 뺐었구요.

그래도 여차 저차 해냈습니다. ^^

완료된 전체검색 페이지의 화면
완료된 전체검색 페이지의 화면

 

아... 페이징이 빠졌네요....
페이징 영역이 나오게 하기 위하여 
/bbs/search.php에 가서 $srows 변수에 3을 넣어줍니다.
(기본이 10개인 듯 합니다. 그냥 하면 보이지 않아 놓칠 수 있는 부분이죠.)

// /bbs/search.php의 21라인
if (!$srows) $srows = 10; // 한페이지에 출력하는 검색 행수
$srows = 3;  // 테스트를 위하여 무조건 3으로 변경함.

$srows 변수를 강제로 줄여 나타난 페이징의 모습

게시판의 리스트 작업때도 페이징을 했었죠.
그누보드의 대부분 페이징 출력 부분은 /bbs 폴더 안에서 처리가 됩니다.
테마를 제작할때는 테마 내 파일에서 다시 만들어야 합니다.
전 전에 이미 함수까지 다 만들어놓았으니 그냥 가져옵니다.

// 게시판의 리스트에서 사용했던 코딩
echo get_paging_mt703($config['cf_write_pages'], $page, $total_page, get_pretty_url($bo_table, '', $qstr.'&amp;page='));

// /bbs/search.php 에서 사용하고 있는 코딩
$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$search_query.'&amp;gr_id='.$gr_id.'&amp;srows='.$srows.'&amp;onetable='.$onetable.'&amp;page=');

// search.skin.php 에서 사용한 코딩
echo get_paging_mt703($config['cf_write_pages'], $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$search_query.'&amp;gr_id='.$gr_id.'&amp;srows='.$srows.'&amp;onetable='.$onetable.'&amp;page=');

이렇게 해서, 페이징까지 완료가 되었습니다.
(페이징 작업하면서 썸네일 이미지도 좀 더 키워줬구요~)

전체화면 검색 화면의 페이징까지 완료된 모습

 

정말이지 금방 끝날거라고 생각했었는데요.
오만이었고, 만용이었나봅니다.
하루하고 반나절이 걸린 작업이 되었네요.

이제 뭐가 남았을까요?
자잘한 것들이 꽤 남아있을텐데...
음... 기억이... 흠냐...

다음 포스팅때 또 찾아뵐게요~~~
항상 행복하시길 바래요~~~

아래는 search.skin.php의 소스 내용입니다.

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

// search.php에서 만들어진 이 파일은 그누 기본테마에 맞추어져 있음으로 테마에 맞게 재수정해야 한다. by tank. at 200707.
$group_select = '<label for="gr_id" class="sound_only">게시판 그룹선택</label><select name="gr_id" id="gr_id" class="form-control form-control-lg select"><option value="">전체 분류';
$sql = " select gr_id, gr_subject from {$g5['group_table']} order by gr_id ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
    $group_select .= "<option value=\"".$row['gr_id']."\"".get_selected($_GET['gr_id'], $row['gr_id']).">".$row['gr_subject']."</option>";
$group_select .= '</select>';


// Category 영역의 Html이 바뀌었기에, 테마에서 새로 만들어준다. by tank. at 200708.
$arr_category_button_html = array();
// 전체 카테고리 미리 삽입
array_push($arr_category_button_html, '<button type="button" onclick="location.href=\'?'. $search_query .'&amp;gr_id='. $gr_id .'\';" class="btn '. ($onetable ? "btn-outline-secondary" : "btn-primary") .' mr-3"><span class="font-weight-bold mr-2">전체 게시판</span></button>');
for ($i=0; $i<count($g5_search['tables']); $i++) {
    $tmp_write_table = $g5['write_prefix'] . $g5_search['tables'][$i];

    $sql = " select wr_id from {$tmp_write_table} where {$sql_search} ";
    $result = sql_query($sql, false);
    $row['cnt'] = @sql_num_rows($result);

    $total_count += $row['cnt'];
    if ( $row['cnt'] ) {
        $sql2 = " select bo_subject, bo_mobile_subject from {$g5['board_table']} where bo_table = '{$g5_search['tables'][$i]}' ";
        $row2 = sql_fetch($sql2);

        $tmpHtml = "";
        $tmpHtml = '<button type="button" onclick="location.href=\''. $_SERVER['SCRIPT_NAME'].'?'.$search_query.'&amp;gr_id='.$gr_id.'&amp;onetable='.$g5_search['tables'][$i] .'\';" ';
        if ($onetable == $g5_search['tables'][$i])
            $tmpHtml .= 'class="btn btn-primary mr-3" >';
        else
            $tmpHtml .= 'class="btn btn-outline-secondary mr-3" >';
        $tmpHtml .= '<span class="font-weight-bold mr-2">'.
                        ((G5_IS_MOBILE && $row2['bo_mobile_subject']) ? $row2['bo_mobile_subject'] : $row2['bo_subject']) .
                        '</span>'.
                        '<span class="font-weight-bold">'.$row['cnt'].'</span>'.
                    '</button>';
        array_push($arr_category_button_html, $tmpHtml);
    }
}



// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
//add_stylesheet('<link rel="stylesheet" href="'.$search_skin_url.'/style.css">', 0);
?>

<?php include G5_THEME_PARTIALS_PATH ."/_subheader/subheader-v1.php"; ?>



<!-- 전체검색 시작 { -->
<div class="d-flex flex-column-fluid">
    <!--begin::Container-->
    <div class="container">






<!--begin::검색영역-->
<div class="card card-custom gutter-b mt-5">
    <!--begin::Body-->
    <div class="card-body bg-dark-o-30 rounded py-10">

        <form name="fsearch" onsubmit="return fsearch_submit(this);" method="get">
        <input type="hidden" name="srows" value="<?php echo $srows ?>">

            <div class="form-row">
                <div class="col-2">
                    <?php echo $group_select ?>
                    <script>document.getElementById("gr_id").value = "<?php echo $gr_id ?>";</script>
                </div>
                <div class="col-2">
                    <label for="sfl" class="sound_only">검색조건</label>
                    <select name="sfl" id="sfl" class="form-control form-control-lg">
                        <option value="wr_subject||wr_content"<?php echo get_selected($_GET['sfl'], "wr_subject||wr_content") ?>>제목+내용</option>
                        <option value="wr_subject"<?php echo get_selected($_GET['sfl'], "wr_subject") ?>>제목</option>
                        <option value="wr_content"<?php echo get_selected($_GET['sfl'], "wr_content") ?>>내용</option>
                        <option value="mb_id"<?php echo get_selected($_GET['sfl'], "mb_id") ?>>회원아이디</option>
                        <option value="wr_name"<?php echo get_selected($_GET['sfl'], "wr_name") ?>>이름</option>
                    </select>
                </div>
                <div class="col">
                    <label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
                    <input type="text" name="stx" value="<?php echo $text_stx ?>" id="stx" required class="form-control form-control-lg frm_input">
                </div>
                <div class="col-4">
                    <button type="submit" class="btn btn-dark btn_submit"><i class="fa fa-search" aria-hidden="true"></i> 검색</button>
                    <div class="switch_field" style="padding-top: 3px;padding-bottom: 0px;">
                        <input type="radio" value="and" <?php echo ($sop == "and") ? "checked" : ""; ?> id="sop_and" name="sop">
                        <label for="sop_and">AND</label>
                        <input type="radio" value="or" <?php echo ($sop == "or") ? "checked" : ""; ?> id="sop_or" name="sop" >
                        <label for="sop_or">OR</label>
                    </div>
                </div>

                <script>
                function fsearch_submit(f)
                {
                    if (f.stx.value.length < 2) {
                        alert("검색어는 두글자 이상 입력하십시오.");
                        f.stx.select();
                        f.stx.focus();
                        return false;
                    }

                    // 검색에 많은 부하가 걸리는 경우 이 주석을 제거하세요.
                    var cnt = 0;
                    for (var i=0; i<f.stx.value.length; i++) {
                        if (f.stx.value.charAt(i) == ' ')
                            cnt++;
                    }

                    if (cnt > 1) {
                        alert("빠른 검색을 위하여 검색어에 공백은 한개만 입력할 수 있습니다.");
                        f.stx.select();
                        f.stx.focus();
                        return false;
                    }

                    f.action = "";
                    return true;
                }
                </script>
            </div>
        </form>
    </div>
    <!--end::Body-->

    <?php
    if ($stx) {
        if ($board_count) {
    ?>
    <!--begin::footer-->
    <div class="card-footer bg-dark-o-10 rounded pt-5 mb-0">
        <div class="row bg-success-o-30 text-dark-75 font-size-lg py-5 px-4">
            <span class="font-size-h3 col"><span class="font-weight-bold font-size-h3 text-danger"><?php echo $stx ?></span> 전체검색 결과</span>
            <span class="col-2">게시판 <?php echo $board_count ?>개</span>
            <span class="col-2">게시물 <?php echo number_format($total_count) ?>개</span>
            <span class="col-2"><?php echo number_format($page) ?>/<?php echo number_format($total_page) ?> 페이지 열람 중</span>
        </div>

                <!--begin::Category-->
                <div class="col-12 col-sm-12 align-items-start bo_cate pt-5">
                    <?php
                    for ( $i=0; $i<count($arr_category_button_html); $i++ )
                        echo $arr_category_button_html[$i];
                    ?>
                </div>
                <!--end::Category-->

    </div>
    <!--end::footer-->
    <?php
        } else {
    ?>
    <!--begin::footer-->
    <div class="card-footer bg-dark-o-10 rounded pt-5 mb-0">
        <div class="row bg-success-o-30 text-dark-75 font-size-lg py-5 px-4">
            <span class="font-size-h3 col-12 font-weight-bold font-size-h3 text-center">검색된 자료가 하나도 없습니다.</span>
        </div>
    </div>
    <!--end::footer-->
    <?php

        }
    }
    ?>
</div>
<!--end::검색 영역-->



<!--begin::각 게시판 검색 결과-->
<?php /* if ($stx && $board_count) { ?><section class="sch_res_list"><?php } */ ?>
<?php                                                                               //tLog("search_table", $search_table);
$k=0;
for ($idx=$table_index, $k=0; $idx<count($search_table) && $k<$rows; $idx++) {
?>
<div class="card card-custom mt-3">
    <!--begin::Header-->
    <div class="card-header border-0 mt-5">
        <h3 class="card-title align-items-start flex-column text-dark">
            <a href="<?php echo get_pretty_url($search_table[$idx], '', $search_query); ?>">
                <span class="font-weight-bolder text-dark"><?php echo $bo_subject[$idx] ?> 게시판 내 검색 결과</span>
            </a>
        </h3>
        <div class="card-toolbar">
            <a href="<?php echo get_pretty_url($search_table[$idx], '', $search_query); ?>">
                <span class="text-muted mt-3 font-weight-bold font-size-sm">더보기</span>
            </a>
        </div>
    </div>
    <!--end::Header-->
    <!--begin::Body-->
    <div class="card-body pt-2">
    <?php                                                                           //tLog("list", $list);
    for ($i=0; $i<count($list[$idx]) && $k<$rows; $i++, $k++) {     //echo "====> ". $i ."</br>";
        if ($list[$idx][$i]['wr_is_comment']) {
            $comment_def = '<span class="cmt_def"><i class="fa fa-commenting-o" aria-hidden="true"></i><span class="sound_only">댓글</span></span> ';
            $comment_href = '#c_'.$list[$idx][$i]['wr_id'];
        } else {
            $comment_def = '';
            $comment_href = '';
        }

        // 이미지 출력을 위해 추가함.
        $thumb = get_list_thumbnail($search_table[$idx], $list[$idx][$i]['wr_id'], 135, 90, false, true);
        if($thumb['src']) { $img_src = $thumb['src']; }
        else { $img_src = ''; }             //tLog($search_table[$idx] ." | ". $list[$idx][$i]['wr_id'] ." | ". $img_src, $thumb);
    ?>
        <!--begin::Item-->
        <div class="d-flex align-items-center mb-10">
            <?php if ( $list[$idx][$i]['wr_file'] && $img_src ) { ?>
            <!--begin::Symbol-->
            <div class="symbol symbol-90 symbol-2by3 flex-shrink-0 mr-4">
                <div class="symbol-label" style="background-image: url('<?php echo $img_src; ?>')"></div>
            </div>
            <!--end::Symbol-->
            <?php } ?>
            <!--begin::Section-->
            <div class="d-flex flex-column flex-grow-1">
                <!--begin::Title-->
                <div>
                    <a href="<?php echo $list[$idx][$i]['href'] ?><?php echo $comment_href ?>" target="_blank" class="btn btn-icon btn-light-primary pulse pulse-primary">
                        <i class="fa fa-window-restore"></i>
                        <span class="pulse-ring"></span>
                        <span class="sound_only">새창</span>
                    </a>
                    <a href="<?php echo $list[$idx][$i]['href'] ?>" class="text-dark font-weight-bolder font-size-lg text-hover-primary mb-1">
                        <?php echo $comment_def ?><?php echo search_font_mt703($stx, $list[$idx][$i]['subject']); ?>
                    </a>
                </div>
                <!--end::Title-->
                <!--begin::Desc-->
                <span class="text-dark-50 font-weight-normal font-size-sm">
                    <?php echo search_font_mt703($stx, $list[$idx][$i]['content']); ?>
                </span>
                <!--begin::Desc-->
                <!--begin::Desc-->
                <div class="sch_info">
                    <?php echo $list[$idx][$i]['name'] ?>
                    <span class="sch_datetime"><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo $list[$idx][$i]['wr_datetime'] ?></span>
                </div>
                <!--begin::Desc-->
            </div>
            <!--end::Section-->
        </div>
        <!--end::Item-->
    <?php
    }
    ?>
    </div>
    <!--end::Body-->
</div>
<?php }     //end for?>
<?php /*if ($stx && $board_count) {  ?></section><?php } */ ?>
    <!--end::각 게시판 검색 결과-->

<div class="p-3 mb-2 bg-white rounded text-dark my-5">
<?php
    echo get_paging_mt703($config['cf_write_pages'], $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$search_query.'&amp;gr_id='.$gr_id.'&amp;srows='.$srows.'&amp;onetable='.$onetable.'&amp;page=');
?>
</div>


    </div>
</div>
<!-- } 전체검색 끝 -->

댓글