[기능] 회원가입시 신규가입 쿠폰 발행 > 정보공유

본문 바로가기

정보공유

일반글
영카트팁

[기능] 회원가입시 신규가입 쿠폰 발행

페이지 정보

게시물QR코드

본문

영카트에서는 기본 기능으로 신규가입시 쿠폰을 발행하는 기능이 있습니다.

dd681d683b5f8459f6fdee112c8b5585_1532664553_8334.png


해당 기능은 쇼핑몰 환경설정 메뉴에 있는데 신규가입 쿠폰 기능을 사용하면

아래와 같이 쿠폰관리 메뉴에 자동으로 신규가입 쿠폰이 등록됩니다.

dd681d683b5f8459f6fdee112c8b5585_1532664702_035.png

쿠폰관리 메뉴에서 쿠폰을 발급 할 시에는 쿠폰의 종류, 쿠폰타입 등 설정할 수 있는 기능이 많지만

쇼핑몰 설정 메뉴에 있는 신규가입 쿠폰발행의 기능에는 여러가지 쿠폰의 세부 설정을 할 수 없는 아쉬움이 있습니다.

dd681d683b5f8459f6fdee112c8b5585_1532664765_953.png


그래서 이번에는 신규가입시 일반 쿠폰발행과 마찬가지로 여러가지 설정을 적용하여 발급이 가능하도록 구현하겠습니다.


1.우선 www/adm/shop_admin/configform.php 파일의 상단에 필요한 여분필드를 생성하는 코드를 추가하겠습니다.

<?php

/* www/adm/shop_admin/configform.php */


// 신규회원 쿠폰 설정 필드추가(gnuwiz)

if(!isset($default['de_member_reg_coupon_method'])) {

    sql_query(" ALTER TABLE `{$g5['g5_shop_default_table']}`

                    ADD `de_member_reg_coupon_method` tinyint(4) NOT NULL DEFAULT '0' AFTER `de_member_reg_coupon_minimum`,

                    ADD `de_member_reg_coupon_target` VARCHAR(255) NOT NULL DEFAULT '' AFTER `de_member_reg_coupon_method`,

                    ADD `de_member_reg_coupon_type` TINYINT(4) NOT NULL DEFAULT '0' AFTER `de_member_reg_coupon_target`,

                    ADD `de_member_reg_coupon_trunc` INT(11) NOT NULL DEFAULT '0' AFTER `de_member_reg_coupon_type`,

                    ADD `de_member_reg_coupon_maximum` INT(11) NOT NULL DEFAULT '0' AFTER `de_member_reg_coupon_trunc` ", true);

}

?>

이렇게 쿠폰발급에 필요한 여분필드 5개를 생성하는 코드를 추가하고

래와 같은 설정별 탭을 생성하는 소스가 있는 부분을 찾습니다.

<?php

$pg_anchor = '<ul class="anchor">

<li><a href="#anc_scf_info">사업자정보</a></li>

<li><a href="#anc_scf_skin">스킨설정</a></li>

<li><a href="#anc_scf_index">쇼핑몰 초기화면</a></li>

<li><a href="#anc_mscf_index">모바일 초기화면</a></li>

<li><a href="#anc_scf_payment">결제설정</a></li>

<li><a href="#anc_scf_delivery">배송설정</a></li>

<li><a href="#anc_scf_etc">기타설정</a></li>

<li><a href="#anc_scf_sms">SMS설정</a></li>

</ul>';

?>


여기 부분에 아래와 같이 "신규회원 쿠폰설정" 이라는 탭을 하나 추가하도록 하겠습니다.

<?php

$pg_anchor = '<ul class="anchor">

<li><a href="#anc_scf_info">사업자정보</a></li>

<li><a href="#anc_scf_skin">스킨설정</a></li>

<li><a href="#anc_scf_index">쇼핑몰 초기화면</a></li>

<li><a href="#anc_mscf_index">모바일 초기화면</a></li>

<li><a href="#anc_scf_payment">결제설정</a></li>

<li><a href="#anc_scf_delivery">배송설정</a></li>

<li><a href="#anc_scf_etc">기타설정</a></li>

<li><a href="#anc_scf_coupon">신규회원 쿠폰설정</a></li> 

<li><a href="#anc_scf_sms">SMS설정</a></li>

</ul>';

?>


그리고 기타설정과 SMS설정 탭의 사이 부분에 아래의 HTML, PHP, Javascript 소스코드를 추가합니다.

<section id="anc_scf_coupon" >

    <h2 class="h2_frm">신규회원 쿠폰 설정</h2>

    <?php echo $pg_anchor; ?>


    <div class="tbl_frm01 tbl_wrap">

        <table>

        <caption>신규회원 쿠폰 설정</caption>

        <colgroup>

            <col class="grid_4">

            <col>

        </colgroup>

        <tbody>

<?php

if($default['de_member_reg_coupon_method'] == 1) {

$cp_target_label = '적용분류';

$cp_target_btn = '분류검색';

} else {

$cp_target_label = '적용상품';

$cp_target_btn = '상품검색';

}

?>

        <tr>

            <th scope="row">신규회원 쿠폰발행</th>

            <td>

                 <?php echo help("신규회원에게 주문금액 할인 쿠폰을 발행하시려면 아래를 설정하십시오."); ?>

                <label for="de_member_reg_coupon_use">쿠폰발행</label>

                <input type="checkbox" name="de_member_reg_coupon_use" value="1" id="de_member_reg_coupon_use"<?php echo $default['de_member_reg_coupon_use']?' checked':''; ?>>

            </td>

        </tr>

<tr>

<th scope="row"><label for="de_member_reg_coupon_method">쿠폰종류</label></th>

<td>

   <?php echo help("쿠폰 종류를 변경하시면 입력 서식도 일부 변경됩니다."); ?>

   <select name="de_member_reg_coupon_method" id="cp_method">

<option value="0"<?php echo get_selected('0', $default['de_member_reg_coupon_method']); ?>>개별상품할인</option>

<option value="1"<?php echo get_selected('1', $default['de_member_reg_coupon_method']); ?>>카테고리할인</option>

<option value="2"<?php echo get_selected('2', $default['de_member_reg_coupon_method']); ?>>주문금액할인</option>

<option value="3"<?php echo get_selected('3', $default['de_member_reg_coupon_method']); ?>>배송비할인</option>

   </select>

</td>

</tr>

<tr id="tr_cp_target">

<th scope="row"><label for="cp_target"><?php echo $cp_target_label; ?></label></th>

<td>

   <input type="text" name="de_member_reg_coupon_target" value="<?php echo $default['de_member_reg_coupon_target']; ?>" id="cp_target" required class="required frm_input">

   <button type="button" id="sch_target" class="btn_frmline"><?php echo $cp_target_btn; ?></button>

</td>

</tr>


<tr id="tr_cp_target">

<th scope="row"><label for="cp_target">쿠폰유효기간</label></th>

<td>

                <input type="text" name="de_member_reg_coupon_term" value="<?php echo $default['de_member_reg_coupon_term']; ?>" id="de_member_reg_coupon_term" class="frm_input" size="5"> 일

</td>

</tr>


<tr>

<th scope="row"><label for="de_member_reg_coupon_type">쿠폰타입</label></th>

<td>

   <?php echo help("쿠폰 타입을 변경하시면 입력 서식도 일부 변경됩니다."); ?>

   <select name="de_member_reg_coupon_type" id="cp_type">

<option value="0"<?php echo get_selected('0', $default['de_member_reg_coupon_type']); ?>>정액할인(원)</option>

<option value="1"<?php echo get_selected('1', $default['de_member_reg_coupon_type']); ?>>정률할인(%)</option>

   </select>

</td>

</tr>

<tr>

<th scope="row"><label for="de_member_reg_coupon_price"><?php echo $default['de_member_reg_coupon_type'] ? '할인비율' : '할인금액'; ?></label></th>

<td>

<input type="text" name="de_member_reg_coupon_price" value="<?php echo $default['de_member_reg_coupon_price']; ?>" id="cp_price" required class="frm_input required"> <span id="cp_price_unit"><?php echo $default['de_member_reg_coupon_type'] ? '%' : '원'; ?></span>

</td>

</tr>

<tr id="tr_cp_trunc">

<th scope="row"><label for="cp_trunc">절사금액</label></th>

<td>

<select name="de_member_reg_coupon_trunc" id="cp_trunc">

<option value="1"<?php echo get_selected('1', $default['de_member_reg_coupon_trunc']); ?>>1원단위</option>

<option value="10"<?php echo get_selected('10', $default['de_member_reg_coupon_trunc']); ?>>10원단위</option>

<option value="100"<?php echo get_selected('100', $default['de_member_reg_coupon_trunc']); ?>>100원단위</option>

<option value="1000"<?php echo get_selected('1000', $default['de_member_reg_coupon_trunc']); ?>>1,000원단위</option>

   </select>

</td>

</tr>

<tr>

<th scope="row"><label for="de_member_reg_coupon_minimum">최소주문금액</label></th>

<td>

<input type="text" name="de_member_reg_coupon_minimum" value="<?php echo $default['de_member_reg_coupon_minimum']; ?>" id="cp_minimum" class="frm_input"> 원

</td>

</tr>

<tr id="tr_cp_maximum">

<th scope="row"><label for="de_member_reg_coupon_maximum">최대할인금액</label></th>

<td>

<input type="text" name="de_member_reg_coupon_maximum" value="<?php echo $default['de_member_reg_coupon_maximum']; ?>" id="cp_maximum" class="frm_input"> 원

</td>

</tr>

         </tbody>

        </table>

    </div>


</section>




<script>

$(function() {

    <?php if($default['de_member_reg_coupon_method'] == 2 || $default['de_member_reg_coupon_method'] == 3) { ?>

    $("#tr_cp_target").hide();

    $("#tr_cp_target").find("input").attr("required", false).removeClass("required");

    <?php } ?>

    <?php if($default['cp_type'] != 1) { ?>

    $("#tr_cp_maximum").hide();

    $("#tr_cp_trunc").hide();

    <?php } ?>

    $("#cp_method").change(function() {

        var cp_method = $(this).val();

        change_method(cp_method);

    });


    $("#cp_type").change(function() {

        var cp_type = $(this).val();

        change_type(cp_type);

    });


    $("#sch_target").click(function() {

        var cp_method = $("#cp_method").val();

        var opt = "left=50,top=50,width=520,height=600,scrollbars=1";

        var url = "./config_coupontarget.php?sch_target=";


        if(cp_method == "0") {

            window.open(url+"0", "win_target", opt);

        } else if(cp_method == "1") {

            window.open(url+"1", "win_target", opt);

        } else {

            return false;

        }

    });

});


function change_method(cp_method)

{

    if(cp_method == "0") {

        $("#sch_target").text("상품검색");

        $("#tr_cp_target").find("label").text("적용상품");

        $("#tr_cp_target").find("input").attr("required", true).addClass("required");

        $("#tr_cp_target").show();

    } else if(cp_method == "1") {

        $("#sch_target").text("분류검색");

        $("#tr_cp_target").find("label").text("적용분류");

        $("#tr_cp_target").find("input").attr("required", true).addClass("required");

        $("#tr_cp_target").show();

    } else {

        $("#tr_cp_target").hide();

        $("#tr_cp_target").find("input").attr("required", false).removeClass("required");

    }

}


function change_type(cp_type)

{

    if(cp_type == "0") {

        $("#cp_price_unit").text("원");

        $("#cp_price_unit").closest("tr").find("label").text("할인금액");

        $("#tr_cp_maximum").hide();

        $("#tr_cp_trunc").hide();

    } else {

        $("#cp_price_unit").text("%");

        $("#cp_price_unit").closest("tr").find("label").text("할인비율");

        $("#tr_cp_maximum").show();

        $("#tr_cp_trunc").show();

    }

}


function form_check(f)

{

    var sel_type = f.cp_type;

    var cp_type = sel_type.options[sel_type.selectedIndex].value;

    var cp_price = f.cp_price.value;


    if(isNaN(cp_price)) {

        if(cp_type == "1")

            alert("할인비율을 숫자로 입력해 주십시오.");

        else

            alert("할인금액을 숫자로 입력해 주십시오.");


        return false;

    }


    cp_price = parseInt(cp_price);


    if(cp_type == "1" && (cp_price < 1 || cp_price > 99)) {

        alert("할인비율을 1과 99 사이의 숫자로 입력해 주십시오.");

        return false;

    }


    return true;

}

</script>


여기까지 configform.php 파일의 소스 추가가 완료 되었다면 마지막으로 기존에 있던 쿠폰발행 부분을 삭제 처리합니다.

삭제를 해야하는 소스는 다음과 같습니다.

<tr>

<th scope="row">신규회원 쿠폰발행</th>

<td>

<?php echo help("신규회원에게 주문금액 할인 쿠폰을 발행하시려면 아래를 설정하십시오."); ?>

<label for="de_member_reg_coupon_use">쿠폰발행</label>

<input type="checkbox" name="de_member_reg_coupon_use" value="1" id="de_member_reg_coupon_use"<?php echo $default['de_member_reg_coupon_use']?' checked':''; ?>>

<label for="de_member_reg_coupon_price">쿠폰할인금액</label>

<input type="text" name="de_member_reg_coupon_price" value="<?php echo $default['de_member_reg_coupon_price']; ?>" id="de_member_reg_coupon_price" class="frm_input" size="10"> 원

<label for="de_member_reg_coupon_minimum">주문최소금액</label>

<input type="text" name="de_member_reg_coupon_minimum" value="<?php echo $default['de_member_reg_coupon_minimum']; ?>" id="de_member_reg_coupon_minimum" class="frm_input" size="10"> 원이상

<label for="de_member_reg_coupon_term">쿠폰유효기간</label>

<input type="text" name="de_member_reg_coupon_term" value="<?php echo $default['de_member_reg_coupon_term']; ?>" id="de_member_reg_coupon_term" class="frm_input" size="5"> 일

</td>

</tr>


여기까지가 순서 1번입니다. 이렇게 "신규회원 쿠폰 설정" 탭과 메뉴가 잘 나타난다면 정상으로 적용된 것 입니다.

만약 페이지에서 오류가 발생하거나 한다면 다시 처음부터 차근차근 따라서 진행하시기 바랍니다.

dd681d683b5f8459f6fdee112c8b5585_1532666125_3909.png
 


2. www/adm/shop_admin/ 경로에 config_coupontarget.php 파일을 생성합니다.

config_coupontarget.php 파일의 소스는 다음과 같습니다.

<?php

/* www/adm/shop_admin/config_coupontarget.php */


$sub_menu = '400800';

include_once('./_common.php');


auth_check($auth[$sub_menu], "w");


$sch_target = substr(preg_replace('/[^a-zA-Z0-9]/', '', strip_tags($_GET['sch_target'])), 0, 1);

$sch_word   = clean_xss_tags($_GET['sch_word']);


if($_GET['sch_target'] == 1) {

    $html_title = '분류';

    $t_name = '분류명';

    $t_id = '분류코드';

    $t_desc1 = '분류를';

    $t_desc2 = '분류가';

} else {

    $html_title = '상품';

    $t_name = '상품명';

    $t_id = '상품코드';

    $t_desc1 = '상품을';

    $t_desc2 = '상품이';

}


$g5['title'] = $html_title.'검색';

include_once(G5_PATH.'/head.sub.php');


if($sch_target == 1) {

    $sql_common = " from {$g5['g5_shop_category_table']} ";

    $sql_where = " where ca_use = '1' and ca_nocoupon = '0' ";

    if($sch_word)

        $sql_where .= " and ca_name like '%$sch_word%' ";

    $sql_select = " select ca_id as t_id, ca_name as t_name ";

    $sql_order = " order by ca_order, ca_name ";

} else {

    $sql_common = " from {$g5['g5_shop_item_table']} ";

    $sql_where = " where it_use = '1' and it_nocoupon = '0' ";

    if($sch_word)

        $sql_where .= " and it_name like '%$sch_word%' ";

    $sql_select = " select it_id as t_id, it_name as t_name ";

    $sql_order = " order by it_order, it_name ";

}


// 테이블의 전체 레코드수만 얻음

$sql = " select count(*) as cnt " . $sql_common . $sql_where;

$row = sql_fetch($sql);

$total_count = $row['cnt'];


$rows = $config['cf_page_rows'];

$total_page  = ceil($total_count / $rows);  // 전체 페이지 계산

if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)

$from_record = ($page - 1) * $rows; // 시작 열을 구함


$sql = $sql_select . $sql_common . $sql_where . $sql_order . " limit $from_record, $rows ";

$result = sql_query($sql);


$qstr1 = 'sch_target='.$sch_target.'&amp;sch_word='.urlencode($sch_word);

?>


<div id="sch_target_frm" class="new_win scp_new_win">

    <h1>쿠폰 적용 <?php echo $html_title; ?>선택</h1>


    <div class="local_desc01 local_desc">

        <p>

            쿠폰을 적용할 <?php echo $t_desc1; ?> 선택하세요.<br>

            <?php echo $t_desc2; ?> 많을 경우에는 검색 기능을 이용하세요.

        </p>

    </div>


    <form name="ftarget" method="get">

    <input type="hidden" name="sch_target" value="<?php echo preg_replace('/[^a-zA-Z0-9]/', '', strip_tags($_GET['sch_target'])); ?>">


    <div id="scp_list_find">

        <label for="sch_word"><?php echo $t_name; ?></label>

        <input type="text" name="sch_word" id="sch_word" value="<?php echo get_text($sch_word); ?>" class="frm_input required" required size="20">

        <input type="submit" value="검색" class="btn_frmline">

    </div>

    

    <div class="tbl_head01 tbl_wrap new_win_con">

        <table>

        <caption>검색결과</caption>

        <thead>

        <tr>

            <th scope="col"><?php echo $t_name; ?></th>

            <th scope="col"><?php echo $t_id; ?></th>

            <th scope="col">선택</th>

        </tr>

        </thead>

        <tbody>

        <?php

        for($i=0; $row=sql_fetch_array($result); $i++) {

        ?>

        <tr>

            <td class="td_left"><?php echo $row['t_name']; ?></td>

            <td class="scp_target_code"><?php echo $row['t_id']; ?></td>

            <td class="td_mng td_mng_s"><button type="button" class="btn btn_03" onclick="sel_target_id('<?php echo $row['t_id']; ?>');">선택</button>

        </tr>

        <?php

        }


        if($i ==0)

            echo '<tr><td colspan="3" class="empty_table">검색된 자료가 없습니다.</td></tr>';

        ?>

        </tbody>

        </table>

    </div>

    </form>


    <?php echo get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, '?'.$qstr1.'&amp;page='); ?>


    <div class="btn_confirm01 btn_confirm win_btn">

        <button type="button" onclick="window.close();" class="btn">닫기</button>

    </div>

</div>


<script>

function sel_target_id(id)

{

    var f = window.opener.document.fconfig;

    f.cp_target.value = id;


    window.close();

}

</script>


<?php

include_once(G5_PATH.'/tail.sub.php');

?>


3. 이어서 앞서 configform.php 파일에서 추가한 필드들이 데이터베이스에 입력될 수 있도록

www/adm/shop_admin/configform.php 파일에 아래와 같이 쿼리문을 추가합니다.

<?php

/* www/adm/shop_admin/configform.php */


// 신규 쿠폰 발행 설정(gnuwiz)

$sql = " update {$g5['g5_shop_default_table']}

            set de_member_reg_coupon_method = '{$_POST['de_member_reg_coupon_method']}',

                de_member_reg_coupon_target = '{$_POST['de_member_reg_coupon_target']}',

                de_member_reg_coupon_type = '{$_POST['de_member_reg_coupon_type']}',

                de_member_reg_coupon_trunc = '{$_POST['de_member_reg_coupon_trunc']}',

                de_member_reg_coupon_maximum = '{$_POST['de_member_reg_coupon_maximum']}' ";

sql_query($sql);

?>


4. 마지막으로 회원가입시 쿠폰 발행을 실행하는 구간의 파일을 수정해야합니다.

우선 www/bbs/register_form_update.php 파일에서 아래의 소스코드를 찾아보겠습니다.

<?php

/* www/bbs/register_form_update.php */


// 신규회원 쿠폰발생

if($w == '' && $default['de_member_reg_coupon_use'] && $default['de_member_reg_coupon_term'] > 0 && $default['de_member_reg_coupon_price'] > 0) {

    $j = 0;

    $create_coupon = false;


    do {

        $cp_id = get_coupon_id();


        $sql3 = " select count(*) as cnt from {$g5['g5_shop_coupon_table']} where cp_id = '$cp_id' ";

        $row3 = sql_fetch($sql3);


        if(!$row3['cnt']) {

            $create_coupon = true;

            break;

        } else {

            if($j > 20)

                break;

        }

    } while(1);


    if($create_coupon) {

        $cp_subject = '신규 회원가입 축하 쿠폰';

        $cp_method = 2;

        $cp_target = '';

        $cp_start = G5_TIME_YMD;

        $cp_end = date("Y-m-d", (G5_SERVER_TIME + (86400 * ((int)$default['de_member_reg_coupon_term'] - 1))));

        $cp_type = 0;

        $cp_price = $default['de_member_reg_coupon_price'];

        $cp_trunc = 1;

        $cp_minimum = $default['de_member_reg_coupon_minimum'];

        $cp_maximum = 0;


        $sql = " INSERT INTO {$g5['g5_shop_coupon_table']}

                    ( cp_id, cp_subject, cp_method, cp_target, mb_id, cp_start, cp_end, cp_type, cp_price, cp_trunc, cp_minimum, cp_maximum, cp_datetime )

                VALUES

                    ( '$cp_id', '$cp_subject', '$cp_method', '$cp_target', '$mb_id', '$cp_start', '$cp_end', '$cp_type', '$cp_price', '$cp_trunc', '$cp_minimum', '$cp_maximum', '".G5_TIME_YMDHIS."' ) ";


        $res = sql_query($sql, false);


        if($res)

            set_session('ss_member_reg_coupon', 1);

    }

}

?>


이제 위의 코드를 아래와 같이 수정하도록 합니다.

<?php

/* www/bbs/register_form_update.php */


// 신규회원 쿠폰발생

if($w == '' && $default['de_member_reg_coupon_use'] && $default['de_member_reg_coupon_term'] > 0 && $default['de_member_reg_coupon_price'] > 0) {

    $j = 0;

    $create_coupon = false;


    do {

        $cp_id = get_coupon_id();


        $sql3 = " select count(*) as cnt from {$g5['g5_shop_coupon_table']} where cp_id = '$cp_id' ";

        $row3 = sql_fetch($sql3);


        if(!$row3['cnt']) {

            $create_coupon = true;

            break;

        } else {

            if($j > 20)

                break;

        }

    } while(1);


    if($create_coupon) {

        $cp_subject = '신규 회원가입 축하 쿠폰';

        $cp_method = $default['de_member_reg_coupon_method'];

        $cp_target = $default['de_member_reg_coupon_target'];

        $cp_start = G5_TIME_YMD;

        $cp_end = date("Y-m-d", (G5_SERVER_TIME + (86400 * ((int)$default['de_member_reg_coupon_term'] - 1))));

        $cp_type = $default['de_member_reg_coupon_type'];

        $cp_price = $default['de_member_reg_coupon_price'];

        $cp_trunc = $default['de_member_reg_coupon_trunc'];

        $cp_minimum = $default['de_member_reg_coupon_minimum'];

        $cp_maximum = $default['de_member_reg_coupon_maximum'];


        $sql = " INSERT INTO {$g5['g5_shop_coupon_table']}

                    ( cp_id, cp_subject, cp_method, cp_target, mb_id, cp_start, cp_end, cp_type, cp_price, cp_trunc, cp_minimum, cp_maximum, cp_datetime )

                VALUES

                    ( '$cp_id', '$cp_subject', '$cp_method', '$cp_target', '$mb_id', '$cp_start', '$cp_end', '$cp_type', '$cp_price', '$cp_trunc', '$cp_minimum', '$cp_maximum', '".G5_TIME_YMDHIS."' ) ";


        $res = sql_query($sql, false);


        if($res)

            set_session('ss_member_reg_coupon', 1);

    }

}

?>


위 1번 부터 4번까지 해당 파일의 소스를 잘 수정했다면 정상으로 회원가입시 쿠폰이 발행될 것입니다.

그럼 신규회원 쿠폰발행 커스텀을 마치도록 하겠습니다.

댓글목록

등록된 댓글이 없습니다.

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