1원 짜리 팁. 영카트 분류 내 검색 / 카테고리 내 검색 분류내 에서 도망 못가게 잡아두기.


이전 분류내 검색 https://sir.kr/boards/yc5_tip/2554
은 search.php(검색결과 화면) 로 이동 됩니다.
이번건 분류내(list.skin.php) 에 머무는 겁니다.
참고해 주세요.
list10.skin.php 상단부 아래 ..... (또는 사용중 이신 파일)
<?php
if (!defined("_GNUBOARD_")) exit;
$stx = isset($_GET['stx']) ? trim($_GET['stx']) : '';
if ($stx) {
$new_list = array();
if (isset($list) && is_array($list)) {
foreach ($list as $item) {
// 여러 필드에서 검색어를 찾습니다.
// it_name: 상품명
// it_basic: 기본설명
// it_explan: 상품설명 (html 태그 제거 후 검색)
// it_id: 상품코드
$search_target = $item['it_name'] .
$item['it_basic'] .
strip_tags($item['it_explan']) .
$item['it_id'];
// 검색어가 대상 문자열 중 한 곳이라도 포함되어 있으면 배열에 담습니다.
if (stripos($search_target, $stx) !== false) {
$new_list[] = $item;
}
}
// 기존 상품 목록을 필터링된 목록으로 덮어씌움
$list = $new_list;
$total_count = count($list);
}
}
// 검색어가 있을 경우 페이징 URL에 검색 파라미터를 강제로 붙여줍니다.
$search_query = "";
if (isset($stx) && $stx) {
$search_query = '&stx=' . urlencode($stx);
}
// 기존 페이징 출력 부분을 아래와 같은 방식으로 수정 (qstr 뒤에 search_query 추가)
echo get_paging($config['cf_write_pages'], $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$qstr.$search_query.'&page=');
?>
를 넣어 줍니다.
아래는 form 태그에 덮어 쒸우거나 맞추어서 수정해 줍니다.
<?php
global $ca; // list.php에서 만든 $ca 변수를 이 스킨 안으로 끌어옵니다.
?>
<?php
$ca_id = (isset($_GET['ca_id'])) ? get_search_string($_GET['ca_id']) : '';
$search_q = (isset($_GET['q'])) ? get_text(get_search_string(stripslashes($_GET['q']))) : '';
?>
<form name="frmsearch1" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return search_submit(this);" class="eyoom-form" style="margin:0;">
<!-- 현재 카테고리를 유지하기 위한 필수 필드 -->
<input type="hidden" name="ca_id" value="<?php echo $ca_id; ?>">
<div class="input input-button">
<!-- 검색어 입력창: name="q" 유지 -->
<input type="text" name="stx" value="<?php echo get_text($stx); ?>" id="sch_str" maxlength="50" placeholder="<?php echo $ca['ca_name']; ?> 분류 내에서 검색" required>
<button type="submit" class="button"><i class="fa fa-search"></i></button>
</div>
<p class="li-p-sq f-s-13r" style="margin-top:10px;">
현재 <b><?php echo $ca['ca_name']; ?></b> 분류 내에서 검색합니다.
</p>
<p class="li-p-sq f-s-13r">검색어는 최대 50글자까지, 공백으로 구분하여 입력할 수 있습니다.</p>
<?php if ($stx) { // 검색어($stx)가 존재할 때만 실행 ?>
<p class="li-p-sq f-s-13r">
<b><font color=red>통합검색</font></b> 으로 보기 클릭 >
<a href="<?php echo G5_SHOP_URL; ?>/search.php?q=<?php echo get_text($stx); ?>">
<?php echo get_text($stx); ?> 검색
</a>
</p>
<?php } ?>
<?php
// 현재 카테고리명 다시 확인 출력 (필요 시)
$row2 = sql_fetch(" select ca_name from {$g5['g5_shop_category_table']} where ca_id = '{$ca_id}' ");
if($row2) { echo "<!-- ".$row2['ca_name']." -->"; }
?>
</form>
<?php
// [중요] list.php가 검색어를 인식하지 못할 경우를 대비한 스킨 내 쿼리 보정
// 이 코드는 list.php에서 상품 리스트를 가져오는 쿼리($sql_where) 이전에 동작해야 합니다.
if ($stx) {
// 이미 list.php에서 정의된 $sql_where가 있다면 그 뒤에 검색 조건을 붙여야 합니다.
// 보통 이 작업은 스킨 상단이나 shop/list.php에서 직접 수행하는 것이 가장 확실합니다.
}
?>
여기 까지 하시고 ..... 다음은 제일 하단 부
<script>
$(document).ready(function() {
const urlParams = new URLSearchParams(window.location.search);
const stx = urlParams.get('stx');
if (stx) {
// 1. 검색창에 검색어 다시 채우기 (절대 안 사라지게)
$("input[name='stx']").val(stx);
// 2. 모든 링크 중에서 'list.php'를 포함하는 링크를 모두 검사
// 정렬(sort), 페이징(page) 버튼을 모두 포함합니다.
$("a[href*='list.php']").each(function() {
let href = $(this).attr("href");
// 링크에 ca_id는 있는데 stx가 없을 경우에만 추가
if (href && href.indexOf("ca_id=") !== -1 && href.indexOf("stx=") === -1) {
const separator = href.indexOf('?') !== -1 ? "&" : "?";
$(this).attr("href", href + separator + "stx=" + encodeURIComponent(stx));
}
});
}
});
</script>
를 추가해 줍니다. -이상-
빼먹은게 있어서 수정 했습니다. 26.02.18.02.19
적용 URL > https://ysmoto.kr/shop/list.php?ca_id=30
|
댓글을 작성하시려면 로그인이 필요합니다.