andor

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

· 1개월 전 · 150
1771390038_W9FOCnNb2D.webp1771298725_VWmklKg6Cn.webp

이전 분류내 검색 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
|
댓글을 작성하시려면 로그인이 필요합니다.

영카트5 팁자료실

+
제목 글쓴이 날짜 조회
2주 전 조회 97
3주 전 조회 168
3주 전 조회 124
4주 전 조회 134
1개월 전 조회 151
1개월 전 조회 252
1개월 전 조회 168
1개월 전 조회 333
1개월 전 조회 458
3개월 전 조회 804
3개월 전 조회 740
3개월 전 조회 821
4개월 전 조회 1,003
4개월 전 조회 1,182
4개월 전 조회 761
5개월 전 조회 958
5개월 전 조회 1,080
5개월 전 조회 892
5개월 전 조회 942
5개월 전 조회 1,006
5개월 전 조회 1,082
5개월 전 조회 919
6개월 전 조회 878
6개월 전 조회 1,073
6개월 전 조회 1,062
6개월 전 조회 934
6개월 전 조회 1,240
7개월 전 조회 1,278
7개월 전 조회 1,046
7개월 전 조회 1,110