반응형

 

 

이전 시간에는 옵션을 선택하면 옵션의 이미지를 보여주었었는데 이번에는 옵션을 보여줄때 아예 이미지를 뿌려주도록 바꿔보자.

 

/admin/product/product_view.php

<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";
if(!$_SESSION['AUID']){
    echo "<script>alert('권한이 없습니다.');history.back();</script>";
    exit;
}

$pid = $_GET['pid'];

$query="select * from products where pid=".$pid;
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
$rs = $result->fetch_object();


$query2="select * from product_options where pid=".$pid;
$result2 = $mysqli->query($query2) or die("query error => ".$mysqli->error);
while($rs2 = $result2->fetch_object()){
    $options[]=$rs2;
}

?>
<style>
    .col{
        border: 1px solid #f1f1f1;
    }

    [type=radio] {
        position: absolute;
        opacity: 0;
        width: 0;
        height: 0;
    }

    [type=radio] + span {
        cursor: pointer;
    }
    [type=radio]:checked + span {
        outline: 5px solid indigo;
    }
</style>
<link
  rel="stylesheet"
/>

<div class="container">
  <div class="row">
    <div class="col" style="text-align:center;">
      <img id="pimg" src="<?php echo $rs->thumbnail;?>" style="max-width:200px;">
    </div>
    <div class="col">
      <h3><?php echo $rs->name;?></h3>
        <div>
            가격 : <span id="price"><?php echo number_format($rs->price);?></span>
        </div>
        <?php if($options){?>
        <br>
        <div>
            옵션 :
            <select name="poption" id="poption">
                <option value="">선택하세요</option>
                <?php foreach($options as $op){?>
                    <option value="<?php echo $op->poid;?>"><?php echo $op->option_name;?></option>
                <?php }?>
            </select>
        </div>
        <br>
        <div>

            <?php foreach($options as $op){?>
                <input type="radio" name="poption" class="optradio" id="poption_<?php echo $op->poid;?>" value="<?php echo $op->poid;?>">
                    <span  onclick="jQuery('#poption_<?php echo $op->poid;?>').click();" style="content:url(<?php echo $op->image_url;?>);height:100px;width:100px;"></span>
                </input>
            <?php }?>
           
        </div>
        <?php }?>
    </div>
  </div>
 
</div>



<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script>
    $("input[name='poption']:radio").change(function () {
        var poid = $('input:radio[name="poption"]:checked').val();
        var data = {
            poid : poid
        };
            $.ajax({
                async : false ,
                type : 'post' ,
                url : 'option_change.php' ,
                data  : data ,
                dataType : 'json' ,
                error : function() {} ,
                success : function(data) {
                    var price=parseInt(data.option_price)+<?php echo $rs->price;?>;
                    $("#pimg").attr("src", data.image_url);
                    $("#price").text(number_format(price));
                }
        });
    });

    function number_format(num){
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g,',');
    }


    $("#poption").change(function(){
        var poid = $("#poption option:selected").val();
       
        var data = {
            poid : poid
        };
            $.ajax({
                async : false ,
                type : 'post' ,
                url : 'option_change.php' ,
                data  : data ,
                dataType : 'json' ,
                error : function() {} ,
                success : function(data) {
                    var price=parseInt(data.option_price)+<?php echo $rs->price;?>;
                    $("#pimg").attr("src", data.image_url);
                    $("#price").text(number_format(price));
                }
        });
    });
</script>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>

지난번에 했던 select박스도 그대로 두었다. 옵션 이미지를 클릭하면 역시 가운데 이미지가 바뀐다. select박스도 반응시키기 위해 그부분 소스도 json으로 바꾸고 ajax파일도 수정했다

 

ajax처리 파일을 확인해보자

 

/admin/product/option_change.php

<?php session_start();
include $_SERVER["DOCUMENT_ROOT"]."/inc/dbcon.php";
ini_set( 'display_errors', '0' );

$poid = $_POST['poid'];

$query="select * from product_options where poid='".$poid."'";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
$rs = $result->fetch_object();
$image_url = $rs->image_url;
$option_price = $rs->option_price;

$data = array("image_url"=>$image_url,"option_price"=>$option_price);
echo json_encode($data);

?>

이렇게 json으로 리턴하도록 수정했다. 이미지 경로와 가격을 리턴해주도록 수정했다.

 

뷰 파일에서는 그 값을 받아서 이미지도 보여주고 기존의 가격에 플러스해서 가격도 바뀌도록 했다.

 

이부분은 가격이 다른 옵션에서 한번더 다룰 예정이다.

 

반응형

+ Recent posts