페이지 정보
본문
그누보드의 기본게시판에서는 분류를 사용시
분류를 입력한 순서대로 게시판 목록에서 나타나도록 되어있습니다.
아래 첨부 이미지와 같이 분류를 사용하고 분류를 순서없이 작성을 하게되면
영카트 기본에서는 비회원, 회원 등 기존에있는 등급에 따라서
상품구매 금액을 다르게 설정하는 방법은 없습니다.
하지만 등급별 회원을 나누어서 관리를 하는 쇼핑몰의 경우에는 해당 기능이 필요할때가 있는데
회원 등급별 상품금액을 다르게 판매 할 수 있도록 소스코드 수정을 통해서
영카트5에서 레벨별 상품구매 금액이 다르게 구매되도록 구현 해보겠습니다.
1. 우선 www/lib/shop.lib.php 파일에서 get_price() 함수를 찾아 보겠습니다.
<?php
/* www/lib/shop.lib.php */
// 금액표시
// $it : 상품 배열
function get_price($it)
{
global $member;
if ($it['it_tel_inq']) return '전화문의';
$price = $it['it_price'];
return (int)$price;
}
?>
위와 같은 get_price()함수를 아래와 같이 수정 하겠습니다.
<?php
/* www/lib/shop.lib.php */
// 금액표시
// $it : 상품 배열
function get_price($it)
{
global $member;
if ($it['it_tel_inq']) return '전화문의';
if ($member['mb_level'] >= 10 && $it['it_price10'] > 0) {
$price = $it['it_price10'];
} else if ($member['mb_level'] == 9 && $it['it_price9'] > 0) {
$price = $it['it_price9'];
} else if ($member['mb_level'] == 8 && $it['it_price8'] > 0) {
$price = $it['it_price8'];
} else if ($member['mb_level'] == 7 && $it['it_price7'] > 0) {
$price = $it['it_price7'];
} else if ($member['mb_level'] == 6 && $it['it_price6'] > 0) {
$price = $it['it_price6'];
} else if ($member['mb_level'] == 5 && $it['it_price5'] > 0) {
$price = $it['it_price5'];
} else if ($member['mb_level'] == 4 && $it['it_price4'] > 0) {
$price = $it['it_price4'];
} else if ($member['mb_level'] == 3 && $it['it_price3'] > 0) {
$price = $it['it_price3'];
} else if ($member['mb_level'] == 2 && $it['it_price2'] > 0) {
$price = $it['it_price2'];
} else {
$price = $it['it_price'];
}
return (int)$price;
}
?>
위의 함수 수정을 간단하게 설명드리자면
회원등급별 다른 필드의 상품금액을 가져와서 반환한다고 생각하시면 됩니다.
예를들어 회원등급이 2라면 it_price2 필드에 입력된 상품금액을 반환하고,
회원등급이 8이라면 it_price8 필드에 입력된 상품금액을 반환하도록 되어있습니다.
2. www/adm/shop_admin/itemform.php 파일에서 아래의 소스코드 부분을 찾아보겠습니다.
<!-- www/adm/shop_admin/itemform.php -->
<tr>
<th scope="row"><label for="it_price">판매가격</label></th>
<td>
<input type="text" name="it_price" value="<?php echo $it['it_price']; ?>" id="it_price" class="frm_input" size="8"> 원
</td>
<td class="td_grpset">
<input type="checkbox" name="chk_ca_it_price" value="1" id="chk_ca_it_price">
<label for="chk_ca_it_price">분류적용</label>
<input type="checkbox" name="chk_all_it_price" value="1" id="chk_all_it_price">
<label for="chk_all_it_price">전체적용</label>
</td>
</tr>
해당 판매가격 부분에는 상품판매 금액을 입력하는 부분인데 여기를 10(등급 1~10)개로 늘리기위해서
관리자페이지->쇼핑몰관리->상품관리->상품등록 페이지에
등급별 상품금액을 입력하는 란을 아래와 같이 추가하겠습니다.
<!-- www/adm/shop_admin/itemform.php -->
<tr>
<th scope="row"><label for="it_price">[레벨 1] 판매가격</label></th>
<td>
<input type="text" name="it_price" value="<?php echo $it['it_price']; ?>" id="it_price" class="frm_input" size="8"> 원
</td>
<td class="td_grpset">
<input type="checkbox" name="chk_ca_it_price" value="1" id="chk_ca_it_price">
<label for="chk_ca_it_price">분류적용</label>
<input type="checkbox" name="chk_all_it_price" value="1" id="chk_all_it_price">
<label for="chk_all_it_price">전체적용</label>
</td>
</tr>
<?php for ($i=2; $i<=10; $i++) { ?>
<tr>
<th scope="row"><label for="it_price<?echo $i?>">[레벨 <?echo $i?>] 판매가격</label></th>
<td>
<input type="text" name="it_price<?echo $i?>" value="<?php echo $it['it_price'.$i]; ?>" id="it_price<?echo $i?>" class="frm_input" size="8"> 원
</td>
<td class="td_grpset">
<input type="checkbox" name="chk_ca_it_price<?echo $i?>" value="1" id="chk_ca_it_price<?echo $i?>">
<label for="chk_ca_it_price<?echo $i?>">분류적용</label>
<input type="checkbox" name="chk_all_it_price<?echo $i?>" value="1" id="chk_all_it_price<?echo $i?>">
<label for="chk_all_it_price<?echo $i?>">전체적용</label>
</td>
</tr>
<?php } ?>
위와 같이 추가하면 관리자페이지->쇼핑몰관리->상품관리->상품등록 페이지에
아래의 첨부 이미지와 같이 레벨별 판매금액을 입력하는 칸이 생성됩니다.
3. 해당 itemform.php 파일에서 필드를 it_price2 ~ it_price10 까지 추가를 했기 때문에
db테이블에도 해당 필드를 업데이트 하기 위해서 상품등록시 이동되는 업데이트 페이지
www/adm/shop_admin/itemformupdate.php 파일에서도 해당 생성한 필드를 추가 하도록 하겠습니다.
아래의 파일에서 업데이트가 되는 부분을 찾아 보겠습니다.
<?php
/* www/adm/shop_admin/itemformupdate.php */
$sql_common = " ca_id = '$ca_id',
ca_id2 = '$ca_id2',
ca_id3 = '$ca_id3',
it_skin = '$it_skin',
it_mobile_skin = '$it_mobile_skin',
it_name = '$it_name',
it_maker = '$it_maker',
it_origin = '$it_origin',
it_brand = '$it_brand',
it_model = '$it_model',
it_option_subject = '$it_option_subject',
it_supply_subject = '$it_supply_subject',
it_type1 = '$it_type1',
it_type2 = '$it_type2',
it_type3 = '$it_type3',
it_type4 = '$it_type4',
it_type5 = '$it_type5',
it_basic = '$it_basic',
it_explan = '$it_explan',
it_explan2 = '".strip_tags(trim($_POST['it_explan']))."',
it_mobile_explan = '$it_mobile_explan',
it_cust_price = '$it_cust_price',
it_price = '$it_price',
......
";
?>
위와 같이 it_price = '$it_price', 부분을 찾았다면
해당 부분 바로 아래 부분에 아래와 같이 이전 파일에서 추가한 it_price2 ~ it_price10 까지 추가 하겠습니다.
<?php
/* www/adm/shop_admin/itemformupdate.php */
$sql_common = " ca_id = '$ca_id',
ca_id2 = '$ca_id2',
ca_id3 = '$ca_id3',
it_skin = '$it_skin',
it_mobile_skin = '$it_mobile_skin',
it_name = '$it_name',
it_maker = '$it_maker',
it_origin = '$it_origin',
it_brand = '$it_brand',
it_model = '$it_model',
it_option_subject = '$it_option_subject',
it_supply_subject = '$it_supply_subject',
it_type1 = '$it_type1',
it_type2 = '$it_type2',
it_type3 = '$it_type3',
it_type4 = '$it_type4',
it_type5 = '$it_type5',
it_basic = '$it_basic',
it_explan = '$it_explan',
it_explan2 = '".strip_tags(trim($_POST['it_explan']))."',
it_mobile_explan = '$it_mobile_explan',
it_cust_price = '$it_cust_price',
it_price = '$it_price',
it_price2 = '$it_price2',
it_price3 = '$it_price3',
it_price4 = '$it_price4',
it_price5 = '$it_price5',
it_price6 = '$it_price6',
it_price7 = '$it_price7',
it_price8 = '$it_price8',
it_price9 = '$it_price9',
it_price10 = '$it_price10',
......
";
?>
4. 이제 상품구매, 장바구니에 넣을때 저장되는 www/shop/cartupdate.php 파일에서
제대로된 등급별 금액을 넣기위해서 소스코드를 수정 하기 위해서 수정 할 부분을 찾아보겠습니다.
<?php
/* www/shop/cartupdate.php */
// 배송비결제
if($it['it_sc_type'] == 1)
$ct_send_cost = 2; // 무료
else if($it['it_sc_type'] > 1 && $it['it_sc_method'] == 1)
$ct_send_cost = 1; // 착불
$sql .= $comma."( '$tmp_cart_id', '{$member['mb_id']}', '{$it['it_id']}', '".addslashes($it['it_name'])."', '{$it['it_sc_type']}', '{$it['it_sc_method']}', '{$it['it_sc_price']}', '{$it['it_sc_minimum']}', '{$it['it_sc_qty']}', '쇼핑', '{$it['it_price']}', '$point', '0', '0', '$io_value', '$ct_qty', '{$it['it_notax']}', '$io_id', '$io_type', '$io_price', '".G5_TIME_YMDHIS."', '$REMOTE_ADDR', '$ct_send_cost', '$sw_direct', '$ct_select', '$ct_select_time' )";
$comma = ' , ';
$ct_count++;
?>
위의 소스코드 부분이 상품구매, 장바구니에 넣을때 저장되는 부분입니다.
해당 부분을 아래와 같이 수정 하겠습니다.
<?php
/* www/shop/cartupdate.php */
// 배송비결제
$it['it_price'] = get_price($it);
if($it['it_sc_type'] == 1)
$ct_send_cost = 2; // 무료
else if($it['it_sc_type'] > 1 && $it['it_sc_method'] == 1)
$ct_send_cost = 1; // 착불
$sql .= $comma."( '$tmp_cart_id', '{$member['mb_id']}', '{$it['it_id']}', '".addslashes($it['it_name'])."', '{$it['it_sc_type']}', '{$it['it_sc_method']}', '{$it['it_sc_price']}', '{$it['it_sc_minimum']}', '{$it['it_sc_qty']}', '쇼핑', '{$it['it_price']}', '$point', '0', '0', '$io_value', '$ct_qty', '{$it['it_notax']}', '$io_id', '$io_type', '$io_price', '".G5_TIME_YMDHIS."', '$REMOTE_ADDR', '$ct_send_cost', '$sw_direct', '$ct_select', '$ct_select_time' )";
$comma = ' , ';
$ct_count++;
?>
이렇게 순서대로 잘 따라 오셨다면 회원 등급별 구매 금액이 다르게 쇼핑몰을 구축 할 수 있겠습니다.
위에서 언급한 새로 추가한 필드 it_price2 ~ it_price10를 추가하는 쿼리문을 첨부 하겠습니다.
1. db접속 툴에서 쿼리를 바로 사용할 경우
ALTER TABLE `g5_shop_item`
ADD `it_price2` INT(11) NOT NULL DEFAULT '0',
ADD `it_price3` INT(11) NOT NULL DEFAULT '0',
ADD `it_price4` INT(11) NOT NULL DEFAULT '0',
ADD `it_price5` INT(11) NOT NULL DEFAULT '0',
ADD `it_price6` INT(11) NOT NULL DEFAULT '0',
ADD `it_price7` INT(11) NOT NULL DEFAULT '0',
ADD `it_price8` INT(11) NOT NULL DEFAULT '0',
ADD `it_price9` INT(11) NOT NULL DEFAULT '0',
ADD `it_price10` INT(11) NOT NULL DEFAULT '0' ;
2. php파일을 생성해서 추가할 경우
www/it_price.php 파일을 하나 생성하시고 아래와 같은 소스코드로 .php 파일을 작성하고
이후 도메인주소/it_price.php 경로로 브라우저를 띄워서 접속하시면 자동으로 필드가 생성되겠습니다.
<?php
/* www/it_price.php */
include_once('./common.php');
sql_query(" ALTER TABLE `{$g5['g5_shop_item_table']}`
ADD `it_price2` INT(11) NOT NULL DEFAULT '0',
ADD `it_price3` INT(11) NOT NULL DEFAULT '0',
ADD `it_price4` INT(11) NOT NULL DEFAULT '0',
ADD `it_price5` INT(11) NOT NULL DEFAULT '0',
ADD `it_price6` INT(11) NOT NULL DEFAULT '0',
ADD `it_price7` INT(11) NOT NULL DEFAULT '0',
ADD `it_price8` INT(11) NOT NULL DEFAULT '0',
ADD `it_price9` INT(11) NOT NULL DEFAULT '0',
ADD `it_price10` INT(11) NOT NULL DEFAULT '0' ; ", true);
alert('필드 추가가 완료되었습니다.', G5_URL);
?>
/////////////////////////////////////
그누보드5.4 버전 기준 추가 변경 해야 할 함수
shop.lib.php 파일에서
$it['it_price'] = get_price($it);
를 추가하면
다음의 조건식의 값을 int(숫자형)로 형변환 하여야 함.
if( $it['it_price'] !== $row['ct_price'] ){
...
}
/* www/lib/shop.lib.php */
// 장바구니 금액 체크 $is_price_update 가 true 이면 장바구니 가격 업데이트한다.
function before_check_cart_price($s_cart_id, $is_ct_select_condition=false, $is_price_update=false, $is_item_cache=false){
global $g5, $default, $config;
if( !$s_cart_id ){
return;
}
$select_where_add = '';
if( $is_ct_select_condition ){
$select_where_add = " and ct_select = '0' ";
}
$sql = " select * from `{$g5['g5_shop_cart_table']}` where od_id = '$s_cart_id' {$select_where_add} ";
$result = sql_query($sql);
$check_need_update = false;
for ($i=0; $row=sql_fetch_array($result); $i++){
if( ! $row['it_id'] ) continue;
$it_id = $row['it_id'];
$it = get_shop_item($it_id, $is_item_cache);
$it['it_price'] = get_price($it);
$update_querys = array();
if(!$it['it_id'])
continue;
if( (int)$it['it_price'] !== (int)$row['ct_price'] ){
// 장바구니 테이블 상품 가격과 상품 테이블의 상품 가격이 다를경우
$update_querys['ct_price'] = $it['it_price'];
}
if( $row['io_id'] ){
$io_sql = " select * from {$g5['g5_shop_item_option_table']} where it_id = '{$it['it_id']}' and io_id = '{$row['io_id']}' ";
$io_infos = sql_fetch( $io_sql );
if( $io_infos['io_type'] ){
$this_io_type = $io_infos['io_type'];
}
if( $io_infos['io_id'] && $io_infos['io_price'] !== $row['io_price'] ){
// 장바구니 테이블 옵션 가격과 상품 옵션테이블의 옵션 가격이 다를경우
$update_querys['io_price'] = $io_infos['io_price'];
}
}
// 포인트
$compare_point = 0;
if($config['cf_use_point']) {
// DB 에 io_type 이 1이면 상품추가옵션이며, 0이면 상품선택옵션이다
if($row['io_type'] == 0) {
$compare_point = get_item_point($it, $row['io_id']);
} else {
$compare_point = $it['it_supply_point'];
}
if($compare_point < 0)
$compare_point = 0;
}
if((int) $row['ct_point'] !== (int) $compare_point){
// 장바구니 테이블 적립 포인트와 상품 테이블의 적립 포인트가 다를경우
$update_querys['ct_point'] = $compare_point;
}
if( $update_querys ){
$check_need_update = true;
}
// 장바구니에 담긴 금액과 실제 상품 금액에 차이가 있고, $is_price_update 가 true 인 경우 장바구니 금액을 업데이트 합니다.
if( $is_price_update && $update_querys ){
$conditions = array();
foreach ($update_querys as $column => $value) {
$conditions[] = "`{$column}` = '{$value}'";
}
if( $col_querys = implode(',', $conditions) ) {
$sql_query = "update `{$g5['g5_shop_cart_table']}` set {$col_querys} where it_id = '{$it['it_id']}' and od_id = '$s_cart_id' and ct_id = '{$row['ct_id']}' ";
sql_query($sql_query, false);
}
}
}
// 장바구니에 담긴 금액과 실제 상품 금액에 차이가 있다면
if( $check_need_update ){
return false;
}
return true;
}
댓글목록
일산개발님의 댓글
일산개발쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일
안녕하세요~ 정말 좋은 팁 우선 감사드립니다! 올려주신 팁을 차분히 적용해보니 정상적으로 가격 조절이 되며 주문까지 완료되는것 확인하였습니다.
헌데, 한가지 해결이 안되는 부분이 있는데 알아봐 주실 수 있을까요?
비회원 상태에서 -> 상품 바로구매 선택 -> 중앙 로그인창에서 로그인 -> oderform 페이지에서의 가격이 회원가격/특별가격이 아닌 판매가격으로 나오네요~
그리고, 비회원 상태에서 -> 상품 장바구니 선택 -> 주문하기 -> 중앙 로그인창에서 로그인 -> oderform 으로 넘어가면 역시 회원가격/특별가격이 아닌 판매가격으로 나오네요~
이 부분 어느쪽 파일을 손대야 가능할지 머리를 굴려보고 있는데 답이 안나와서요~