카테고리 페이징 2번째부터 풀리거나 , 더보이는 문제 문의
본문
카테고리의 경우 아래파일을 추가해서
2번째 페이지링크가 없어지는 문제는 해결이 되었는데요.
아래처럼 4,5,6번 페이지 없어도 되는데 보이는 문제가 있고.
정상이던 다른 셀렉트문의 조건값이
2번페이지 클릭시 풀려버리는 새로운 문제가 생겨버립니다.
(wr_5 , ca_name )
wr_5 값으로 해서 똑같은걸 추가해주면 둘다 2번째페이지가 풀려버립니다
어떻게 수정을 해주면 되나요??
총게시물 45, 한페이지 15개
지역('wr_8') 선택후 보여지는 페이징 (원래 3페이지만 보여야 정상임 15x3=45)
1, 2, 3, 4, 5, 6, 맨끝
2번 페이지 클릭시
=> 처음 1, 2, 3, 맨끝
3번 페이지 클릭시
=> 처음 1, 2, 3
4번 5번 6번 페이지 클릭시
=> 처음 1, 2, 3
common.php 파일에 추가한 부분
$qstr = '';
if (isset($_REQUEST['wr_8'])) {
$wr_8 = clean_xss_tags(trim($_REQUEST['wr_8']));
if ($wr_8) {
$wr_8 = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*]/", "", $wr_8);
$qstr .= '&wr_8=' . urlencode($wr_8);
}
} else {
$wr_8 = '';
}
==============================================
ist.skin.php 에서 인클루드하는 skin.exe.php 파일 내용입니다.
사용한 스킨은 지수아빠님 부동산 스킨입니다.
<?
function get_sql_search1($search_ca_name, $search_field, $search_text, $search_operator='and',$wr_7,$wr_8,$wr_9,$wr_5)
{
global $g5;
$str = "";
if ($search_ca_name)
$str = " ca_name = '$search_ca_name' ";
if ($wr_7) {
if ($str) {
$str = "(" . $str . " and wr_7 = '$wr_7') ";
} else {
$str = " wr_7 = '$wr_7' ";
}
}
if ($wr_8) {
if ($str) {
$str = "(" . $str . " and wr_8 = '$wr_8') ";
} else {
$str = " wr_8 = '$wr_8' ";
}
}
if ($wr_9) {
if ($str) {
$str = "(" . $str . " and wr_9 = '$wr_9') ";
} else {
$str = " wr_9 = '$wr_9' ";
}
}
if ($wr_5) {
if ($str) {
$str = "(" . $str . " and wr_5 = '$wr_5') ";
} else {
$str = " wr_5 = '$wr_5' ";
}
}
$search_text = trim($search_text);
if (!$search_text)
return $str;
if ($str)
$str .= " and ";
// 쿼리의 속도를 높이기 위하여 ( ) 는 최소화 한다.
$op1 = "";
// 검색어를 구분자로 나눈다. 여기서는 공백
$s = array();
$s = explode(" ", $search_text);
// 검색필드를 구분자로 나눈다. 여기서는 +
//$field = array();
//$field = explode("||", trim($search_field));
$tmp = array();
$tmp = explode(",", trim($search_field));
$field = explode("||", $tmp[0]);
$not_comment = $tmp[1];
$str .= "(";
for ($i=0; $i<count($s); $i++) {
// 검색어
$search_str = trim($s[$i]);
if ($search_str == "") continue;
// 인기검색어
//$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 = '".G5_TIME_YMD."', pp_ip = '$_SERVER[REMOTE_ADDR]' ";
sql_query($sql, FALSE);
$str .= $op1;
$str .= "(";
$op2 = "";
for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
$str .= $op2;
switch ($field[$k]) {
case "mb_id" :
case "wr_name" :
$str .= " $field[$k] = '$s[$i]' ";
break;
case "wr_hit" :
case "wr_good" :
case "wr_nogood" :
$str .= " $field[$k] >= '$s[$i]' ";
break;
// 번호는 해당 검색어에 -1 을 곱함
case "wr_num" :
$str .= "$field[$k] = ".((-1)*$s[$i]);
break;
// LIKE 보다 INSTR 속도가 빠름
default :
if (preg_match("/[a-zA-Z]/", $search_str))
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
break;
}
$op2 = " or ";
}
$str .= ")";
//$op1 = ($search_operator) ? ' and ' : ' or ';
$op1 = " $search_operator ";
}
$str .= " ) ";
if ($not_comment)
$str .= " and wr_is_comment = '0' ";
return $str;
}
// 분류 사용 여부
$is_category = false;
if ($board[bo_use_category])
{
$is_category = true;
$category_location = "./board.php?bo_table=$bo_table&sca=";
//$category_option = get_category_option($bo_table); // SELECT OPTION 태그로 넘겨받음
$category_option2 = get_category_option($bo_table); // SELECT OPTION 태그로 넘겨받음
}
$sop = strtolower($sop);
if ($sop != "and" && $sop != "or")
$sop = "and";
// 분류 선택 또는 검색어가 있다면
if ($sca || $stx || $wr_7 || $wr_8 || $wr_9 || $wr_5)
{
$sql_search = get_sql_search1($sca, $sfl, $stx, $sop, $wr_7, $wr_8, $wr_9, $wr_5);
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
$sql = " select MIN(wr_num) as min_wr_num from $write_table ";
$row = sql_fetch($sql);
$min_spt = $row[min_wr_num];
if (!$spt) $spt = $min_spt;
$sql_search .= " and (wr_num between '".$spt."' and '".($spt + $config[cf_search_part])."') ";
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
$sql = " select distinct wr_parent from $write_table where $sql_search ";
$result = sql_query($sql);
//$total_count = mysql_num_rows($result);
$total_count = sql_num_rows($result);
}
else
{
$sql_search = "";
$total_count = $board[bo_count_write];
}
$total_page = ceil($total_count / $board[bo_page_rows]); // 전체 페이지 계산
if (!$page) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $board[bo_page_rows]; // 시작 열을 구함
// 관리자라면 CheckBox 보임
$is_checkbox = false;
if ($member[mb_id] && ($is_admin == "super" || $group[gr_admin] == $member[mb_id] || $board[bo_admin] == $member[mb_id]))
$is_checkbox = true;
// 정렬에 사용하는 QUERY_STRING
$qstr2 = "bo_table=$bo_table&sop=$sop";
if ($board[bo_gallery_cols])
$td_width = (int)(100 / $board[bo_gallery_cols]);
// 정렬
// 인덱스 필드가 아니면 정렬에 사용하지 않음
//if (!$sst || ($sst && !(strstr($sst, 'wr_id') || strstr($sst, "wr_datetime")))) {
if (!$sst)
{
if ($board[bo_sort_field])
$sst = $board[bo_sort_field];
else
$sst = "wr_num, wr_reply";
$sod = "";
}
$sql_order = " order by $sst $sod ";
if ($sca || $stx || $wr_7 || $wr_8 || $wr_9 || $wr_5)
{
$sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
}
else
{
//범위 검색 시작
if($srl && $srh) {
$sql_search_range = " ($sst BETWEEN '".$srl."' AND '".$srh."') and ";
}
//범위 검색 끝
$sql = " select * from $write_table where $sql_search_range wr_is_comment = 0 $sql_order limit $from_record, $board[bo_page_rows] ";
}
$result = sql_query($sql);
// 년도 2자리
//$today2 = $g4[time_ymd];
$today2 = G5_TIME_YMD;
//$list = array(); 삭제시작부분
$list = array();
$i = 0;
//--------공지 하나만 나오는 문제해결 list.php 참조
$notice_count = 0;
$notice_array = array();
// 공지 처리
//if (!$sca && !$stx) {
if (!$sca && !$stx && !$wr_7 && !$wr_8 && !$wr_9 && !$wr_5)
{
$arr_notice = explode(',', trim($board['bo_notice']));
$from_notice_idx = ($page - 1) * $page_rows;
if($from_notice_idx < 0)
$from_notice_idx = 0;
$board_notice_count = count($arr_notice);
for ($k=0; $k<$board_notice_count; $k++) {
if (trim($arr_notice[$k]) == '') continue;
$row = sql_fetch(" select * from {$write_table} where wr_id = '{$arr_notice[$k]}' ");
if (!$row['wr_id']) continue;
$notice_array[] = $row['wr_id'];
if($k < $from_notice_idx) continue;
$list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
$list[$i]['is_notice'] = true;
$i++;
$notice_count++;
if($notice_count >= $list_page_rows)
break;
}
}
$total_page = ceil($total_count / $page_rows); // 전체 페이지 계산
$from_record = ($page - 1) * $page_rows; // 시작 열을 구함
// 공지글이 있으면 변수에 반영
if(!empty($notice_array)) {
$from_record -= count($notice_array);
if($from_record < 0)
$from_record = 0;
if($notice_count > 0)
$page_rows -= $notice_count;
if($page_rows < 0)
$page_rows = $list_page_rows;
}
//--------공지 하나 나오는 문제해결 list.php 참조
$k = 0;
while ($row = sql_fetch_array($result))
{
// 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
if ($sca || $stx || $wr_7 || $wr_8 || $wr_9 || $wr_5)
$row = sql_fetch(" select * from $write_table where wr_id = '$row[wr_parent]' ");
$list[$i] = get_list($row, $board, $board_skin_url, $board[bo_subject_len]);
if (strstr($sfl, "subject"))
$list[$i][subject] = search_font($stx, $list[$i][subject]);
$list[$i][is_notice] = false;
//$list[$i][num] = number_format($total_count - ($page - 1) * $board[bo_page_rows] - $k);
$list[$i][num] = $total_count - ($page - 1) * $board[bo_page_rows] - $k;
$i++;
$k++;
}
//} 삭제 끝부분
//$write_pages = get_paging($config[cf_write_pages], $page, $total_page, "./board.php?bo_table=$bo_table".$qstr."&page=");
$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, './board.php?bo_table='.$bo_table.$qstr.'&page=');
$list_href = '';
$prev_part_href = '';
$next_part_href = '';
//-----2번페이지 사라지는 문제-----//
if ($sca || $stx || $wr_7 || $wr_8 || $wr_9 || $wr_5)
{
//$list_href = "./board.php?bo_table=$bo_table";
//if ($prev_spt >= $min_spt)
//$prev_spt = $spt - $config[cf_search_part];
//if (isset($min_spt) && $prev_spt >= $min_spt)
//$prev_part_href = "./board.php?bo_table=$bo_table".$qstr."&spt=$prev_spt";
//$next_spt = $spt + $config[cf_search_part];
//if ($next_spt < 0)
//$next_part_href = "./board.php?bo_table=$bo_table".$qstr."&spt=$next_spt";
//}
$list_href = './board.php?bo_table='.$bo_table;
//$list_href = './board.php?bo_table='.'$bo_table$qstr'.'&wr_9= $wr_9;'.'&page=';
$patterns = array('#&page=[0-9]*#', '#&spt=[0-9\-]*#');
//if ($prev_spt >= $min_spt)
$prev_spt = $spt - $config['cf_search_part'];
if (isset($min_spt) && $prev_spt >= $min_spt) {
$qstr1 = preg_replace($patterns, '', $qstr);
$prev_part_href = './board.php?bo_table='.$bo_table.$qstr1.'&spt='.$prev_spt.'&page=1';
$write_pages = page_insertbefore($write_pages, '<a href="'.$prev_part_href.'" class="pg_page pg_prev">이전검색</a>');
}
$next_spt = $spt + $config['cf_search_part'];
if ($next_spt < 0) {
$qstr1 = preg_replace($patterns, '', $qstr);
$next_part_href = './board.php?bo_table='.$bo_table.$qstr1.'&spt='.$next_spt.'&page=1';
$write_pages = page_insertafter($write_pages, '<a href="'.$next_part_href.'" class="pg_page pg_end">다음검색</a>');
}
}
//-----2번페이지 사라지는 문제-----//
$write_href = "";
if ($member[mb_level] >= $board[bo_write_level])
$write_href = "./write.php?bo_table=$bo_table";
$nobr_begin = $nobr_end = "";
if (preg_match("/gecko|firefox/i", $_SERVER['HTTP_USER_AGENT'])) {
$nobr_begin = "<nobr style='display:block; overflow:hidden;'>";
$nobr_end = "</nobr>";
}
// RSS 보기 사용에 체크가 되어 있어야 RSS 보기 가능 061106
$rss_href = "";
if ($board[bo_use_rss_view])
$rss_href = "./rss.php?bo_table=$bo_table";
$stx = get_text(stripslashes($stx));
$arrayf = explode("|",$board[bo_category_list]);
$arrays1 = explode("|",$board[bo_5]);
$arrayc1 = explode("|",$board[bo_9]);
for($i=0; $i<count($arrayf); $i++){
if($sca==$arrayf[$i]){
$tu = $i+1;
}
}
//echo $write[wr_5]."<br>";
for($i=0; $i<count($arrayf); $i++){
$arrays2[$i] = explode("^",$arrays1[$i]);
$arrayc2[$i] = explode("^",$arrayc1[$i]);
$ts = $i+1;
for($j=0; $j<count($arrays2[$i]); $j++){
$arrayc3[$i][$j] = explode("~",$arrayc2[$i][$j]);
if($ts==$tu){
$wr_5s .= "<option value='".$arrays2[$i][$j]."'";
if($wr_5==$arrays2[$i][$j]){
$wr_5s .= " selected ";
$tvs = $j;
}
$wr_5s .=">".$arrays2[$i][$j]."</option>";
}
}
}
?>
답변 2
관리자의 페이징 설정 부분 확인 해 보셨는지?
아래 소스를 common.php 파일 말고 skin.exe.php 에 추가를 해주어도 증상이 비슷합니다.
(skin.exe.php 파일은 list.skin.php 에서 인클루드 하는 파일입니다.
사용한 스킨은 지수아빠님 부동산 스킨입니다. )
$qstr = '';
if (isset($_REQUEST['wr_8'])) {
$wr_8 = clean_xss_tags(trim($_REQUEST['wr_8']));
if ($wr_8) {
$wr_8 = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*]/", "", $wr_8);
$qstr .= '&wr_8=' . urlencode($wr_8);
}
} else {
$wr_8 = '';
}