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

[스킨제작팁] 셀렉트,체크박스 코딩양 줄이기

· 14년 전 · 5934 · 12
스킨 제작을 하다보면 셀렉트와 체크박스 코딩할 일이 많습니다.
유지 보수가 간편하고 Ctrl+c Ctrl+v에 조금 더 최적화(;;) 된 팁입니다.
양이 적은 경우 아래 일반적인 방법으로 해도 큰 무리가 없습니다만,
항목이 늘어나고 변동요지가 많을 경우 좀 귀찮습니다.

1. 일반적인 방법(write.skin.php)
1) 셀렉트
<select name='wr_1' itemname="년" class="select02">
<option value='2008' <? if($write[wr_1] == 2008) echo " selected "; ?>>2008
<option value='2007' <? if($write[wr_1] == 2007) echo " selected "; ?>>2007
</select>
2) 체크박스
<td>
<input type="checkbox" class="20box" name="wr_1" value="가" <? if ($write[wr_1] == '가') echo "checked";?>> 가
<input type="checkbox" class="20box" name="wr_1" value="나" <? if ($write[wr_1] == '나') echo "checked";?>> 나
</td>


2. 간단한 함수를 생성해서 최적화(?)
함수1.
function select_option_go($_array, $selectValue='') {
foreach($_array as $value) {
$result .= "<option value='$value' ";
if($value == $selectValue) $result .= " selected";
$result .= ">$value</option>\n";
}
return $result;
}
함수2.
function input_checkbox_go($name, $_array, $opt = '', $ch_br = '') {
foreach ($_array as $key => $value) {
echo "<input name='{$name}[]' type='checkbox' value='{$value}'";
if(is_array($opt) && in_array($value,$opt)) echo ' checked';
echo ">{$value} \n";
if($ch_br) echo "<br>\n";
}
}
함수3. view.skin.php에서 사용할 녀석
function print_checkbox_go($name, $_array, $opt, $ch_br = '') {
global $board_skin_path;
foreach ($_array as $key => $value) {
if(is_array($opt) && in_array($value,$opt)) echo "<img src='{$board_skin_path}/img/box_check01.gif'> <span class='red'>$value</span> \n";
else echo "<img src='{$board_skin_path}/img/box_check02.gif'> $value \n";
if($ch_br) echo "<br>\n";
}
}
항목셋팅 예
// 년
for($i=date('Y'); $i >= 1950; $i--) $setValue['연식'][] = $i;
// 연료
$setValue['연료'][] = '가솔린';
$setValue['연료'][] = '디젤';
$setValue['연료'][] = 'LPG';
$setValue['연료'][] = '가솔린/LPG겸용';
$setValue['연료'][] = '가솔린/CNG겸용';
$setValue['연료'][] = '하이브리드';
// 편의장치1
$setValue['편의장치1'][] = '썬루프';
$setValue['편의장치1'][] = '파노라마썬루프';
$setValue['편의장치1'][] = 'HID/제논램프';
$setValue['편의장치1'][] = '오토라이트';
$setValue['편의장치1'][] = '스마트키/키레스고';
$setValue['편의장치1'][] = '엔진스타트버튼';
$setValue['편의장치1'][] = '라이트세척장치';
$setValue['편의장치1'][] = '자동주차시스템';
$setValue['편의장치1'][] = '전자주차브레이크';

사용방법(write.skin.php)
1) 셀렉트
<select name='wr_1' style='width:60px;'>
<option value=''>::년::</option>
<?=select_option_go($setValue['연식'],$write['wr_1'])?>
</select> 년 

<select name='wr_2'>
<option value=''>::선택하세요::</option>
<?=select_option_go($setValue['연료'],$write['wr_2'])?>
</select>
2) 체크박스
<?=input_checkbox_go('wr_3',$setValue['편의장치1'],$write['wr_3'], '<br>')?>
or
<?=input_checkbox_go('wr_3',$setValue['편의장치1'],$write['wr_3'])?>


실제 사용예시

화면

해당 소스 코딩(write.skin.php)
변수셋팅화면 일부

write_update.head.php 에서 후처리 일부
write_update.skin.php 모습
view화면
해당 코딩 view.skin.php


가장 큰 이점 중 하나가 view단에서 재빠른 처리가 가능하다고나 할까요.;
예시 화면은 실제 적용시 몇 가지 부분들이 추가된 장면입니다만, 기본은 거의 같습니다.

댓글 작성

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

로그인하기

댓글 12개

14년 전
뭐.. 좋은방법이긴 하지만. jquery로 checkbox 제어가 더 좋죠 :)
제가 js사용을 잘 안하는 편이라서 그런 것도 있습니다만,
사실 위 팁에서 말하고자 하는 중점 내용은

// 편의장치1
$setValue['편의장치1'][] = '썬루프';
$setValue['편의장치1'][] = '파노라마썬루프';
처럼 배열로 항목을 저장해서 루프문을 이용하자이지요.;
js에서도 응용이 가능한 부분이구요.
이렇게 한다음 jquery로 제어해도 되겠지요..

아니면 체크박스를 통째로 jquery로 만든다는 말씀인가요?
저렇게 많은 항목을 코딩할때 jquery던 js건
이 팁의 목적은 코딩 자체의 편리함을 주는 방법이 아닐런지..

실제로 체크박스 옵션수십개씩 다루고 가공을 많이 해야 하는 스크린샷과 같은 경우를
직접 코딩해보지 않으셨으면 아마 이해가 잘 안가실수도 있겠습니다.

완전 노가다거든요;;

좋은팁 감사합니다. 앞으로 자주 쓸것 같네요
좋은 팁 입니다.
옵션 선택했을때 옵션가격이 자동으로 더해지려면 어떻게 해야 하나요?
아니 이런 베리나인골드가~~ 추천합니다. ^^
화면만 봐도.. 급추천 입니다. 감사합니다.
음.. 다중 체크 부분이나 그런부분은 확실히
배열로 뽑아오는게 손 덜가고 좋을거 같습니다.
추천
13년 전
셀렉트, 체크박스
[스킨제작팁] 셀렉트,체크박스 코딩양 줄이기
//write.skin.php의 내용

<?
$setValue['편의장치1'][] = '썬루프';
$setValue['편의장치1'][] = '파노라마썬루프';
$setValue['편의장치1'][] = 'HID/제논램프';
$setValue['편의장치1'][] = '오토라이트';
$setValue['편의장치1'][] = '스마트키/키레스고';
$setValue['편의장치1'][] = '엔진스타트버튼';
$setValue['편의장치1'][] = '라이트세척장치';
$setValue['편의장치1'][] = '자동주차시스템';
$setValue['편의장치1'][] = '전자주차브레이크';
?>


<?=input_checkbox_go('wr_16',$setValue['편의장치1'],$write['wr_16'])?>


//write.update.skin.php의 내용

$wr_16 = implode("|" ,$편의장치); //1번
$wr_16 = implode("|" ,$wr_16); //2번



$sql_common = '';
for ($i = 11 ; $i <=24 ; $i ++ ) {
$tmp = "wr_$i" ;
$sql_common .= "$tmp = '{$$tmp}',";
}
$sql_common .= "wr_30 = '{$wr_30}'";

sql_query(" update $write_table set {$sql_common} where wr_id = '$wr_id' ");


1번 2번 다 DB에 아무 값도 들어 가지 않습니다.

어디가 잘못 된건지요??

게시글 목록

번호 제목
34706
34693
34563
34536
34521
34480
34479
34466
34437
34436
34435
34406
34398
34387
34382
34375
34364
34336
34294
34293