Board & Placeholder

게시판 · 치환자

게시판은 메뉴에 연결하는 것만으로 목록·검색·페이징·상세 화면이 만들어집니다. 메인·헤더·서브레이아웃 블록 HTML에는 동적 치환자를 넣어 최신 게시글 목록이나 GNB·SNB 메뉴 트리를 실시간으로 노출합니다.

게시판 메뉴 연결

  1. 게시판 만들기

    [게시판 관리]에서 게시판 이름과 게시판 키(예: notice), 스킨(목록형 · 갤러리형 · 카드형), 카테고리 사용 여부를 설정합니다.

  2. 메뉴에 연결

    [메뉴관리]에서 게시판 유형 메뉴를 만들고 위 게시판을 선택합니다. 연결된 메뉴는 /bbsctt/list.do?key={게시판 키} 로 열립니다.

  3. 게시글 등록

    [게시글 관리]에서 글을 등록합니다. 공지 고정, 카테고리, 파일 첨부를 지원하며 첨부 다운로드 횟수가 통계로 남습니다.

스킨별 화면 목록형은 번호·제목·작성자·등록일·조회수·첨부를 표로, 갤러리형·카드형은 썸네일 이미지 카드로 보여 줍니다. 스타일은 SUB_CSS의 .board_list, .img_list, .paging_wrap에서 수정합니다.

(1) 메인 화면 최신글 치환자

MAIN_BODY 같은 블록 HTML에 아래 치환자를 넣으면 서버가 해당 게시판의 최신글 HTML로 바꿔 출력합니다.

게시판 최신글 치환자 목록
치환자치환 결과
{{POSTS:게시판키:건수}}해당 게시판의 최신글 N건을 <li><a href>제목</a><span>날짜</span></li> 목록으로 출력
{{POSTS_MORE:게시판키}}해당 게시판 목록 페이지 URL (더보기 링크의 href에 사용)

사용 예

<section class="notice">
  <h2>공지사항</h2>
  <a href="{{POSTS_MORE:notice}}">더보기</a>
  <ul class="nd-news">{{POSTS:notice:5}}</ul>
</section>

주의 <ul>과 치환자 사이에 공백이나 줄바꿈을 넣지 마세요. 게시글이 없을 때 :empty 스타일로 “등록된 게시글이 없습니다” 같은 안내를 보여 줄 수 있습니다.

(2) 헤더(HEADER) · 서브레이아웃(SUB_LAYOUT) 동적 치환자

HEADER 및 SUB_LAYOUT 블록을 커스텀 퍼블리싱할 때 아래 치환자를 삽입하면, 사이트별 메뉴 트리와 현재 페이지 경로가 실시간 HTML로 치환됩니다.

레이아웃 및 네비게이션 동적 치환자 목록
치환자사용 블록치환 결과 및 설명
{{GNB_MENU}}HEADER사이트의 1~3차 전체 메뉴 트리를 표준 <ul class="gnb"> 구조로 자동 렌더링
{{GNB_SIMPLE}}HEADER1차 메뉴만 노출하는 심플형 <ul class="gnb gnb--simple"> 구조로 자동 렌더링
{{ALL_MENU}}HEADER전체메뉴/모바일 드로어용 <ul class="all_menu"> 전체 트리 렌더링
{{SITE_NAME}}공통현재 사이트의 표시 이름 (예: ND CMS, 서브사이트명)
{{HOME_URL}}공통현재 사이트의 홈 링크 URL (기본 사이트 /index.do, 서브사이트 /{사이트ID}/index.do)
{{VIS_TOP}} · {{VIS_TITLE}} · {{VIS_CLASS}}SUB_LAYOUT현재 서브 페이지의 상단 영문/보조 문구, 대제목, 서브비주얼 배경 클래스(vis_nd1 등)
{{BREADCRUMB}}SUB_LAYOUT홈 아이콘 및 현재 1·2·3차 메뉴 경로 드롭다운(<ul class="breadcrumb">) 자동 생성
{{SHARE_BAR}}SUB_LAYOUTURL 복사 · 공유 · 인쇄 유틸리티 버튼(<ul class="share">) 출력
{{SNB_TITLE}}SUB_LAYOUT현재 선택된 1차 대분류 메뉴명 (좌측 사이드바 상단 타이틀용)
{{SNB_MENU}}SUB_LAYOUT현재 1차 메뉴 산하의 2·3차 사이드바 메뉴 트리(<ul class="snb_list">, 현재 메뉴 on 클래스 자동 부여)
{{SUB_BODY}}SUB_LAYOUT콘텐츠 본문 또는 게시판 목록/상세 화면이 삽입되는 기준 위치

캐시 정책 및 동기화 (Cache Invalidation)

MenuService 및 BlockService는 고속 서빙을 위해 메모리 캐시(ConcurrentHashMap)를 유지합니다. 관리자 화면에서 수정할 때는 evict()가 호출되어 즉시 갱신되지만, DB에 SQL을 직접 INSERT/UPDATE한 경우에는 캐시가 비워지지 않으므로 관리자 콘솔에서 해당 항목을 다시 [저장]하거나 애플리케이션을 리로드해야 합니다.