회원가입 | 고객센터 |
DESIGNONEX
디자인원엑스
About
Service
PR리그N
Q&AN
노하우
공지사항N
통계
로그인 회원가입
고객센터
6. 게시판

게시판 여분 필드 (Board Extra Fields) 사용 가이드

A Administrator
2026.05.19 19:38(수정됨) 27 0

1. 필드 등록 (관리자)

  1. 관리자 → 게시판 관리
  2. 원하는 게시판 행의 보라색 아이콘 클릭
  3. 모달에서 + 새 필드 클릭
  4. 아래 항목 입력 후 저장
 
항목 설명
필드 키 영문/숫자/_ 만 가능. 생성 후 변경 불가. 예) price , location
필드 라벨 사용자에게 보이는 이름. 예) 가격 , 지역
타입 텍스트 / 숫자 / 선택(드롭다운) / 라디오 / 체크박스 / 날짜 / URL / 전화번호 / 텍스트에어리어
필수 체크 시 글쓰기 폼에서 필수 입력
목록 노출 게시판 목록 페이지에서 컬럼으로 표시
검색 필터 목록 페이지에서 검색/필터 조건으로 사용
뷰 노출 글 상세 페이지에서 값 표시
정렬 순서 숫자가 낮을수록 위에 표시


2. 스킨에서 사용하기

스킨 파일 경로: boards/skins/{스킨명}/

중요: 스킨 파일 상단에 아래 한 줄을 추가해야 합니다

require_once DX_ROOT . '/core/BoardFields.php';


3. 글쓰기 / 수정 (write.php)

기본 사용 — 자동 렌더링
<?php require_once DX_ROOT . '/core/BoardFields.php'; ?>
<form method="post" ...>
 <!-- 기존 제목, 내용 등 폼 필드 -->
 <input type="text" name="title" ...>
 <!-- 여분 필드 자동 출력 -->
 <?php
 /* 수정 시 기존 값 로드, 신규 시 빈 배열 */
 $savedMeta = array();
 if (!empty($post['id'])) {
 $savedMeta = dx_board_fields()->getMeta($post['id']);
 }
 echo dx_board_fields()->renderWriteForm($board['id'], $savedMeta);
 ?>
 <button type="submit">저장</button>
</form>

renderWriteForm() 이 자동으로 각 필드 타입에 맞는 HTML 입력 요소를 생성합니다.
저장은 extend/top/50_board_fields.php 훅이 자동 처리하므로 별도 저장 코드 불필요.


필드 이름 규칙

여분 필드의 name 속성은 자동으로 bf_{필드키} 형식으로 생성됩니다.

필드 키: price → <input name="bf_price">
필드 키: location → <input name="bf_location">


4. 글 상세 보기 (view.php)

기본 사용 — 자동 렌더링
<?php require_once DX_ROOT . '/core/BoardFields.php'; ?>
<!-- 글 본문 출력 -->
<div class="content"><?php echo $post['content']; ?></div>
<!-- 여분 필드 자동 출력 (is_view=1 인 필드만 표시) -->
<?php echo dx_board_fields()->renderView($board['id'], $post['id']); ?>

renderView() 출력 예시:
가격 50,000원
지역 서울 강남구
연락처 010-1234-5678


개별 값 직접 꺼내기

특정 필드 값을 원하는 위치에 직접 출력하고 싶을 때:
<?php
$price = dx_get_post_meta($post['id'], 'price', '0');
$location = dx_get_post_meta($post['id'], 'location', '미입력');
$contact = dx_get_post_meta($post['id'], 'contact', '');
?>
<div class="post-meta">
 <span>가격: <?php echo htmlspecialchars($price, ENT_QUOTES, 'UTF-8'); ?>원</span>
 <span>지역: <?php echo htmlspecialchars($location, ENT_QUOTES, 'UTF-8'); ?></span>
</div>


전체 메타 한 번에 로드

$meta = dx_board_fields()->getMeta($post['id']);
// $meta = array('price' => '50000', 'location' => '서울', ...)

$price    = isset($meta['price'])    ? $meta['price']    : '';
$location = isset($meta['location']) ? $meta['location'] : '';


5. 글 목록 (list.php)

목록에 여분 필드 컬럼 표시
<?php
require_once DX_ROOT . '/core/BoardFields.php';

/* is_list=1 인 필드만 가져오기 */
$listFields = array();
foreach (dx_board_fields()->getFields($board['id']) as $f) {
    if ($f['is_list'] == 1) {
        $listFields[] = $f;
    }
}
?>

<table>
  <thead>
    <tr>
      <th>번호</th>
      <th>제목</th>
      <th>작성자</th>
      <!-- 여분 필드 컬럼 헤더 -->
      <?php foreach ($listFields as $f): ?>
      <th><?php echo htmlspecialchars($f['field_label'], ENT_QUOTES, 'UTF-8'); ?></th>
      <?php endforeach; ?>
      <th>날짜</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($posts as $p): ?>
    <?php $meta = dx_board_fields()->getMeta($p['id']); ?>
    <tr>
      <td><?php echo $p['id']; ?></td>
      <td><?php echo htmlspecialchars($p['title'], ENT_QUOTES, 'UTF-8'); ?></td>
      <td><?php echo htmlspecialchars($p['author_name'], ENT_QUOTES, 'UTF-8'); ?></td>
      <!-- 여분 필드 값 -->
      <?php foreach ($listFields as $f): ?>
      <td>
        <?php
        $val = isset($meta[$f['field_key']]) ? $meta[$f['field_key']] : '';
        echo htmlspecialchars($val, ENT_QUOTES, 'UTF-8');
        ?>
      </td>
      <?php endforeach; ?>
      <td><?php echo $p['created_at']; ?></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>


6. 헬퍼 함수 정리

함수 설명
dx_board_fields() BoardFields 인스턴스 반환
dx_get_post_meta($postId, $key, $default) 특정 필드 값 1개 반환
dx_save_post_meta($postId, $values) 메타 값 배열 저장 (수동 저장 필요 시)


BoardFields 인스턴스 메서드

메서드 설명
getFields($boardId, $activeOnly) 게시판 필드 목록 반환. $activeOnly=true 이면 활성 필드만
getMeta($postId) 게시글 전체 메타 ['key'=>'value'] 배열 반환
getMetaValue($postId, $key, $default) 단일 메타 값 반환
renderWriteForm($boardId, $savedMeta) 글쓰기 폼 HTML 자동 생성
renderView($boardId, $postId) 뷰 페이지 HTML 자동 생성


7. 저장/삭제 자동 처리

extend/top/50_board_fields.php 가 DXCMS 부팅 시 자동 로드되어 아래 훅을 등록합니다.

글 저장 후 (dx_board_after_save) → POST 데이터에서 bf_ 접두사 필드 자동 추출 후 저장
글 삭제 후 (dx_board_after_delete) → 해당 글의 메타 데이터 자동 삭제

스킨에서 별도로 저장/삭제 코드를 작성할 필요가 없습니다.


8. 실전 예시 — 중고거래 게시판


필드 설정 (관리자)

필드 키 라벨 타입 필수 목록
price 가격 숫자 Y Y Y
location 거래 지역 선택 Y Y Y
condition 상품 상태 라디오 Y N Y
contact 연락처 전화번호 N N Y


write.php

<?php require_once DX_ROOT . '/core/BoardFields.php'; ?>
<form method="post">
  <input type="text" name="title" placeholder="제목">
  <textarea name="content"></textarea>

  <?php
  $savedMeta = !empty($post['id']) ? dx_board_fields()->getMeta($post['id']) : array();
  echo dx_board_fields()->renderWriteForm($board['id'], $savedMeta);
  ?>

  <button type="submit">등록</button>
</form>


view.php

<?php require_once DX_ROOT . '/core/BoardFields.php'; ?>

<h1><?php echo htmlspecialchars($post['title'], ENT_QUOTES, 'UTF-8'); ?></h1>

<!-- 가격을 강조해서 따로 표시 -->
<?php $price = dx_get_post_meta($post['id'], 'price', '0'); ?>
<div class="price"><?php echo number_format((int)$price); ?>원</div>

<!-- 나머지 여분 필드는 자동 렌더링 -->
<?php echo dx_board_fields()->renderView($board['id'], $post['id']); ?>

<div class="content"><?php echo $post['content']; ?></div>
주의사항
$post['id'] 는 BIGINT 밀리초 타임스탬프입니다. (int) 캐스팅 하지 마세요.
필드 키는 생성 후 변경이 불가합니다. 신중하게 정하세요.
필드 삭제 시 해당 필드에 저장된 모든 게시글의 값이 함께 삭제됩니다.

댓글0

로그인 후 댓글을 작성할 수 있습니다.
6. 게시판 게시판 여분 필드 (Board Extra Fields) 사용 가이드 2026.05.19 6. 게시판 스킨 DX마켓 등록 2026.05.01 6. 게시판 게시판 스킨 제작 2026.05.01 6. 게시판 댓글 및 답글 구조 2026.05.01 6. 게시판 게시판 구조 2026.05.01
31
전체 회원
380
전체 게시글
380
전체 댓글
570
오늘 방문
31,687
전체 방문
2
현재 접속
인기글 7일 이내
최신글
최신댓글
목록