오늘은 전체 검색 페이지 작업을 진행합니다.
Metronic Admin Template은 전체 검색 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
)
)
뭐 바로 작업 들어가죠 뭐...
너무 심플해서... 뭐...
아... 이건 좀...
버튼으로 해야겠어요. 클릭하고 싶어지도록요~
위 이미지는 버리고 새롭게 완료하였습니다.
검색횟수에 따라 색상을 별도로 주도록 하였고,
검색어 옆에 검색 횟수도 표시하도록 하였다.
완료된 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&sop=and&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에 게시판 별 검색 결과를 넣을 계획입니다.
상단 검색어 입력란에서 엔터와 검색 버튼이 동작하지 않아서
한참 고생하다가 간신히 해결했네요.
(원인은 Metronic Admin Template의 JS는 예술이고 저는 허접이라서 ㅠㅠ)
카테고리 리스트를 출력해야 하는데요.
skin에서는 /bbs/search.php 에서 만들어온 $str_board_list를 출력하고 있습니다.
<ul id="sch_res_board">
<li><a href="?<?php echo $search_query ?>&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&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으로 변경함.
게시판의 리스트 작업때도 페이징을 했었죠.
그누보드의 대부분 페이징 출력 부분은 /bbs 폴더 안에서 처리가 됩니다.
테마를 제작할때는 테마 내 파일에서 다시 만들어야 합니다.
전 전에 이미 함수까지 다 만들어놓았으니 그냥 가져옵니다.
// 게시판의 리스트에서 사용했던 코딩
echo get_paging_mt703($config['cf_write_pages'], $page, $total_page, get_pretty_url($bo_table, '', $qstr.'&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.'&gr_id='.$gr_id.'&srows='.$srows.'&onetable='.$onetable.'&page=');
// search.skin.php 에서 사용한 코딩
echo get_paging_mt703($config['cf_write_pages'], $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$search_query.'&gr_id='.$gr_id.'&srows='.$srows.'&onetable='.$onetable.'&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 .'&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.'&gr_id='.$gr_id.'&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.'&gr_id='.$gr_id.'&srows='.$srows.'&onetable='.$onetable.'&page=');
?>
</div>
</div>
</div>
<!-- } 전체검색 끝 -->
'재밌는 IT 개발 > 그누보드 테마 제작기(記)' 카테고리의 다른 글
그누보드 테마 제작 28 - 게시판 리스트 및 새글 페이지 모바일 화면 수정 개발 (4) | 2020.07.19 |
---|---|
그누보드 테마 제작 27 - 새글 페이지 개발 (2) | 2020.07.18 |
그누보드 테마 제작 25 - 관리자 선택 삭제/복사/이동 기능 개발 (3) | 2020.07.14 |
그누보드 테마 제작 24 - 갤러리 게시판 페이지 개발 (5) | 2020.07.13 |
그누보드 테마 제작 23 - 게시글 부가 페이지 개발 (2) | 2020.07.10 |
댓글