그누보드 여분필드 활용방안

1 개요[ | ]

그누보드 여분필드 활용방안
  • 공식매뉴얼에 따르면...[1]
최대 10개까지 필드 추가 가능
여분필드 제목, 값 입력 가능...
  • 구체적으로 어떻게 사용하라는 것인지 가이드라인이 없다...
제목에는 필드명, 값에는 속성을 입력해주면 좋을 것 같다.
여기서는 JSON 형식으로 속성을 기입하도록 한다.

2 board_form.php 수정[ | ]

        <?php for ($i=1; $i<=10; $i++): ?>
        <tr>
            <th scope="row">여분필드<?= $i ?></th>
            <td class="td_extra">
                <label for="bo_<?= $i ?>_subj">여분필드 <?= $i ?> 제목</label>
                <input type="text" name="bo_<?= $i ?>_subj" id="bo_<?= $i ?>_subj" value="<?= get_text($board['bo_'.$i.'_subj']) ?>" class="frm_input">
                <label for="bo_<?= $i ?>">여분필드 <?= $i ?></label>
                <input type="text" name="bo_<?= $i ?>" id="bo_<?= $i ?>" value="<?= htmlspecialchars($board['bo_'.$i]) ?>" class="frm_input" style="width:360px">
            </td>
            <td class="td_grpset">
                <input type="checkbox" name="chk_grp_<?= $i ?>" value="1" id="chk_grp_<?= $i ?>">
                <label for="chk_grp_<?= $i ?>">그룹적용</label>
                <input type="checkbox" name="chk_all_<?= $i ?>" value="1" id="chk_all_<?= $i ?>">
                <label for="chk_all_<?= $i ?>">전체적용</label>
            </td>
        </tr>
        <?php endfor ?>

3 관리자 설정[ | ]

  • 관리자 메뉴 --- 게시판 수정
여분필드 1 제목: 수량, 여분필드 1 값: {"size":4,"showInList":1}
여분필드 2 제목: 상태, 여분필드 2 값: {"type":"radio","options":["요청","진행중","완료"],"showInList":1}
여분필드 3 제목: 처리일자, 여분필드 3 값: {"type":"date","showInList":1}
여분필드 4 제목: 비고, 여분필드 3 값: {"type":"textarea"}
  • (참고) 관리자 메뉴에서 설정한 내용은 다음과 같이 $board에 반영된다.
stdClass Object
(
    [bo_table] => product
    [gr_id] => bbs1
    [bo_subject] => 상품게시판
    [bo_mobile_subject] => 
    [bo_device] => pc
... (생략)
    [bo_1_subj] => 수량
    [bo_2_subj] => 상태
    [bo_3_subj] => 처리일자
    [bo_4_subj] => 비고
    [bo_5_subj] => 
... (생략)
    [bo_1] => {"size":4,"showInList":1}
    [bo_2] => {"type":"radio","options":["요청","진행중","완료"],"showInList":1}
    [bo_3] => {"type":"date","showInList":1}
    [bo_4] => {"type":"textarea"}
    [bo_5] => 
... (생략)
)
  • 그런데... 설정을 해도 스킨에서 출력해주지 않으므로 아무 변화가 없다...

4 스킨 복제[ | ]

  • basic 스킨을 복제하여 extra 스킨 생성
[root@zetawiki ~]# cd /var/www/html/gnuboard5/skin/board/
[root@zetawiki board]# cp -a basic extra

5 관리자 설정 2[ | ]

  • 해당게시판의 스킨을 extra으로 변경

6 글쓰기 스킨 수정[ | ]

글쓰기 스킨(gnuboard/skin/board/extra/write.skin.php)의 링크 입력란(G5_LINK_COUNT) 위쪽에 내용 추가

<!-- 여분필드 -->
<?php for($i=1; $i<=10; $i++ ):
	if( $board['bo_'.$i.'_subj'] == '' ) break;
	$z_subject = $board['bo_'.$i.'_subj'];
 
	$z_properties = json_decode( $board['bo_'.$i] );
	$z_type = isset($z_properties->type)? $z_properties->type: 'text';
	$z_value = ($w=="u")? $write['wr_'.$i]: '';
	?>
		<tr>
			<th scope="row"><label for="wr_<?= $i; ?>"><?= $z_subject; ?></label></th>
			<td>
				<?php
				if( $z_type == 'textarea' ) {
					echo "<textarea name='wr_$i' id='wr_$i' class='frm_input' maxlength='255'>$z_value</textarea>";
				} else if( $z_type == 'date' ) {
					echo "<input type='date' name='wr_$i' id='wr_$i' value='$z_value' class='frm_input'>";
				} else if( $z_type == 'radio' ) {
					$z_options = isset($z_properties->options)? $z_properties->options: array();
					foreach($z_options as $option) {
						$checked = ($option == $z_value)?' checked':'';
						echo "<label><input type='radio' name='wr_$i' id='wr_$i' value='$option' $checked>$option</label> ";
					}
				} else {
					$z_size = isset($z_properties->size)? $z_properties->size: 32;
					echo "<input type='text' name='wr_$i' id='wr_$i' maxlength='255' size='$z_size' value='$z_value' class='frm_input'>";
				}
				?>
			</td>
		</tr>
<?php endfor ?>
<!-- /여분필드 -->

7 글쓰기 테스트[ | ]

  • 해당게시판 [글쓰기] 클릭
  • 여분필드 나오는지 확인
  • 적당한 값 채워넣고 [작성완료]
  • DB 테이블(g5_write_게시판식별자[2])에 여분필드가 잘 저장되었는지 확인

8 글보기 스킨 수정[ | ]

<!-- 여분필드 -->
<?php if( $board['bo_1_subj'] != '' ): ?>
	<div class='tbl_frm01 tbl_wrap'><table>
	<?php for($i=1; $i<=10; $i++ ):
		if( $board['bo_'.$i.'_subj'] == '' ) break; ?>
		<tr>
			<th><?= $board['bo_'.$i.'_subj']; ?></th>
			<td><?= $view['wr_'.$i]; ?></td>
		</tr>
	<?php endfor ?>
	</table></div>
<?php endif ?>
<!-- /여분필드 -->

9 글목록 스킨 수정[ | ]

            <th scope="col">제목</th>

<!-- 여분필드 헤더 -->
<?php if( $board['bo_1_subj'] != '' ): ?>
	<?php for($j=1; $j<=10; $j++ ):
		if( $board['bo_'.$j.'_subj'] == '' ) break; ?>
		<th><?= $board['bo_'.$j.'_subj']; ?></th>
	<?php endfor ?>
<?php endif ?>
<!-- /여분필드 헤더 -->

            <th scope="col">글쓴이</th>
... (생략)
            </td>

<!-- 여분필드 -->
<?php if( $board['bo_1_subj'] != '' ): ?>
	<?php for($j=1; $j<=10; $j++ ):
		if( $board['bo_'.$j.'_subj'] == '' ) break; ?>
		<td><?= $list[$i]['wr_'.$j]; ?></td>
	<?php endfor ?>
<?php endif ?>
<!-- /여분필드 -->

            <td class="td_name sv_use"><?= $list[$i]['name'] ?></td>

10 주석[ | ]

  1. http://sir.co.kr/g5_manual/11
  2. 이 예시에서는 bo_table이 product이므로 테이블명은 g5_write_product
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}