


1. 파일 구성
설치 패키지(attendance-skin-v1.5.0.zip)의 파일 목록과 역할입니다.| 파일 경로 | 역할 |
| boards/skins/attendance/list.php | 달력형 출석 현황, 개근왕, 오늘 출석 목록, 포인트 안내 모달 |
| boards/skins/attendance/view.php | 개인 출석 달력, 연속/최장 출석 통계, 날짜 클릭 메시지 |
| boards/skins/attendance/write.php | 출석 도장 찍기 폼 (한 줄 메시지 입력) |
| boards/skins/attendance/assets/style.css | 전체 UI 스타일 |
| boards/skins/attendance/skin.json | 스킨 메타 정보 |
| extend/middle/10_attendance_point.php | dx_after_write 훅 — 포인트 지급 및 만근 체크 |
| 📂 설치 방법 1. ZIP 압축 해제 후 아래 두 폴더를 서버에 복사합니다. • boards/skins/attendance/ → 서버의 boards/skins/attendance/ 에 복사 • extend/middle/10_attendance_point.php → 서버의 extend/middle/ 에 복사 2. 관리자 → 게시판 관리 → 게시판 추가 • 스킨: attendance 선택 후 저장 3. 설치 완료! 첫 접근 시 dx_attendance 테이블이 자동 생성됩니다. |
2. 데이터베이스
스킨은 DXCMS 코어 테이블 외에 dx_attendance 테이블 1개만 추가로 사용합니다.별도 DB 작업 없이 스킨 첫 접근 시 자동으로 생성됩니다.
dx_attendance 테이블
| 컬럼 | 타입 | 설명 |
| id | BIGINT | AUTO_INCREMENT, PK |
| member_id | INT | 회원 ID (외래키) |
| board_id | INT | 게시판 ID |
| post_id | BIGINT | 출석 게시글 ID |
| attend_date | DATE | 출석 날짜 (YYYY-MM-DD) |
| message | VARCHAR(255) | 출석 한 줄 메시지 (선택) |
| created_at | DATETIME | 출석 등록 시각 |
| 🔑 UNIQUE KEY UNIQUE KEY uk_att (member_id, board_id, attend_date) → 동일 회원이 같은 게시판에 같은 날 중복 출석을 DB 레벨에서 차단합니다. * 포인트 지급 로직은 extend/middle/10_attendance_point.php 의 dx_after_write 훅에서 처리됩니다. * 포인트 이력은 DXCMS 기존 point_log 테이블에 함께 기록됩니다. |
3. 포인트 지급 시스템
| 구분 | 설명 | 지급 포인트 | 중복 지급 |
| 📌 일일 출석 | 매일 1회 출석 도장 찍기 | +10P | 하루 1회 |
| 🏆 월 만근 보너스 | 해당 월 전일 출석 완료 시 | +100P | 월 1회 |
일일 출석 (+10P)
출석 도장 찍기 버튼 → write.php → dx_after_write 훅 → 포인트 지급 순서로 처리됩니다.
- 하루 1회만 인정 (UNIQUE KEY로 중복 방지)
- DxPoint::add(member_id, 'attend', 10, 'post', post_id, 메모) 호출
- 포인트 타입: attend
월 만근 보너스 (+100P)
해당 월 마지막 날 출석 시 자동으로 만근 여부를 체크합니다.
- 체크 조건: 오늘이 해당 월 마지막 날 (date('t') === date('j'))
- 이번 달 출석 횟수 = 이번 달 전체 일수 일 때 만근 판정
- point_log 에서 attend_perfect 타입 + 해당 연월 기록 확인 → 중복 지급 방지
- DxPoint::add(member_id, 'attend_perfect', 100, ...) 호출
- 포인트 타입: attend_perfect
| 💡 포인트 타입 커스터마이징 extend/middle/10_attendance_point.php 파일에서 아래 값을 직접 수정할 수 있습니다. • 일일 출석 포인트: DxPoint::add(..., 10, ...) 에서 10 변경 • 만근 보너스 포인트: DxPoint::add(..., 100, ...) 에서 100 변경 |
4. 화면 구성
4-1. 목록 페이지 (list.php)
- 헤더: 이번 달 출석 통계 + 포인트 안내 모달 버튼
- 출석 버튼: 오늘 미출석 시 [출석 도장 찍기] 버튼 표시, 출석 완료 시 [오늘 출석 완료!] 뱃지
- 개근왕: 이번 달 출석 횟수 상위 5명 pill 형태 표시, 만근 시 뱃지 노출
- 달력: 이전/다음 월 이동, 날짜 셀에 출석자 아바타 표시 (최대 5명 + 나머지 +N)
- 오늘 출석 목록: 오늘 출석한 회원 이름 + 메시지 + 도장 아이콘
- 포인트 안내 모달: 일일 +10P / 만근 +100P 안내, 유의사항 포함
4-2. 출석 찍기 페이지 (write.php)
- 오늘 날짜 표시
- 한 줄 메시지 입력 (선택, 최대 100자)
- 제출 시 글 제목: YYYY년 MM월 DD일 닉네임 출석
- 이미 출석한 경우 목록으로 자동 리다이렉트
4-3. 개인 달력 페이지 (view.php)
- 프로필 카드: 아바타, 닉네임, 총 출석 / 현재 연속 / 최장 연속 / 이번 달 통계
- 만근 달성 시 배너 표시 (해당 월)
- 개인 달력: 출석한 날 🏷️ 도장 아이콘, 날짜 클릭 → 해당일 메시지 패널 슬라이드
- 오늘 메시지: 오늘 출석 시 메시지 1건 표시
5. 권한 및 설정
게시판 레벨 설정
관리자 → 게시판 관리에서 아래 항목을 설정합니다.
| 설정 항목 | 권장 값 | 설명 |
| 스킨 | attendance | attendance 스킨 선택 |
| 글쓰기 권한 | 회원만 (레벨 1) | 비로그인 출석 방지 |
| 읽기 권한 | 모두 (레벨 0) | 달력은 누구나 볼 수 있음 |
| 댓글 사용 | 비활성 | 출석 게시판 특성상 불필요 |
| 추천 사용 | 선택 | 선택 사항 |
6. 자주 묻는 질문 (FAQ)
Q. 출석을 했는데 포인트가 지급되지 않아요.
A. 다음 항목을 확인해 주세요.
- extend/middle/10_attendance_point.php 파일이 서버에 정확히 업로드 되었는지 확인
- class_exists('DxPoint') — DxPoint 클래스가 존재하는지 확인 (DXCMS v8.1.0 이상 필요)
- 게시판 스킨이 attendance 로 설정되어 있는지 확인
- PHP 에러 로그 확인 (Windows IIS: D:\www_dxcms\php_error.log)
Q. dx_attendance 테이블이 생성되지 않아요.
A. 다음 항목을 확인해 주세요.
- DB 계정에 CREATE TABLE 권한이 있는지 확인
- list.php 상단의 _att_ensure_table() 함수가 정상 실행되는지 PHP 로그 확인
- 직접 생성이 필요한 경우: 설명서 2장의 테이블 구조를 참고하여 수동 생성
Q. 만근 보너스가 중복 지급되었어요.
A. point_log 테이블에서 아래 조건으로 중복 레코드를 확인하고 삭제해 주세요.
SELECT * FROM dx_point_log WHERE type='attend_perfect' AND member_id=?;
Q. 출석 메시지가 저장되지 않아요.
A. write.php 폼의 content textarea 가 정상적으로 값을 전달하는지 확인해 주세요.
- 브라우저 개발자 도구 → Network → write/ 요청 → Payload에 content 값이 있는지 확인
- DXCMS content 필드는 빈 값 제출 시 에러 — 공백 1자 이상이 전달되어야 함
Q. 달력 이전/다음 달 이동이 안돼요.
A. URL 파라미터 year, month 로 이동합니다. 예: /attendance/list?year=2026&month=5