[기능] 회원 등급별 상품구매금액 다르게 설정 > 정보공유

본문 바로가기

정보공유

일반글
영카트팁

[기능] 회원 등급별 상품구매금액 다르게 설정

페이지 정보

게시물QR코드

본문

그누보드의 기본게시판에서는 분류를 사용시

분류를 입력한 순서대로 게시판 목록에서 나타나도록 되어있습니다.

아래 첨부 이미지와 같이 분류를 사용하고 분류를 순서없이 작성을 하게되면

 

영카트 기본에서는 비회원, 회원 등 기존에있는 등급에 따라서

상품구매 금액을 다르게 설정하는 방법은 없습니다.

하지만 등급별 회원을 나누어서 관리를 하는 쇼핑몰의 경우에는 해당 기능이 필요할때가 있는데

회원 등급별 상품금액을 다르게 판매 할 수 있도록 소스코드 수정을 통해서

영카트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 } ?>​

위와 같이 추가하면 관리자페이지->쇼핑몰관리->상품관리->상품등록 페이지에 

아래의 첨부 이미지와 같이 레벨별 판매금액을 입력하는 칸이 생성됩니다.

54d864f7d3015c9c9c6316814629fbf8_1497338642_4648.png 

 

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;

}

댓글목록

hjin님의 댓글

no_profile hjin쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

안녕하세요. 글 올려주신 것을 보고 적용을 했는데 관리자페이지에서 금액을 입력하면 반영이 되지 않고 공란으로 처리됩니다.
서버환경은 php7.0 이고 영카트 최신버전입니다. 영카트가 업데이트 되면서 따로 코드를 반영시켜줘야 하는것이 있을까요? 답변 부탁드립니다.

그누위즈님의 댓글의 댓글

그누위즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

안녕하세요 hjin님 해당 소스는 현재 그누보드 5.3 버전까지 문제가 없는 소스입니다.
차근차근 따라해보시고 적용해보세요.
감사합니다.

일산개발님의 댓글

no_profile 일산개발쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

안녕하세요~ 정말 좋은 팁 우선 감사드립니다! 올려주신 팁을 차분히 적용해보니 정상적으로 가격 조절이 되며 주문까지 완료되는것 확인하였습니다.

헌데, 한가지 해결이 안되는 부분이 있는데 알아봐 주실 수 있을까요?

비회원 상태에서 -> 상품 바로구매 선택 -> 중앙 로그인창에서 로그인 -> oderform 페이지에서의 가격이 회원가격/특별가격이 아닌 판매가격으로 나오네요~
그리고, 비회원 상태에서 -> 상품 장바구니 선택 -> 주문하기 -> 중앙 로그인창에서 로그인 -> oderform 으로 넘어가면 역시 회원가격/특별가격이 아닌 판매가격으로 나오네요~

이 부분 어느쪽 파일을 손대야 가능할지 머리를 굴려보고 있는데 답이 안나와서요~

그누위즈님의 댓글의 댓글

그누위즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

안녕하세요 해당 부분을 참고하여 비회원 상태에서 주문되는 부분에 해당부분과 같이
작업을 진행하셔야 할것같습니다.

일산개발님의 댓글의 댓글

no_profile 일산개발쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

답변 감사드립니다. 말씀해주신대로 비회원에서 로그인 주문까지 이어지는 흐름중에 회원일경우의 값을 대입했더니 잘 작동되네요~

gooddark님의 댓글

no_profile gooddark쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

상품의 판매금액에선 설정한 값 그대로 나오는데, 장바구니에선 레벨 1 판매금액만 불러오던데 왜 그런가요?

그누위즈님의 댓글의 댓글

그누위즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

안녕하세요 그누위즈 입니다.
해당 자료는 4년전 그누보드의 자료이므로 약간의 변경이 필요 할수도 있을듯합니다.
sir.kr 에서 참고 자료 검색해서 찾아보시는게 좋을듯합니다.
감사합니다.

  • Addr.부산광역시 동구 중앙대로 319, 9층 L4호(초량동, 부산YMCA빌딩) Email. gnuwiz@naver.com
  • BR. 625-68-00172 TRC. 2019-부산해운대-1186 TEL. 0507-1382-2790
All rights reserved.