CMS/그누보드

그누보드 폼 게시판 만들기 + 메인 폼과 연동

 

- 게시판 스킨 구조 

   - list.skin.php : 게시판 접속 시 목록 스킨

   - view.skin.php : 상세 글 스킨

   - write.skin.php :  글쓰기 스킨

   - write_update.skin : 새 글 올라가기 전 들르는 곳 (안내 팝업 삽입 등) 

 

- 폼 게시판과 메인 폼이 연동

  ->  write.skin.php, view.skin.php,메인폼 3개에 똑같은 필드값이 다 들어가야함 

 


 

1. 게시판 세팅 - 분류(category) 만들기 

- 게시판 기본 설정 - 분류 - select option 값 넣어주기 

 

 

2. 게시판 세팅 - write.skin.php, view.skin.php 세팅 

- 여분 필드 이용해서 변수 만들기 

   - 여분 필드 : wr_1 ~ wr_10 ;  10개 / 게시판 설정 여분필드 : bo_1 ~ bo_10 ;  10개

   - 총 20개, DB수정하면 100개 이상도 가능 (아마?)

- label for / input id, name, value 변수 통일   

    - value 값이 view페이지에 출력됨 / name 값이 데이터로 연동됨 ( DB테이블 필드 이름)

    - name에 변수를 넣어야 value 값으로 변수가 담겨 넘어감 

<label for="wr_1" class="sound_only">생년월일<strong>필수</strong></label>
<input type="text" name="wr_1" value="<?php echo $wr_1?>" id="wr_1" required class="frm_input required" placeholder="생년월일">

<label for="wr_2" class="sound_only">핸드폰번호<strong>필수</strong></label>
<input type="text" name="wr_2" value="<?php echo $wr_2 ?>" id="wr_2" required class="frm_input required" placeholder="핸드폰번호">  

    

 *radio 소스 

  -name 값이 다 같으므로 라디오마다 저마다 value값 삽입해줘야 함

<input type="radio" name="wr_3" value="여성" <?php echo get_checked($write['wr_3'], '여성'); ?>>
<label for="wr_3" class="">여성</label>
<input type="radio" name="wr_3" value="남성" <?php echo get_checked($write['wr_3'], '남성'); ?>>
<label for="wr_3" class="">남성</label>
<div class="consult_feild">
	<span><label for="f1"><input type="radio" id="f1" value="일반세무조사" name="wr_8" <?php echo ($write['wr_8']== '일반세무조사')?>><span class="radio_mark"></span>일반세무조사</label></span>
	<span><label for="f2"><input type="radio" id="f2" value="증여/상속 탈루 탈세" name="wr_8" <?php echo ($write['wr_8']== '증여/상속 탈루 탈세') ?>><span class="radio_mark"></span>증여/상속 탈루 탈세</label></span>
	<span><label for="f3"><input type="radio" id="f3" value="비정기세무조사" name="wr_8" <?php echo ($write['wr_8']== '비정기세무조사') ?>><span class="radio_mark"></span>비정기세무조사</label></span>
	<span><label for="f4"><input type="radio" id="f4" value="조세범칙" name="wr_8" <?php echo ($write['wr_8']== '조세범칙') ?>><span class="radio_mark"></span>조세범칙</label></span>
	<span><label for="f5"><input type="radio" id="f5" value="정기 세무조사" name="wr_8" <?php echo ($write['wr_8']== '정기 세무조사') ?>><span class="radio_mark"></span>정기 세무조사</label></span>
	<span><label for="f6"><input type="radio" id="f6" value="조세불복" name="wr_8" <?php echo ($write['wr_8']== '조세불복') ?>><span class="radio_mark"></span>조세불복</label></span>
</div>

 

*select 소스 

- category를 select로 처리

<select name ="ca_name" required value=="<?=$ca_name?>">
	<option value="의료실비보험01" <? if($ca_name =="의료실비보험01") echo "selected";?>>의료실비보험01</option>
	<option value="의료실비보험02" <? if($ca_name =="의료실비보험02") echo "selected";?>>의료실비보험02</option>
	<option value="의료실비보험03" <? if($ca_name =="의료실비보험03") echo "selected";?>>의료실비보험03</option>
</select>

- 여분필드 이용

<div class="bo_w_ico write_div">
        <select name ="wr_4" required id="wr_4" value="wr_4">
            <option value="거주지역">거주지역</option>
            <option value="서울" <?php echo ($write['wr_4'] == "서울") ? " selected" : "";?>>서울</option>
            <option value="경기" <?php echo ($write['wr_4'] == "경기") ? " selected" : "";?>>경기</option>
            <option value="강원" <?php echo ($write['wr_4'] == "강원") ? " selected" : "";?>>강원</option>
        </select>
    </div>

 

 

*checkbox 소스 (배열로 처리)

  --> 예제 : write.skin.php에서 체크박스 선택 시 view.skin.php에서 색상과 함께 출력

  --> 참고 : gnustudy.com/bbs/board.php?bo_table=skin_board&wr_id=177

1) wirte.skin.php 세팅 : 여분필드에 array 담기

- value, in_array 안에 태그 삽입 (색상은 class로) 

   <dl>
        <dt>기본 색상</dt>
        <dd>
            <label>
                <input type="checkbox" value="<li class='circle red'></li>"<?php echo in_array("<li class='circle red'></li>", $check1) ? ' checked="checked"' : '' ?> name="check1[]">
                <span class="checkmark"></span>RED
            </label>
            <label>
                <input type="checkbox" value="<li class='circle blue'></li>"<?php echo in_array("<li class='circle blue'></li>", $check1) ? ' checked="checked"' : '' ?> name="check1[]" >
                <span class="checkmark"></span>BLUE
            </label>
            <label>
                <input type="checkbox" value="<li class='circle black'></li>"<?php echo in_array("<li class='circle black'></li>", $check1) ? ' checked="checked"' : '' ?> name="check1[]"  >
                <span class="checkmark"></span>BLACK
            </label>
            <label>
                <input type="checkbox" value="<li class='circle yellow'></li>"<?php echo in_array("<li class='circle yellow'></li>", $check1) ? ' checked="checked"' : '' ?> name="check1[]" >
                <span class="checkmark"></span>YELLOW
            </label>
        </dd>
    </dl>

-상단에 array explode

  - 문자열을 구분자로 나누어 배열로 변환

  - $check1 = explode( $write['wr_10']);
    sql_query(" update $write_table set wr_10 = '$wr_10', wr_10 = '$wr_10' where wr_id = '$wr_id' ")

<?php

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css?v2">', 0);

$check1 = explode( $write['wr_10']);
sql_query(" update $write_table set wr_10 = '$wr_10', wr_10 = '$wr_10' where wr_id = '$wr_id' ");

?>

 

2) wirte_update.skin.php 세팅

- 상단에 array implode

  - 배열을 특정 구분자를 기준으로 문자열로 변환

  - $wr_10 = implode($_POST['check1']);
  - sql_query(" update $write_table set wr_10 = '$wr_10', wr_10 = '$wr_10' where wr_id = '$wr_id' ");

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 

$wr_10 = implode($_POST['check1']);
sql_query(" update $write_table set wr_10 = '$wr_10', wr_10 = '$wr_10' where wr_id = '$wr_id' ");

alert("정상적으로 접수되었습니다.");
?>
<script> location.href = "<?php echo G5_BBS_URL ?>/write.php?bo_table=<?php echo $bo_table ?>"; </script> 

 

3) view.skin.php 세팅

- 상단에 array explode

   - $check1 = explode( $view['wr_10']);

<?php

if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include_once(G5_LIB_PATH.'/thumbnail.lib.php');

$check1 = explode( $view['wr_10']);


// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_URL.'/plugin/bxslider/jquery.bxslider.min.css">', 0);
?>

 

- 변수 호출 

<ul style="font-size:0px;">
	<?php echo $view['wr_10'] ?>
</ul>

 

* list.skin.php 변수

<?php echo $list[$i]['wr_1'] ?>

* 여분 필드에 array 담을 때,  한 개에 담길 수 있는 kb양이 제한적

  --> 체크박스 옵션이 너무 많다면 array 하나 더 만들어서 다른 변수에 담아서 사용

 

 

 

3. 메인 폼 세팅

- 폼태그 데이터 넘기기 

  - action = "write_update01.php" 

     - 새 글 데이터 올라가는 곳 

     -update01.php를 만든 이유는 "자동입력방지" 알림창 꺼진 스킨 필요 

  - input token : 고유값, 개발자 작성 (보안유의!)

  - wr_subject, wr_content는 게시판 필수 입력값, 벨류값 강제로 지정해서 들어가게끔 

 <form name="fwrite" id="fwrite" method="post" action="/bbs/write_update01.php" onsubmit="return checkFrm(this);">
 	<input type="hidden" name="token" value="f30b9b4b4f47b1404925ab006311ec0f">  <!--db넘길때 필요한 토큰 (고유)-->
 	<input type="hidden" name="bo_table" value="new_form_new"> <!--넘길 게시판, value에 테이블 이름-->
 	<input type="hidden" name="wr_subject" value="상담이 접수되었습니다."> <!--게시판 필수 필드 숨기기,벨류값 강제 지정-->
 	<input type="hidden" name="wr_content" value="접수"> <!--게시판 필수 필드 숨기기,벨류값 강제 지정-->
 </form>

 

- 약관 동의 알림창 넣기 

<script type="text/javascript">
function checkFrm(obj) {
	if(obj.wr_6.checked == false) {
		alert('개인정보수집 및 이용 동의에 체크해주세요.');
		obj.wr_6.focus();
		return false;
	}
	if(obj.wr_7.checked == false) {
		alert('마케팅정보 수신 동의에 체크해주세요.');
		obj.wr_7.focus();
		return false;
	}
}
</script>

<body>
<ul class="agree">
	<li><label for="agr1"><input type="checkbox" id="agr1"  name="wr_6" value="6" />개인정보수집 및 이용 동의</label></li>
	<li><label for="agr2"><input type="checkbox" id="agr2" name="wr_7" value="7"/>마케팅정보 수신 동의</label></li>
</ul>
</body>

 

 

- "자동 입력 방지" 알림창 끄기 (write_upadte.php)

if ($is_use_captcha && !chk_captcha()) {
    alert('자동등록방지 숫자가 틀렸습니다.');
}

 

 

- 완료 시 팝업창 띄우기 

 - 해당 폼 게시판 스킨에 write_update.skin.php 생성, 팝업창 넣기

<?php
    if (!defined('_GNUBOARD_')) exit;

    alert("정상적으로 접수되었습니다.");
?>
<script> location.href = "<?php echo G5_BBS_URL ?>/write.php?bo_table=<?php echo $bo_table ?>"; </script>

   - 그러면, submit 버튼 클릭 시, 

    wirte.update.php 로 우선 이동, 거기서 write_update.skin.php이 있으면 들려서 팝업을 띄움 

    (write_update.skin.php 이 include 되어있음)

@include_once($board_skin_path.'/write_update.head.skin.php'); //$board_skin_path = 해당 게시판 스킨