꼼수로 예약발행 모듈을 만들어보고 있습니다 (feat. 자랑)
관여하는 사이트에서 글 등록을 대기시켰다가 일정 시점에 공개 상태로 했으면 좋겠다는 요청이 예전부터 있었는데, 이제 슬슬 작업을 해보고 있습니다.
잠정적으로 이름은 예약발행 모듈이고 영어 이름은 prepub입니다.
보통은 cron이라는 프로그램을 통해서 글 등록을 스케줄링하는 것으로 알고 있는데요.
저는 서버 지식도 거의 없고 웹호스팅 이용자 신세여서 나중에라도 또 써먹으려면 다른 방법을 찾아야겠더라구요.
그러다 https://xetown.com/questions/125182#comment_125284 여기에서 아이디어를 얻게 됐습니다.
이 아이디어로 비교적 간단하게 모듈을 만들고 있지요.
확장변수를 이용해서 발행일시를 넣어주고, 현재일시 이전에는 목록에서 제외하고 그 이후에는 목록에 포함시키는 방식입니다.
1. 먼저 트리거를 이용해 게시판의 '추가 설정' 페이지에 예약발행 기능을 사용할 것인지에 관한 옵션을 만들었구요.
2. 체크가 되어 값이 저장되면, 확장변수(prepub_datetime)가 자동으로 생성됩니다. 체크를 해제하고 저장하면 확장변수는 삭제되구요.
3. 글쓰기에서 확장변수 필드에 발행일시에 해당하는 YmdHi 형식(년월일시분)의 숫자를 입력해주면 예약발행이 됩니다.
- 이때 등록된 글의 status는 PUBLIC이 아니라 EMBARGO로 저장됩니다. 엠바고가 궁금하면 여기를 참조. https://xetown.com/questions/1570845
- 곁가지로 확장변수 입력 방식은 나중에 datetime-local로 바꿔볼 생각입니다. 스킨단에 끼어드는 방식을 고민해봐야겠어요. 물론 코어에서 datetime-local 형식도 지원해주면 좋겠지만요.
4. 이번에는 문서 목록을 만드는 함수 getDocumentList에 트리거로 끼어들어서, 확장변수 prepub_datetime의 값이 현재일시 date('YmdHi')보다 크면, 해당 글은 게시판 목록에는 나타나지 않도록 했습니다. (아래 그림은 해당글이 목록에서 제외된 결과)
5. 위와 같이 게시판 목록에는 나타나지 않지만, 반대로 관리자 페이지의 ./index.php?module=admin&act=dispPrepubAdminList 의 예약발행 목록에 나타나게 됩니다. EMBARGO 상태의 문서만 목록으로 나오게 했거든요.
6. 그리고 getDocumentList에 트리거를 넣을 때, 확장변수값이 현재일시를 지나게 되면 문서 상태값을 EMBARGO에서 PUBLIC으로 바꾸게 했습니다. 즉, 사이트 이용자들 중 누군가 글 목록을 실행하게 된다면 예약글이 공개글로 자동으로 바뀌게 되는 거죠. . (아래 그림은 시간이 지나 해당글이 목록에 포함된 결과)
7. 이후의 과제
- 중간에 잠깐 언급했듯 발행일시 입력 형식을 예쁘게 꾸며볼 생각입니다. 여러개의 숫자를 바로 입력하는 방식은 오류 가능성이 높으니까요.
- 지금은 예약글이 공개될 때 문서상태를 PUBLIC으로 고정시켰는데, 발행 문서가 비밀글일 경우도 대비를 해야 할 것 같습니다. 확장변수를 하나 더 생성해서 비밀글 속성을 넣어줄지, 어떤 식으로 PUBLIC과 SECRET을 판별할지 고민이 좀 되네요ㅎㅎ

댓글 22
화이팅~
혼자만 자라지 않고 라이믹스랑 함께 잘 자라고 계세요 ㅎㅎㅎ
파이팅이에요! ㅎㅎ
과거 텍스타일의 기능중에서 복원되었으면 하는 기능중의 하나가 예약발행이었습니다.
그리고 기대하겠습니다.
10년 묵은 체증이 내려가는 느낌이에요.
사전 등록 검수 후 노출 하는 거는 실제로 실무에서도 많이사용했던 기능인데 멋집니다!
아쉽지만 발행일시를 걸어놓으면 자동으로 발행되는 것(처럼 보이는 꼼수)여서, 대기->승인의 프로세스와는 거리가 좀 있습니다;;;
수행 임무를 3일 전부터 하나씩 등록해야 하는데 미리 1주일 분을 해 두면 주말에 좀 편히 쉴 수 있겠습니다. 좋은 모듈 만들어지길 응원합니다~
이런 느낌일까요?
귀한 자료와 정보를 상세한 설명과 과정까지 공유해 주시니 초보에게는 황금과도 같은 귀한 자료입니다.
찬찬히 읽어보니 정말 유용한 기능인 것 같습니다. 건승하시길요 ㅎㅎ
유료로 판매 및 제작되는 유사 기능의 기존 자료들이 있어서 다 만들더라도 어떤 식으로 배포할지는 고민 중입니다.
어떤 방식이 좋을지...
자랑할만 하세요 ㅋ
https://xetown.com/download/1721679
시간나실 때 테스트해보시고 의견 나눠주시면 감사하겠습니다 :)
@karma @DoubleCheck @hatali @맘잉