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

본문 바로가기

정보공유

일반글
영카트팁

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

페이지 정보

게시물QR코드

본문

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


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

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



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

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


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


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번입니다. 이렇게 "신규회원 쿠폰 설정" 탭과 메뉴가 잘 나타난다면 정상으로 적용된 것 입니다.

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


 


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.부산광역시 부산진구 중앙대로 666번길 50, 더샵센트럴스타 CEO. 이경애 Email. gnuwiz@naver.com
  • BR. 625-68-00172 TRC. 2019-부산해운대-1186 TEL. 0507-1382-2790
Copyright © 2017 ~ 그누위즈. All rights reserved.