프로그램 개발서

[영카트] 상품 옵션을 표 형태로 보여주기 본문

Web

[영카트] 상품 옵션을 표 형태로 보여주기

rairen 2019. 5. 14. 15:19

지난번에 작성한 추가옵션을 표로 보여주는 방법에 대한 글과 거의 동일하다.

다만 이 게시글의 코드는 조금 미완성이다.

이유는 내용을 설명하면서 작성하니 보면서 확인할면 되곘다.

 

// 기본 옵션 또는 추가옵션 목록명
$item_subject_query = "SELECT `it_option_subject`,`it_supply_subject` FROM `{$g5['g5_shop_item_table']}` WHERE `it_id` = '{$it_id}'";
$item_subject_data = sql_fetch($item_subject_query);// Array ( [it_option_subject] => 제품모델,재질,날경 [it_supply_subject] => )
$option_subject = explode(",", $item_subject_data['it_option_subject']);
$supply_subject = explode(",", $item_subject_data['it_supply_subject']);// Array ( [0] => 제품모델 [1] => 재질 [2] => 날경 )

우선 위의 코드부터 보자.

위의 코드는 디비에서 상품 테이블의 옵션 제목이 저장된 컬럼의 정보를 가져오고, 가져온 데이터를 배열 형태로 변환하는 코드이다.

it_option_subject가 기본 옵션이고, it_supply_subject가 추가 옵션이다.

<tr>
<?php
for ($i=0;$i < count($option_subject); $i++){
echo '<th>'.$option_subject[$i].'</th>';
}
?>
<th>판매가</th>
<th>포장단위</th>
<th>수량</th>
<th>장바구니</th>
</tr>

위의 코드로 표에 제목줄을 표시하였다.

그리고 그 다음 내용을 표에 그리려고 할 때 문제가 발생하는데.

추가옵션과 달리 기본 옵션의 경우 값이 중복되어 들어가지 않다보니 결과를 맞추려고할 때 개수가 맞지 않게 될 사항이 발생한다.

지금 작성할 콛의 경우 빈칸을 전칸의 내용으로 채우는 식으로 하였으나, 관리자에서 상품 옵션을 작성할 때의 내용으로 인해 문제가 될 소지가 있는 코드이므로 사용에 주의해야한다.

$option_query = "SELECT * FROM `{$g5['g5_shop_item_option_table']}` WHERE io_type = '0' AND it_id = '{$it_id}' AND io_use = '1' order by io_no asc ";
$option_result = sql_query($option_query);

우선 상품 옵션들을 가져온다.

for ($i=0;$row = sql_fetch_array($option_result); $i++){
$opt_id = explode(chr(30), $row['io_id']);
for($k=0; $k<count($option_subject); $k++) {
if(!is_array($option_list[$k]))
$option_list[$k] = array();

if($opt_id[$k] && !in_array($opt_id[$k], $option_list[$k]))
$option_list[$k][] = $opt_id[$k];
}
}

그리고 옵션들이 컬럼 한개에 합쳐져있기에 문리하여 배열형태로 구분한다.

배열의 개수로 최대길이를 구할 떄는 아래 코드를 이용한다.


$max = 0;
for ($j=0;$j < count($option_subject); $j++){
if($max < count($option_list[$j])){
$max = count($option_list[$j]);
}
}

이제 빈칸을 채워야한다.

채우지 않는다면 표에 빈칸에 마주갖ㅂ이로 생기게 된다.

// 빈칸 채우기
$option_fulling = array();
for ($i=0;$i<count($option_list);$i++){
for($j=0;$j<$max;$j++){
if(isset($option_list[$i][$j]) and !empty($option_list[$i][$j])) {
${"opt" . $i} = $option_list[$i][$j];
}
$option_fulling[$i][$j] = ${"opt" . $i};
}
}

반복 돌리면서 빈칸을 전 값으로 채우는 반복분이다.

반복문을 돌린 후

for ($i=0;$i<$max;$i++){
echo '<tr>';
$subject_value = "";
for ($j=0;$j < count($option_subject); $j++){
echo '<td>' . $option_fulling[ $j ][ $i ] . '<input type="hidden" name="option['.$i.'][]" id="option_'.$i.'_'.$j.'" value="'.$opt_id[1].'"/></td>';
}
echo '<td>'.display_price(get_price($it)).'<input type="hidden" name="option['.$i.'][]" id="option_'.$i.'_price" value="'.get_price($it).'"/></td>';
echo '<td>1EA</td>
<td>
<div class="input-group ct_opt_grp">
<label for="ct_opt_1" class="sr-only">수량</label>
<input type="text" name="option_qty['.$i.'>]" id="option_qty_'.$i.'" class="form-control input-sm num_val" value="0" size="3">
<div class="input-group-btn">
<button type="button" class="btn btn-lightgray btn-sm option_plus" data-index="'.$i.'"><i class="fa fa-plus-circle fa-lg"></i><span class="sound_only">증가</span></button>
<button type="button" class="btn btn-lightgray btn-sm option_minus" data-index="'.$i.'"><i class="fa fa-minus-circle fa-lg"></i><span class="sound_only">감소</span></button>
</div>
</div>
</td>
<td>
<button type="button" class="btn btn-xs btn-black">담기</button>
</td>';
echo '</tr>';
}

위 의 소스코드를 작성하면 표가 완성된다.

나머지는 스스로 해보자.

반응형