테스트 사이트 - 개발 중인 베타 버전입니다

장바구니를 이용한 견적서 출력기능 만들기 (2023-01-27 13:37 수정)

· 2년 전 · 2039 · 3

[주] 이후 강좌수정내용의 업데이트가 안될수 있습니다.

본 강좌의 최신업데이트는 https://www.happyjung.com/lecture/3188 에서 확인가능합니다.

가급적 동일한 내용을 유지하려고 노력하지만, 우선 작업은 위 링크입니다.

 

 

https://sir.kr/yc5_tip/829 내용을 최신 php 와 mysql 에 맞도록 수정하였습니다

 




프로그램 설명 
  1) 견적상품은 장바구니에 담긴 상품을 사용합니다. 
      (1) 선택옵션을 1개(1단계)만 사용합니다. 선택옵션이 2단 이상일 경우 오작동 할 수 있음. 
      (2) 추가옵션은 사용하지 않습니다. 추가옵션이 있는 경우 오작동 할 수 있음. 
  2) 장바구니(cart.php)에 견적서출력 버튼을 생성(주문하기 버튼 옆) 
  3) 버튼 클릭으로 자바스크립트 함수를 실행 
      (1) ajax방식으로 상품정보를 세션에 저장 
      (2) 팝업으로 견적서인쇄 페이지를 띄움 
  4) 견적서인쇄 페이지에서 세션값을 검사하여 상품정보DB 조회후 화면에 표시함 
  *) 견적자료는 DB에 저장하거나 별도로 전송하지 않습니다.


영카트5
  ├ shop
  │    ├ eyoom_admin (이윰빌더)
  │    │       └ core
  │    │             └ shop
  │    │                    ├ configform.php  ( Edit )
  │    │                    └ configformupdate.php  ( Edit )
  │    ├ ajax.cartprint.php  ( New )
  │    ├ cart.php  ( Edit )
  │    └ cartprint.php  ( New )
  └ theme
         └ eyoom_basic (이윰빌더)
                └ skin
                     └ shop
                           └ basic
                                 └ cart.skin.html.php  ( Edit )


1. 디비 컬럼 추가
g5_shop_default 테이블에 2개 컬럼을 추가합니다
사업자등록증의 업태와 종목 컬럼이며, 견적서 출력서 상단 정보로 사용됩니다
업태  de_admin_company_saupja_type1    varcha(50)
종목  de_admin_company_saupja_type2   varcha(50)

phpMyAdmin 의 쿼리창에서 아래에 정보를 넣고 등록합니다
UPDATE `g5_shop_default` SET de_admin_company_saupja_type1 = '업태내용', de_admin_company_saupja_type2 = '종목내용'



2. adm / shop_admin / configform.php
영카트 환경설정 페이지에 적당하게 업태와 종목을 제어하는 내용을 추가하세요



3. adm / shop_admin / configformupdate.php
업태와 종목을 저장하는 쿼리를 추가하세요



4. shop / ajax.cartprint.php  생성해서 아래 내용 저장
<?php
include_once('./_common.php');

if(empty($_POST)) {
    die('정보가 넘어오지 않았습니다.');
}

$dt_data = serialize($_POST);
set_session("cartprint", $dt_data);

die('');



5. shop / cartprint.php  생성해서 아래 내용 저장
<?php
include_once('./_common.php');
include_once(G5_PATH.'/head.sub.php');

//print_r($_GET); echo "<br>1<br><br>";
//print_r($_POST); echo "<br>2<br><br>";

// 세션데이터에서 장바구니 전송값을 가져온다. ---------------------------------------------------
// [cart.php -> ajax.cartprint.php 세션저장한 값]
$tmp_data = get_session("cartprint");
if($tmp_data) {
    $array = unserialize($tmp_data);
}
//print_r($array); echo "<br>3<br><br>";

// 장바구니 데이터 검사 --------------------------------------------------------------------------
if(is_array($array) && is_array($array['it_id']) && is_array($array['ct_chk'])) {
    // 장바구니 전송됨
} else {
    // 장바구니 전송안됨
    echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
    include_once(G5_PATH.'/tail.sub.php');
    exit;
}


// 장바구니 no 가공 ---------------------------------------------------------------------------
/* 장바구니 상품번호와 체크여부(ct_chk)를 비교하여 견적할 제품번호만 남긴다. */
foreach($array['it_id'] as $key=>$val) {
    if(isset($array['ct_chk'][$key]) && $array['ct_chk'][$key]=="1") {
        $TMP['it'][] = $val;
    } else {
        continue;
    }
}

//print_r($TMP['it']); echo "<br>4<br><br>";

if(is_array($TMP['it']) && is_array($TMP['it'])) {
    // 견적할 제품이 있음
} else {
    // 견적할 제품이 없음
    echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
    include_once(G5_PATH.'/tail.sub.php');
    exit;
}


// 장바구니 DB 가져오기 ---------------------------------------------------------------------------
$s_cart_id = get_session('ss_cart_id');

// $s_cart_id 로 현재 장바구니 자료 쿼리
$qry = " SELECT * FROM `{$g5['g5_shop_cart_table']}` WHERE od_id = '{$s_cart_id}' AND it_id IN ( '". implode("','", $TMP['it']) ."' ) ORDER BY it_id ";
//print_r($qry); echo "<br>5<br><br>";

$res = sql_query($qry);
if(sql_num_rows($res)>0) {
    $idx = 0;
    while($row = sql_fetch_array($res)) {
        $DATA['cart'][$idx] = $row;

        // 옵션DB 가져오기
        $qry2 = " SELECT * FROM `{$g5['g5_shop_item_option_table']}` WHERE it_id = '{$row['it_id']}' AND io_id='{$row['io_id']}' AND io_type='0' ";
        //print_r($qry2); echo "<br>6<br><br>";
        $res2 = sql_query($qry2);
        if(sql_num_rows($res2)>0) {
            $DATA['opt'][$idx] = sql_fetch_array($res2);
        }

        $idx++;
    }
}

//print_r($DATA); echo "<br>7<br><br>";


// 출력화면 그리기      ---------------------------------------------------------------------------
?>
<style type="text/css">
.print-wrap { width:650px; box-sizing:border-box; margin:5px auto; }
/* 표제부 */
.table-info { border-collapse:collapse; width:100%; }
.table-info * { font-size: 12px;font-family: "돋움", "돋움체", "Tahoma", "Verdana", "Arial"; }
.table-info td { border:1px solid #09a4b6; height:20px; padding:0 5px; }
.table-info .td-row-6 { background:#06899f; color:#ffffff; text-align:center; }
.table-info .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
/* 제품리스트 */
.table-list { border-collapse:collapse; width:100%; margin:20px 0 0 0; }
.table-list * { font-size:12px; font-family:"돋움", "돋움체", "Tahoma", "Verdana", "Arial"; }
.table-list td { border:1px solid #09a4b6; height:20px; padding:5px; }
.table-list .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
.table-list .td-body { font-size:11px !important; }
/* 공통 */
.input-1 { width:174px; border:1px solid #33884E; }
.td-right { text-align:right; }
.td-center { text-align:center; }
/* 기타 */
.div-help { margin:10px 0; color:#2861c8; }
.print-button { width:600px; margin:10px auto; text-align:right; }
.print-button button { padding:4px 10px; background:#2548a5; color:#ffffff; border:0; }
@media print {
    .print-button { display:none; }
}
</style>

<div class="print-wrap">
    <table class="table-info">
        <col width="20">
        <col width="60">
        <col>
        <col width="20">
        <col width="60">
        <col width="120">
        <col width="60">
        <col width="120">
        <tr>
            <td class="td-row-6" rowspan="6">의<br>뢰<br>자</td>
            <td class="td-head">견적일</td>
            <td class="td-body"><input type="text" class="input-1" value="<?php echo date("Y-m-d"); ?>"></td>
            <td class="td-row-6" rowspan="6">공<br>급<br>자</td>
            <td class="td-head">등록번호</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_saupja_no']; ?></td>
        </tr>
        <tr>
            <td class="td-head">업체명</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">회사명</td>
            <td class="td-body"><?php echo $default['de_admin_company_name']; ?></td>
            <td class="td-head">성명</td>
            <td class="td-body"><?php echo $default['de_admin_company_owner']; ?></td>
        </tr>
        <tr>
            <td class="td-head">담당자</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">주소</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_addr']; ?></td>
        </tr>
        <tr>
            <td class="td-head">전화</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">업태</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_saupja_type1']; ?></td>
        </tr>
        <tr>
            <td class="td-head">팩스</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">종목</td>
            <td class="td-body" colspan="3"><?php echo $default['de_admin_company_saupja_type2']; ?></td>
        </tr>
        <tr>
            <td class="td-head">E-mail</td>
            <td class="td-body"><input type="text" class="input-1"></td>
            <td class="td-head">전화</td>
            <td class="td-body"><?php echo $default['de_admin_company_tel']; ?></td>
            <td class="td-head">팩스</td>
            <td class="td-body"><?php echo $default['de_admin_company_fax']; ?></td>
        </tr>
    </table>

    <table class="table-list">
        <col width="80">
        <col width="">
        <col width="130">
        <col width="60">
        <col width="40">
        <col width="70">
        <tr>
            <td class="td-head">제품번호</td>
            <td class="td-head">제품명</td>
            <td class="td-head">제품사양</td>
            <td class="td-head">단가</td>
            <td class="td-head">수량</td>
            <td class="td-head">가격</td>
        </tr>

        <?php
        $total_price = 0;
        $this_price = 0;
        foreach($DATA['cart'] as $key=>$val) {
            if ($val['io_type'] == '1') {
                $this_price = ($val['io_price']) * $val['ct_qty'];
                $price = $val['io_price'];
            } else {
                $this_price = ($val['ct_price']+$val['io_price']) * $val['ct_qty'];
                $price = $val['ct_price']+$val['io_price'];
            }
            $total_price += $this_price;
        ?>
        <tr>
            <td class="td-body"><?php echo $val['it_id']; ?></td>
            <td class="td-body"><?php echo $val['it_name']; ?></td>
            <td class="td-body"><?php echo $val['io_id']; ?></td>
            <td class="td-body td-right"><?php echo number_format($price); ?></td>
            <td class="td-body td-center"><?php echo number_format($val['ct_qty']); ?></td>
            <td class="td-body td-right"><?php echo number_format($this_price); ?></td>
        </tr>
        <?php
        } // end foreach;
        ?>

        <tr>
            <td class="td-body td-center" colspan="5"><strong>합계금액</strong></td>
            <td class="td-body td-right"><strong><?php echo number_format($total_price); ?></strong></td>
        </tr>
    </table>

    <div class="div-help">
        상기 견적내용은 환율에 따라 가격이 변동될 수 있으니 참고용으로만 활용하시기 바랍니다.<br>
        (견적내용 및 입력사항은 서버로 전송되지 않습니다)<br>
        자세한 견적상담을 원하시면 <?php echo $default['de_admin_company_tel']; ?>로 전화바랍니다.
    </div>

</div>

<div class="print-button">
    <button type="button" onClick="print();">인쇄</button>
    <button type="button" onClick="window.close();">닫기</button>
</div>

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



6-1. shop / cart.php  수정
<?php
include_once('./_tail.php');

위에 아래 내용 추가

<script>
// 장바구니 상품을 견적서로 출력한다. [라보텍, 2017-05-10]
function form_print() {
    //console.log("print click");
    var f = document.frmcartlist;
    var objWin = null;
    var cart_data = $(f).serialize();

    if($("input[name^=ct_chk]:checked").size() < 1) {
        alert("견적서를 출력하실 상품을 하나이상 선택해 주십시오.");
        return false;
    }

    $.ajax({
        type: "POST",
        data: cart_data,
        url: "<?php echo G5_SHOP_URL; ?>/ajax.cartprint.php",
        cache: false,
        async: false,
        success: function(data) {
            save_result = data; // ajax 결과처리는 대충넘어갑니다.
        }
    });

    objWin = window.open("<?php echo G5_SHOP_URL; ?>/cartprint.php", "WinItemPrint", "width=670,height=750,scrollbars=yes");
    if(objWin) {
        return;
    } else {
        alert("견적서 페이지를 실행하지 못하였습니다.");
        return;
    }
}
</script>



6-2. shop / cart.php  수정
        <button type="button" onclick="return form_check('buy');" class="btn_submit">주문하기</button>

아래에 내용 추가

        <button type="button" onclick="return form_print();" class="btn_submit" style="background:#1596db;">견적서출력</button>




이윰빌더

1. adm / eyoom_admin / core / shop / configform.php
영카트 환경설정 페이지에 적당하게 업태와 종목을 제어하는 내용을 추가하세요



2. adm / eyoom_admin / core / shop / onfigformupdate.php
업태와 종목을 저장하는 쿼리를 추가하세요



3-1. theme / eyoom_basic / skin / shop / basic / cart.skin.html.php 수정
아래 내용을 페이지 끝에 추가

<script>
// 장바구니 상품을 견적서로 출력한다. [라보텍, 2017-05-10]
function form_print() {
    //console.log("print click");
    var f = document.frmcartlist;
    var objWin = null;
    var cart_data = $(f).serialize();

    if($("input[name^=ct_chk]:checked").size() < 1) {
        alert("견적서를 출력하실 상품을 하나이상 선택해 주십시오.");
        return false;
    }

    $.ajax({
        type: "POST",
        data: cart_data,
        url: "<?php echo G5_SHOP_URL; ?>/ajax.cartprint.php",
        cache: false,
        async: false,
        success: function(data) {
            save_result = data; // ajax 결과처리는 대충넘어갑니다.
        }
    });

    objWin = window.open("<?php echo G5_SHOP_URL; ?>/cartprint.php", "WinItemPrint", "width=670,height=750,scrollbars=yes");
    if(objWin) {
        return;
    } else {
        alert("견적서 페이지를 실행하지 못하였습니다.");
        return;
    }
}
</script>



3-2. theme / eyoom_basic / skin / shop / basic / cart.skin.html.php 수정
        <button type="button" onclick="return form_check('buy');" class="btn-e btn-e-xxlg btn-e-red"><i class="fas fa-credit-card" aria-hidden="true"></i> 주문하기</button>
        
아래에 내용 추가

        <button type="button" onclick="return form_print();" class="btn-e btn-e-xxlg btn-e-red" style="background:#1596db;">견적서출력</button>

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 3개

꿀팁 감사합니다
감사합니다.
와.. 대단하십니다.

게시글 목록

번호 제목
2503
2501
2497
2495
2491
2490
2489
2486
2484
2483
2481
2476
2475
2474
2472
2469
2467
2466
2465
2464
2463
2460
2459
2456
2449
2446
2441
2420
2419
2417