쇼핑몰: #195 상품상세 선택/추가 옵션 merge

This commit is contained in:
whitedot
2013-05-24 15:01:25 +09:00
5 changed files with 316 additions and 171 deletions

View File

@ -79,7 +79,6 @@ if(!sql_query(" select io_id from {$g4['shop_item_option_table']} limit 1 ", fal
) ", false); ) ", false);
sql_query(" ALTER TABLE `{$g4['shop_item_table']}` sql_query(" ALTER TABLE `{$g4['shop_item_table']}`
ADD `it_option_subject` VARCHAR(255) NOT NULL DEFAULT '' AFTER `it_origin`, ADD `it_option_subject` VARCHAR(255) NOT NULL DEFAULT '' AFTER `it_origin`,
ADD `it_option` VARCHAR(255) NOT NULL DEFAULT '' AFTER `it_option_subject`,
ADD `it_supply_subject` VARCHAR(255) NOT NULL DEFAULT '' AFTER `it_option` ", false); ADD `it_supply_subject` VARCHAR(255) NOT NULL DEFAULT '' AFTER `it_option` ", false);
} }
@ -117,6 +116,17 @@ if(!$result) {
ADD `od_mobile` TINYINT(4) NOT NULL DEFAULT '0' AFTER `od_time` ", false); ADD `od_mobile` TINYINT(4) NOT NULL DEFAULT '0' AFTER `od_time` ", false);
} }
// ct_option 추가
$sql = " select ct_option from {$g4['shop_cart_table']} limit 1 ";
$result = sql_query($sql, false);
if(!$result) {
sql_query(" ALTER TABLE `{$g4['shop_cart_table']}`
ADD `ct_option` VARCHAR(255) NOT NULL DEFAULT '' AFTER `ct_stock_use`,
ADD `io_id` VARCHAR(255) NOT NULL DEFAULT '' AFTER `ct_qty`,
ADD `io_type` TINYINT(4) NOT NULL DEFAULT '0' AFTER `io_id`,
ADD `io_price` INT(11) NOT NULL DEFAULT '0' AFTER `io_type` ", false);
}
// it_brand 추가 // it_brand 추가
/* /*
$sql = " select it_brand from {$g4['shop_item_table']} limit 1 "; $sql = " select it_brand from {$g4['shop_item_table']} limit 1 ";

View File

@ -58,19 +58,17 @@ CREATE TABLE IF NOT EXISTS `shop_cart` (
`uq_id` bigint(20) unsigned NOT NULL, `uq_id` bigint(20) unsigned NOT NULL,
`it_id` varchar(20) NOT NULL DEFAULT '', `it_id` varchar(20) NOT NULL DEFAULT '',
`it_name` varchar(255) NOT NULL DEFAULT '', `it_name` varchar(255) NOT NULL DEFAULT '',
`it_opt1` varchar(255) NOT NULL DEFAULT '',
`it_opt2` varchar(255) NOT NULL DEFAULT '',
`it_opt3` varchar(255) NOT NULL DEFAULT '',
`it_opt4` varchar(255) NOT NULL DEFAULT '',
`it_opt5` varchar(255) NOT NULL DEFAULT '',
`it_opt6` varchar(255) NOT NULL DEFAULT '',
`ct_status` enum('쇼핑','주문','준비','배송','완료','취소','반품','품절') NOT NULL DEFAULT '쇼핑', `ct_status` enum('쇼핑','주문','준비','배송','완료','취소','반품','품절') NOT NULL DEFAULT '쇼핑',
`ct_history` text NOT NULL, `ct_history` text NOT NULL,
`ct_price` int(11) NOT NULL DEFAULT '0', `ct_price` int(11) NOT NULL DEFAULT '0',
`ct_point` int(11) NOT NULL DEFAULT '0', `ct_point` int(11) NOT NULL DEFAULT '0',
`ct_point_use` tinyint(4) NOT NULL DEFAULT '0', `ct_point_use` tinyint(4) NOT NULL DEFAULT '0',
`ct_stock_use` tinyint(4) NOT NULL DEFAULT '0', `ct_stock_use` tinyint(4) NOT NULL DEFAULT '0',
`ct_option` varchar(255) NOT NULL DEFAULT '',
`ct_qty` int(11) NOT NULL DEFAULT '0', `ct_qty` int(11) NOT NULL DEFAULT '0',
`io_id` varchar(255) NOT NULL DEFAULT '',
`io_type` tinyint(4) NOT NULL DEFAULT '0',
`io_price` int(11) NOT NULL DEFAULT '0',
`ct_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `ct_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`ct_ip` varchar(25) NOT NULL DEFAULT '', `ct_ip` varchar(25) NOT NULL DEFAULT '',
`ct_send_cost` varchar(255) NOT NULL, `ct_send_cost` varchar(255) NOT NULL,
@ -367,7 +365,6 @@ CREATE TABLE IF NOT EXISTS `shop_item` (
`it_maker` varchar(255) NOT NULL DEFAULT '', `it_maker` varchar(255) NOT NULL DEFAULT '',
`it_origin` varchar(255) NOT NULL DEFAULT '', `it_origin` varchar(255) NOT NULL DEFAULT '',
`it_option_subject` varchar(255) NOT NULL DEFAULT '', `it_option_subject` varchar(255) NOT NULL DEFAULT '',
`it_option` varchar(255) NOT NULL DEFAULT '',
`it_supply_subject` varchar(255) NOT NULL DEFAULT '', `it_supply_subject` varchar(255) NOT NULL DEFAULT '',
`it_type1` tinyint(4) NOT NULL DEFAULT '0', `it_type1` tinyint(4) NOT NULL DEFAULT '0',
`it_type2` tinyint(4) NOT NULL DEFAULT '0', `it_type2` tinyint(4) NOT NULL DEFAULT '0',

View File

@ -573,7 +573,12 @@ function get_item_options($it_id, $subject)
else else
$price = '   '.number_format($row['io_price']).'원'; $price = '   '.number_format($row['io_price']).'원';
$select .= '<option value="'.$row['io_id'].','.$row['io_price'].','.$row['io_stock_qty'].'">'.$row['io_id'].$price.'</option>'.PHP_EOL; if(!$row['io_stock_qty'])
$soldout = '&nbsp;&nbsp;[품절]';
else
$soldout = '';
$select .= '<option value="'.$row['io_id'].','.$row['io_price'].','.$row['io_stock_qty'].'">'.$row['io_id'].$price.$soldout.'</option>'.PHP_EOL;
} }
$select .= '</select>'.PHP_EOL; $select .= '</select>'.PHP_EOL;

View File

@ -238,14 +238,9 @@ else
<?php //echo it_name_icon($it, false, 0); ?> <?php //echo it_name_icon($it, false, 0); ?>
<section id="sit_ov"> <section id="sit_ov">
<h2 id="sit_title"><?php echo stripslashes($it['it_name']); ?></h2> <h2>상품간략정보 및 구매기능</h2>
<p id="sit_desc"><?php echo $it['it_basic']; ?></p> <strong id="sit_title"><?php echo stripslashes($it['it_name']); ?></strong><br>
<!-- ########## 선택옵션/추가옵션 갯수를 사전에 알려줍니다. - 지운아빠 2013-05-24 --> <span id="sit_desc"><?php echo $it['it_basic']; ?></span>
<!-- 스크린리더에서만 출력되도록 할 예정 -->
<p id="sit_opt_info">
상품 기본옵션 n 가지, <!-- 추가옵션이 있을 때만 -->추가옵션 n 가지<!-- 끝 -->
</p>
<!-- ########## 선택옵션/추가옵션 알려주기 끝 -->
<?php if ($score = get_star_image($it['it_id'])) { ?> <?php if ($score = get_star_image($it['it_id'])) { ?>
<div id="sit_star_sns"> <div id="sit_star_sns">
<?php <?php
@ -288,7 +283,6 @@ else
</tr> </tr>
<?php } else { // 전화문의가 아닐 경우?> <?php } else { // 전화문의가 아닐 경우?>
<?php if ($it['it_cust_price']) { // 1.00.03?> <?php if ($it['it_cust_price']) { // 1.00.03?>
<tr> <tr>
<th scope="row"><label for="disp_cust_price">시중가격</label></th> <th scope="row"><label for="disp_cust_price">시중가격</label></th>
@ -296,7 +290,7 @@ else
<input type="text" name="disp_cust_price" value="<?php echo number_format($it['it_cust_price']); ?>" id="disp_cust_price" readonly class="sit_ov_ro" size="8"> 원 <input type="text" name="disp_cust_price" value="<?php echo number_format($it['it_cust_price']); ?>" id="disp_cust_price" readonly class="sit_ov_ro" size="8"> 원
</td> </td>
</tr> </tr>
<?php } ?> <?php } // 전화문의 끝?>
<tr> <tr>
<th scope="row"><label for="disp_sell_price">판매가격</label></th> <th scope="row"><label for="disp_sell_price">판매가격</label></th>
@ -333,22 +327,8 @@ else
echo get_item_supply($it['it_id'], $it['it_supply_subject']); echo get_item_supply($it['it_id'], $it['it_supply_subject']);
?> ?>
<!-- ########## 삭제될 내용 - 지운아빠 2013-05-24 -->
<tr> <tr>
<th scope="row">수량</th> <td colspan="2">
<td>
<input type="text" name="ct_qty" value="1" class="sit_ov_input" size="4" maxlength="4" autocomplete="off" onkeyup="amount_change()">
<button type="button" onclick="javascript:qty_add(+1);" class="btn_frmline"><span class="sound_only">수량 1개 </span>증가</button>
<button type="button" onclick="javascript:qty_add(-1);" class="btn_frmline"><span class="sound_only">수량 1개 </span>감소</button>
</td>
</tr>
<!-- ########## 삭제될 내용 끝 -->
<?php } // 전화문의 아닐 때 끝 ?>
<?php } // 갤러리 형식이 아닐 때 끝 ?>
</tbody>
</table>
<div id="sit_sel_option"></div> <div id="sit_sel_option"></div>
<script> <script>
$(function() { $(function() {
@ -435,6 +415,7 @@ else
price = info[1]; price = info[1];
stock = info[2]; stock = info[2];
if(!same_option_check(option))
add_sel_option(0, id, option, price, stock); add_sel_option(0, id, option, price, stock);
} }
}); });
@ -456,10 +437,85 @@ else
var price = info[1]; var price = info[1];
var stock = info[2]; var stock = info[2];
if(!same_option_check(option))
add_sel_option(1, id, option, price, stock); add_sel_option(1, id, option, price, stock);
}); });
// 수량변경 및 삭제
$("#sit_sel_option li button").live("click", function() {
var mode = $(this).text();
var this_qty, max_qty = 9999, min_qty = 1;
var $el_qty = $(this).closest("li").find("input[name='ct_qty[]']");
var stock = parseInt($(this).closest("li").find("input[name='io_stock[]']").val());
switch(mode) {
case "증가":
this_qty = parseInt($el_qty.val().replace(/[^0-9]/, "")) + 1;
if(this_qty > stock) {
alert("재고수량 보다 많은 수량을 구매할 수 없습니다.");
this_qty = stock;
}
if(this_qty > max_qty) {
this_qty = max_qty;
alert("최대 구매수량은 "+number_format(String(max_qty))+" 입니다.");
}
$el_qty.val(this_qty);
price_calculate();
break;
case "감소":
this_qty = parseInt($el_qty.val().replace(/[^0-9]/, "")) - 1;
if(this_qty < min_qty) {
this_qty = min_qty;
alert("최소 구매수량은 "+number_format(String(min_qty))+" 입니다.");
}
$el_qty.val(this_qty);
price_calculate();
break;
case "삭제":
if(confirm("선택하신 옵션항목을 삭제하시겠습니까?")) {
$(this).closest("li").remove();
price_calculate();
}
break;
default:
alert("올바른 방법으로 이용해 주십시오.");
break;
}
});
// 수량직접입력
$("input[name='ct_qty[]']").live("keyup", function() {
var val= $(this).val();
if(val != "") {
if(val.replace(/[0-9]/g, "").length > 0) {
alert("수량은 숫자만 입력해 주십시오.");
$(this).val(1);
} else {
var d_val = parseInt(val);
if(d_val < 1 || d_val > 9999) {
alert("수량은 1에서 9999 사이의 값으로 입력해 주십시오.");
$(this).val(1);
} else {
var stock = parseInt($(this).closest("li").find("input[name='io_stock[]']").val());
if(d_val > stock) {
alert("재고수량 보다 많은 수량을 구매할 수 없습니다.");
$(this).val(stock);
}
}
}
price_calculate();
}
});
}); });
// 선택된 옵션 출력
function add_sel_option(type, id, option, price, stock) function add_sel_option(type, id, option, price, stock)
{ {
var opt = ""; var opt = "";
@ -488,13 +544,80 @@ else
opt += "</li>\n"; opt += "</li>\n";
if($("#sit_sel_option > ul").size() < 1) { if($("#sit_sel_option > ul").size() < 1) {
$("#sit_sel_option").html('<ul id="sit_opt_added"></ul>'); $("#sit_sel_option").html("<ul></ul>");
$("#sit_sel_option > ul").html(opt); $("#sit_sel_option > ul").html(opt);
} else{ } else{
if($("#sit_sel_option > ul li").size() < 1)
$("#sit_sel_option > ul").html(opt);
else
$("#sit_sel_option > ul li:last").after(opt); $("#sit_sel_option > ul li:last").after(opt);
} }
price_calculate();
}
// 동일선택옵션있는지
function same_option_check(val)
{
var result = false;
$("input[name='io_value[]']").each(function() {
if(val == $(this).val()) {
result = true;
return false;
}
});
if(result)
alert(val+" 은(는) 이미 추가하신 옵션상품입니다.");
return result;
}
// 가격계산
function price_calculate()
{
var it_price = parseInt("<?php echo $it['it_price']; ?>");
var $el_prc = $("input[name='io_price[]']");
var $el_qty = $("input[name='ct_qty[]']");
var $el_type = $("input[name='io_type[]']");
var price, type, qty, total = 0;
$el_prc.each(function(index) {
price = parseInt($(this).val());
qty = parseInt($el_qty.eq(index).val());
type = $el_type.eq(index).val();
if(type == "0") { // 선택옵션
total += (it_price + price) * qty;
} else { // 추가옵션
total += price * qty;
}
});
$("#sit_tot_price").empty().html("총 금액 : "+number_format(String(total))+"원");
} }
</script> </script>
</td>
</tr>
<tr>
<td colspan="2">
<div id="sit_tot_price"></div>
</td>
</tr>
<tr>
<th scope="row">수량</th>
<td>
<input type="text" name="ct_qty" value="1" class="sit_ov_input" size="4" maxlength="4" autocomplete="off" onkeyup="amount_change()">
<button type="button" onclick="javascript:qty_add(+1);" class="btn_frmline"><span class="sound_only">수량 1개 </span>증가</button>
<button type="button" onclick="javascript:qty_add(-1);" class="btn_frmline"><span class="sound_only">수량 1개 </span>감소</button>
</td>
</tr>
<?php } ?>
<?php } ?>
</tbody>
</table>
<ul id="sit_ov_btn"> <ul id="sit_ov_btn">
<?php if (!$it['it_tel_inq'] && !$it['it_gallery']) { ?> <?php if (!$it['it_tel_inq'] && !$it['it_gallery']) { ?>

View File

@ -1,6 +1,11 @@
<?php <?php
include_once('./_common.php'); include_once('./_common.php');
$it_id = $_POST['it_id'];
$opt_id = $_POST['opt_id'];
$idx = $_POST['idx'];
$sel_count = $_POST['sel_count'];
$sql = " select * from {$g4['shop_item_option_table']} $sql = " select * from {$g4['shop_item_option_table']}
where io_type = '0' where io_type = '0'
and it_id = '$it_id' and it_id = '$it_id'
@ -32,7 +37,12 @@ for($i=0; $row=sql_fetch_array($result); $i++) {
else else
$price = '&nbsp;&nbsp; '.number_format($row['io_price']).'원'; $price = '&nbsp;&nbsp; '.number_format($row['io_price']).'원';
$str .= PHP_EOL.'<option value="'.$val[$key].','.$row['io_price'].','.$row['io_stock_qty'].'">'.$val[$key].$price.'</otpion>'; if(!$row['io_stock_qty'])
$soldout = '&nbsp;&nbsp;[품절]';
else
$soldout = '';
$str .= PHP_EOL.'<option value="'.$val[$key].','.$row['io_price'].','.$row['io_stock_qty'].'">'.$val[$key].$price.$soldout.'</otpion>';
} }
} }