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

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

A Administrator
2026.05.19 19:38(수정됨) 5 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

로그인 후 댓글을 작성할 수 있습니다.
5. 관리자 기능 사용법 메일 보내기 2026.04.21 5. 관리자 기능 사용법 회원 관리 2026.04.21 5. 관리자 기능 사용법 메뉴 관리 2026.04.21 5. 관리자 기능 사용법 인기글 2026.04.21 5. 관리자 기능 사용법 카테고리 2026.04.21 5. 관리자 기능 사용법 게시판 그룹 2026.04.21 5. 관리자 기능 사용법 페이지 관리 2026.04.21 5. 관리자 기능 사용법 전체 공지 2026.04.21 5. 관리자 기능 사용법 팝업 관리 2026.04.21 5. 관리자 기능 사용법 게시판 관리 2026.04.21 4.2 관리자 시스템 구조 관리자 UI 구조 2026.04.21 4.2 관리자 시스템 구조 관리자 라우팅 2026.04.21 4.1 CMS 아키텍처 데이터 흐름 연결 2026.04.21 4.1 CMS 아키텍처 DX 위에 CMS가 올라가는 구조 2026.04.21 3.10 모듈 로딩 구조 자동 로딩 구조 2026.04.21 3.10 모듈 로딩 구조 플러그인 / 확장 로딩 방식 2026.04.21 3.9 공통 함수 / 유틸 재사용 방식 2026.04.21 3.9 공통 함수 / 유틸 공통 클래스 구조 2026.04.21 3.9 공통 함수 / 유틸 전역 함수 구조 2026.04.21 3.8 Extend 구조 실제 적용 흐름 2026.04.21
31
전체 회원
362
전체 게시글
325
전체 댓글
116
오늘 방문
31,100
전체 방문
2
현재 접속
인기글 7일 이내
최신글
최신댓글
목록