초보 그누보드 사용자 질문 전체검색 페이징 처리 질문요 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

초보 그누보드 사용자 질문 전체검색 페이징 처리 질문요 정보

초보 그누보드 사용자 질문 전체검색 페이징 처리 질문요

본문

php 다룬지 2주 밖에 안돼는 초보 입니다.
그누보드를 이용해서 전체검색중 특정그룹만 선택하게 해 놓고 조건을 넣어서 검색을 하게 했습니다
일단 검색은 돼는데 페이징이 문제가 있어서 적어 봅니다.
페이징은 제대로 나온데 첫페이지에서 2번째 페이지 넘기면 게시물이 없다고 뜨네요..
이 문제 를 어떻게 해결해야 할찌 고민하다 보니 스킨 쪽이 아닌가해서 스킨쪽을 보니 스킨쪽은 단순히 $write_pages 이거만 가져오더라구요 해결방법은 몬지 아니면 페이징 처리가 어떤 원리로 처리 돼는지 궁금해서 적어봅니다 잘 부탁 드려염...
search3.php 원본 search.php 건드리기 시러서 복사해서 이 search3.php파일로 링크 걸어서 검색 했습니다. 허접하지만 쿼리문 제 홈페이지에 맞게 살작 건드렸고요.. 잘 튜닝된 쿼리문은 아니고요... ^^;;
먼저 search3.php 소스 입니다.

<?
$g4_path= ".";
include_once("./_common.php");
$g4[title] = "검색 : " . $stx;
include_once("./_head.php");
$sfl = "wr_5";
$sop= "and";
$string = $HTTP_GET_VARS['price'];
switch($string)
{
case 200 : $stx=10;$stx2=200; break;
case 400 : $stx=201;$stx2=400; break;
case 600 : $stx=401;$stx2=600;break;
case 800 : $stx=601;$stx2=800;break;
case 1000 : $stx=801;$stx2=1000;break;
case 1500 : $stx=1001;$stx2=1500;break;
case 2000 : $stx=1501;$stx2=2000; break;
case 3000 : $stx=2000;$stx2=999999999; break;
default : break;
}
urlencode($stx);
$gr_id = "gr_01";
if ($stx)
{

$filters = explode(",", $config[cf_filter]);
for ($i=0; $i $s = trim($filters[$i]); // 필터단어의 앞뒤 공백을 없앰
if (stristr($stx, $s)) {
alert("금지단어(\'{$s}\')가 포함되어 있습니다.");
exit;
}
}

//$stx = trim($stx);
$stx = preg_replace("/\//", "\/", trim($stx));
$sop = strtolower($sop);
if (!$sop || !($sop == "and" || $sop == "or")) $sop = "and"; // 연산자 and , or
if (!$srows) $srows = 5; // 한페이지에 출력하는 검색 행수

unset($g4_search[tables]);
unset($g4_search[read_level]);
$sql = " select gr_id, bo_table, bo_read_level from $g4[board_table] where bo_use_search = '1' and bo_list_level <= '$member[mb_level]' and gr_id='gr_01' ";
// and bo_read_level <= '$member[mb_level]' ";
if ($gr_id)
$sql .= " and gr_id = '$gr_id' ";
if ($onetable) // 하나의 게시판만 검색한다면
$sql .= " and bo_table = '$onetable' ";
$sql .= " order by bo_order_search, gr_id, bo_table ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
if ($is_admin != "super")
{
// 그룹접근 사용에 대한 검색 차단
$sql2 = " select gr_use_access, gr_admin from $g4[group_table] where gr_id = '$row[gr_id]' ";
$row2 = sql_fetch($sql2);
// 그룹접근을 사용한다면
if ($row2[gr_use_access])
{
// 그룹관리자가 있으며 현재 회원이 그룹관리자라면 통과
if ($row2[gr_admin] && $row2[gr_admin] == $member[mb_id])
;
else
{
$sql3 = " select count(*) as cnt from $g4[group_member_table] where gr_id = '$row[gr_id]' and mb_id = '$member[mb_id]' and mb_id <> '' ";
$row3 = sql_fetch($sql3);
if (!$row3[cnt])
continue;
}
}
}
$g4_search[tables][] = $row[bo_table];
$g4_search[read_level][] = $row[bo_read_level];
}

$search_query = "sfl=".urlencode($sfl)."&stx=".urlencode($stx)."&sop=$sop";


$text_stx = get_text(stripslashes($stx));

$op1 = "";

// 검색어를 구분자로 나눈다. 여기서는 공백
$s = explode(" ", $stx);

// 검색필드를 구분자로 나눈다. 여기서는 +
$field = explode("||", trim($sfl));

$str = "(";
for ($i=0; $i {
//$search_str = strtolower($s[$i]);
$search_str = $s[$i];
$str .= $op1;
$str .= "(";

$op2 = "";
for ($k=0; $k {
$str .= $op2;
switch ($field[$k])
{
case "mb_id" :
case "mb_name" :
$str .= "$field[$k] = '$s[$i]'";
break;
default :
if (preg_match("/[a-zA-Z]/", $search_str))

$str .= "replace(lower('$field[$k]')',',','') >= lower('$search_str') and $field[$k] <= $stx2";
else
$str .= "replace($field[$k],',','') >= $search_str and $field[$k] <= $stx2";
break;
}
$op2 = " or ";
}
$str .= ")";

$op1 = " $sop ";

// 인기검색어
//$sql = " insert into $g4[popular_table] set pp_word = '$search_str', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' ";
$sql = " insert into $g4[popular_table] set pp_word = '$search_str', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]', bo_table='$onetable', mb_id = '$member[mb_id]', sfl = '$sfl' "; // 탑빌더 검색어관리전용
sql_query($sql, FALSE);
}
$str .= ")";

//$sql_search = $str . " and wr_option not like '%secret%' "; // 비밀글은 제외
$sql_search = $str;

$str_board_list = "";
$board_count = 0;

$time1 = get_microtime();

$total_count = 0;
for ($i=0; $i {
$tmp_write_table = $g4[write_prefix] . $g4_search[tables][$i];

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

//$sql = " select count(*) as cnt from $tmp_write_table where $sql_search ";
//$row = sql_fetch($sql);

$total_count += $row[cnt];
if ($row[cnt])
{
$board_count++;
$search_table[] = $g4_search[tables][$i];
$read_level[] = $g4_search[read_level][$i];
$search_table_count[] = $total_count;

$sql2 = " select bo_subject from $g4[board_table] where bo_table = '{$g4_search[tables][$i]}' ";
$row2 = sql_fetch($sql2);
$str_board_list .= "$row2[bo_subject] ($row[cnt])";
}
}

$rows = $srows;
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함

for ($i=0; $i {
if ($from_record < $search_table_count[$i])
{
$table_index = $i;
$from_record = $from_record - $search_table_count[$i-1];
break;
}
}

$bo_subject = array();
$list = array();

$k=0;
for ($idx=$table_index; $idx {
$sql = " select bo_table,bo_subject from $g4[board_table] where bo_table = '$search_table[$idx]' ";
$row = sql_fetch($sql);
$bo_subject[$idx] = $row[bo_subject];

$tmp_write_table = $g4[write_prefix] . $search_table[$idx];
$sql = " select wr_3, wr_8, wr_9, wr_10, wr_7, wr_5, wr_id, wr_subject, wr_option, wr_is_comment, wr_content, wr_parent, mb_id, wr_name, wr_email, wr_homepage from $tmp_write_table where $sql_search order by wr_id desc limit $from_record, $rows ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
// 검색어까지 링크되면 게시판 부하가 일어남
$list[$idx][$i] = $row;
$list[$idx][$i][href] = "./board.php?bo_table=$search_table[$idx]&wr_id=$row[wr_parent]";

if ($row[wr_is_comment])
{
$link .= "#c{$row[wr_id]}";
$sql2 = " select wr_subject, wr_option from $tmp_write_table where wr_id = '$row[wr_parent]' ";
$row2 = sql_fetch($sql2);
//$row[wr_subject] = $row2[wr_subject];
$row[wr_subject] = get_text($row2[wr_subject]);
}

// 비밀글은 검색 불가
if (strstr($row[wr_option].$row2[wr_option], "secret"))
$row[wr_content] = "[비밀글 입니다.]";

$subject = get_text($row[wr_subject]);
if (strstr($sfl, "wr_subject"))
$subject = search_font($stx, $subject);

if ($read_level[$idx] <= $member[mb_level])
{
$row[wr_content]= strip_tags($row[wr_content]);
$content = cut_str(get_text($row[wr_content]),300,"…"); // 검색에 html 보이지 않게 수정 topschool
$content = cut_str(conv_content($row[wr_content],2),300,"…");
if (strstr($sfl, "wr_content"))
$content = search_font($stx, $content);
}
else
$content = '';

$list[$idx][$i][subject] = $subject;
$list[$idx][$i][content] = $content;
$list[$idx][$i][name] = get_sideview($row[mb_id], cut_str($row[wr_name], $config[cf_cut_name]), $row[wr_email], $row[wr_homepage]);
$list[$idx][$i][wr_3] = $row[wr_3];
$list[$idx][$i][wr_5] = $row[wr_5];
$list[$idx][$i][wr_7] = $row[wr_7];
$list[$idx][$i][wr_8] = $row[wr_8];
$list[$idx][$i][wr_9] = $row[wr_9];
$list[$idx][$i][wr_10] = $row[wr_10];

$k++;
if ($k >= $rows)
break;
}
sql_free_result($result);

if ($k >= $rows)
break;

$from_record = 0;
}

$write_pages = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$search_query&gr_id=$gr_id&srows=$srows&onetable=$onetable&page=");

//$write_pages = get_jy_paginate($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$search_query&gr_id=$gr_id&srows=$srows&onetable=$onetable&page=");
echo "";
}

$group_select = "전체 분류";
$sql = " select gr_id, gr_subject from $g4[group_table] order by gr_id ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
$group_select .= "$row[gr_subject]";
$group_select .= "";

if (!$sfl) $sfl = "wr_subject";
if (!$sop) $sop = "or";

$search_skin_path = "$g4[path]/skin/search/$config[cf_search_skin]";
//include_once("$search_skin_path/search.skin.php");
include_once("$search_skin_path/list.skin.php");
include_once("./_tail.php");
?>

두번째는 전체검색 스킨 소스 입니다. 그중에 페이징 부분만 넣을께요..



<? if ($prev_part_href) {
echo "
search_prev.gif'
"; } ?>
<?
//echo $write_pages;
$write_pages = str_replace("처음", "page_first.gif'", $write_pages);
$write_pages = str_replace("이전", "page_prev.gif'", $write_pages);
$write_pages = str_replace("다음", "page_next.gif'", $write_pages);
$write_pages = str_replace("맨끝", "page_end.gif'", $write_pages);
$write_pages = preg_replace("/([0-9]*)/", "$1", $write_pages);
$write_pages = preg_replace("/([0-9]*)/", "$1", $write_pages);
?>
<?=$write_pages?>
<? if ($next_part_href) {
echo "
search_next.gif'
"; } ?>

댓글 전체

전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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