상품 등록하는 페이지에 이런식으로 가로, 세로, 높이를 넣었습니다.
<?php echo help("입력하지 않으면 상품상세페이지에 출력하지 않습니다."); ?>
<input type="text" name="it_1" value="<?php echo get_text($it['it_1']); ?>" id="it_1" class="frm_input" size="8"> x <input type="text" name="it_2" value="<?php echo get_text($it['it_2']); ?>" id="it_2" class="frm_input" size="8"> x <input type="text" name="it_3" value="<?php echo get_text($it['it_3']); ?>" id="it_3" class="frm_input" size="8"> (가로x세로x높이)
상품보기나 이런부분은 다 잘되는데
쇼핑몰 상단 부분에
[가로] x [세로] x [높이] 검색
이런식으로 검색하는 부분을 만들고 싶습니다.
소스를 어떻게 넣으면 되나요?
선배님들의 도움 부탁드리겠습니다 ^^
답변 1개 / 댓글 1개
shop/search.php가 처리하니까, 두 군데만 손보면 돼요. 상단에 검색 폼을 추가하고, search.php에 가로·세로·높이 조건을 넣으면 됩니다.1. 상단 검색 폼 추가
테마를 쓰신다면 theme/사용테마/shop/shop.head.php, 아니면 shop/shop.head.php에서 검색창을 넣고 싶은 위치에 아래 코드를 넣으세요.
<form name="fsize_search" method="get" action="<?php echo G5_SHOP_URL; ?>/search.php" class="size_search">
<input type="text" name="s_w" value="<?php echo isset($_GET['s_w']) ? get_text($_GET['s_w']) : ''; ?>" class="frm_input" size="5" placeholder="가로"> x
<input type="text" name="s_d" value="<?php echo isset($_GET['s_d']) ? get_text($_GET['s_d']) : ''; ?>" class="frm_input" size="5" placeholder="세로"> x
<input type="text" name="s_h" value="<?php echo isset($_GET['s_h']) ? get_text($_GET['s_h']) : ''; ?>" class="frm_input" size="5" placeholder="높이">
<button type="submit" class="btn_submit">검색</button>
</form>
2. shop/search.php 수정
search.php를 열면 $where[] = ... 형식으로 조건을 쌓다가 $sql_where = " where " . implode(" and ", $where);로 합치는 부분이 있어요. 그 implode 줄 바로 위에 아래 코드를 넣으세요.
// 가로 x 세로 x 높이 검색
$s_w = isset($_GET['s_w']) ? preg_replace('/[^0-9.]/', '', $_GET['s_w']) : '';
$s_d = isset($_GET['s_d']) ? preg_replace('/[^0-9.]/', '', $_GET['s_d']) : '';
$s_h = isset($_GET['s_h']) ? preg_replace('/[^0-9.]/', '', $_GET['s_h']) : '';
if ($s_w !== '') $where[] = " CAST(a.it_1 AS DECIMAL(10,2)) = '".(float)$s_w."' ";
if ($s_d !== '') $where[] = " CAST(a.it_2 AS DECIMAL(10,2)) = '".(float)$s_d."' ";
if ($s_h !== '') $where[] = " CAST(a.it_3 AS DECIMAL(10,2)) = '".(float)$s_h."' ";
코드에서 신경 쓴 부분은 이래요.
it_1~it_3은 varchar 필드예요. 그래서 CAST로 숫자로 바꿔서 비교해야 "100"과 "100.0"을 같은 값으로 봐요.- 입력값에서 숫자와 점(.)만 남기고 지우기 때문에 SQL 인젝션 걱정은 없어요.
- 칸을 비워 두면 그 조건은 빠져요. 예를 들어 가로만 넣으면 가로만 맞는 상품이 전부 나와요.
3. 페이지 넘길 때 조건 유지하기
search.php 아래쪽에 $qstr1처럼 페이징 링크용 쿼리스트링을 만드는 부분이 있어요. 거기에 아래 줄을 추가하세요. 이걸 안 하면 2페이지로 넘어갈 때 조건이 풀려요.
$qstr1 .= '&s_w='.urlencode($s_w).'&s_d='.urlencode($s_d).'&s_h='.urlencode($s_h);
답변에 대한 댓글 1개
답변을 작성하려면 로그인이 필요합니다.