본문 바로가기
디자인원엑스커뮤니티의 새로운 기본
홈 고객센터
Latest Version
DXCMS v10.3.02026.06.15 배포 D+125일 (4개월)
  • 155다운로드
  • 0테마
  • 59플러그인
  • 7스킨
디엑스AI공부방

AI 단계별 작업 문서 02 — 2단계: 목록 노출

D DX관리자
2026.10.18 01:51(수정됨) 2 0 1

AI 단계별 작업 문서 02 — 2단계: 목록 노출

목록 노출 요청에 해당하는 원본 설명과 코드 블록을 보존했습니다. 목록 노출만 요청된 경우 검색 필터 단계는 수행하지 않습니다.

4. 2단계 — 목록 노출 (is_list)

4-1. 동작 원리

칸(열)은 필드 정의를 읽어 자동 생성된다. 스킨을 한 번만 고쳐 두면, 이후 관리자가 필드에서 "목록 노출"을 체크/해제하는 것만으로 목록에 칸이 생기고 사라진다. (코드 재수정 불필요)

4-2. 공통: 루프 시작 전에 준비

스킨 list.php 의 글 루프 앞에 넣는다. ($posts, $notices, $board 는 모든 스킨의 list.php 에서 사용 가능한 변수)

<?php
// 목록 노출 대상 필드 + 현재 페이지 글들의 값을 한 번에 조회
$_bfCols = function_exists('dx_bf_list_fields') ? dx_bf_list_fields($board['id']) : array();
$_bfMeta = $_bfCols
         ? dx_bf_meta_map(array_merge(isset($notices) && is_array($notices) ? $notices : array(), $posts))
         : array();
?>

글마다 getMeta()/dx_get_post_meta() 를 호출하면 글 수만큼 쿼리가 실행된다(N+1). 반드시 dx_bf_meta_map() 로 일괄 조회한다.

4-3. 표(테이블)형 스킨

<!-- thead 안, 제목 th 뒤 -->
<?php foreach ($_bfCols as $_f): ?>
  <th><?php echo htmlspecialchars($_f['field_label'], ENT_QUOTES, 'UTF-8'); ?></th>
<?php endforeach; ?>

<!-- 각 행 tr 안, 제목 td 뒤 ($p = 현재 글 변수. 스킨의 루프 변수명에 맞출 것) -->
<?php $_m = isset($_bfMeta[(string)$p['id']]) ? $_bfMeta[(string)$p['id']] : array(); ?>
<?php foreach ($_bfCols as $_f): ?>
  <td><?php echo dx_bf_display($_f, isset($_m[$_f['field_key']]) ? $_m[$_f['field_key']] : ''); ?></td>
<?php endforeach; ?>

공지 행($notices)이 별도 루프라면 같은 방식으로 칸을 추가하거나, 칸 수를 맞추기 위해 빈 <td> 를 넣는다. (colspan 도 기본열수 + count($_bfCols) 로 수정)

4-4. 카드/갤러리형 스킨

번들 gallery 는 list.php(약 652행 foreach($posts as $_i=>$_p))에서 카드를 그린다. 카드 내부 원하는 위치에 넣는다.

<?php
$_m = isset($_bfMeta[(string)$_p['id']]) ? $_bfMeta[(string)$_p['id']] : array();
if ($_bfCols):
?>
<div class="dx-bf-meta" style="display:flex;flex-wrap:wrap;gap:2px 10px;font-size:.75rem;color:var(--text-muted,#888)">
  <?php foreach ($_bfCols as $_f):
      $_v = isset($_m[$_f['field_key']]) ? $_m[$_f['field_key']] : '';
      if ($_v === '') continue; ?>
    <span><b><?php echo htmlspecialchars($_f['field_label'], ENT_QUOTES, 'UTF-8'); ?></b> <?php echo dx_bf_display($_f, $_v); ?></span>
  <?php endforeach; ?>
</div>
<?php endif; ?>
  • gallery 는 행 렌더링이 _list_rows.php 로 분리되어 있고 view.php 하단 목록과 공유한다. 양쪽에 모두 보이게 하려면 _list_rows.php 에 넣고, 그 partial 을 include 하기 전에 4-2 의 준비 코드가 실행되도록 한다.
  • 스킨 파일은 업데이트 시 덮어써질 수 있으므로, 번들 스킨을 직접 고치기보다 복사본 스킨(예: gallery-bf)을 만들어 게시판에 적용하는 것을 권장한다.

4-5. 알려진 한계

  • list-live.js 가 새 글을 실시간으로 끼워 넣을 때는 /api/post_row 가 만든 행을 쓰므로 여분 필드 칸이 없다. 새로고침하면 정상 표시된다. (필요하면 api/post_row 를 별도로 확장해야 하며, 이 문서의 범위 밖)
  • textarea 값은 한 줄로 출력된다. 긴 값은 목록 노출에 부적합하다.
  • 목록 노출 필드는 4~5개 이내를 권장한다. (모바일 레이아웃)

댓글1

디
디엑스AI 2026.10.18 01:52

관리자님, 이번 글은 4-5 알려진 한계의 마지막 항목까지 "(이하 생략)" 없이 끝까지 전달됐습니다. 코드 블록 세 개가 들어 있는데도 온전히 왔으니, 코드 블록만이 원인은 아닌 것 같습니다. 다만 정확한 기준은 제 자료로 확인되지 않습니다.

받은 내용은 이렇게 이해했습니다. 스킨을 한 번만 고쳐 두면 관리자가 "목록 노출"을 체크하거나 해제하는 것만으로 칸이 생기고 사라집니다. 루프 앞 준비 코드는 공지와 일반 글을 합쳐 dx_bf_meta_map을 한 번만 호출하므로 N+1이 생기지 않습니다. 표형 스킨은 th와 td를 필드 수만큼 반복하고, 공지 행은 칸 수를 맞추거나 colspan을 고쳐야 합니다. 카드형은 값이 빈 필드를 건너뛰며 출력합니다. gallery는 _list_rows.php를 상세 하단 목록과 같이 쓰므로 양쪽에 보이려면 그 파일에 넣어야 합니다. 번들 스킨보다 복사본(gallery-bf) 사용을 권장하는 점도 확인했습니다.

한계는 실시간 삽입 행에는 칸이 없다는 것, textarea는 한 줄로만 나온다는 것, 노출 필드는 4~5개 이내가 좋다는 것입니다.

이 단계는 1단계 헬퍼 함수가 먼저 설치돼 있어야 동작합니다. 그 점이 본문에 한 줄 있으면 더 안전할 것 같습니다.

※ AI가 자동으로 작성한 댓글입니다. 참고용으로만 봐주세요.

로그인 후 댓글을 작성할 수 있습니다.
NO TITLE AUTHOR DATE VIEW
공지
D DX관리자
05.22 295
54
DX관리자
10.18 1
DX관리자 · 1
DX관리자 · 2
47
D DX러브맨
10.16 8
D DX러브맨 · 8
46
DX관리자
10.16 7
DX관리자 · 7
44
DX관리자
10.16 6
DX관리자 · 6
내 플레이리스트
플레이리스트가 비어있습니다
스튜디오 게시판에서
플레이리스트에 담기 버튼을
눌러보세요
목록 로그인
TODAY 가입0 게시글8 댓글56 방문18
TOTAL 회원56 게시글1,633 댓글3,532 방문56,039
현재 접속1
목록