회원가입 | 고객센터 |
DESIGNONEX
디자인원엑스
DX마켓
Service
PR리그
Q&AN
지식공유
공지사항
통계
로그인 회원가입
고객센터
일반게시판

출석 도장 게시판

D DX
2026.06.24 02:00(수정됨) 5 0 1





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

댓글1

D
DX 2026.06.24 02:01

이번 작업은 기존 여분필드를 활용하는 방식이 아니라, 별도의 데이터베이스 테이블을 생성하여 사용하는 구조로 제작하였습니다.
별도 DB를 직접 수동으로 구성하실 필요는 없도록, 필요한 테이블은 자동으로 생성되게 처리해두었습니다.

조금이나마 구현 방식이나 확장 작업에 도움이 되었으면 좋겠습니다.

로그인 후 댓글을 작성할 수 있습니다.
Skin 6
39
전체 회원
1,019
전체 게시글
1,902
전체 댓글
126
오늘 방문
48,604
전체 방문
5
현재 접속
인기글 7일 이내
최신글
최신댓글
내 플레이리스트
플레이리스트가 비어있습니다
스튜디오 게시판에서
플레이리스트에 담기 버튼을
눌러보세요
목록
목록