관여하는 사이트에서 글 등록을 대기시켰다가 일정 시점에 공개 상태로 했으면 좋겠다는 요청이 예전부터 있었는데, 이제 슬슬 작업을 해보고 있습니다.

잠정적으로 이름은 예약발행 모듈이고 영어 이름은 prepub입니다.

 

보통은 cron이라는 프로그램을 통해서 글 등록을 스케줄링하는 것으로 알고 있는데요.

저는 서버 지식도 거의 없고 웹호스팅 이용자 신세여서 나중에라도 또 써먹으려면 다른 방법을 찾아야겠더라구요.

 

그러다 https://xetown.com/questions/125182#comment_125284 여기에서 아이디어를 얻게 됐습니다.

이 아이디어로 비교적 간단하게 모듈을 만들고 있지요.

확장변수를 이용해서 발행일시를 넣어주고, 현재일시 이전에는 목록에서 제외하고 그 이후에는 목록에 포함시키는 방식입니다.

 

 

1. 먼저 트리거를 이용해 게시판의 '추가 설정' 페이지에 예약발행 기능을 사용할 것인지에 관한 옵션을 만들었구요.

00.png

 

2. 체크가 되어 값이 저장되면, 확장변수(prepub_datetime)가 자동으로 생성됩니다. 체크를 해제하고 저장하면 확장변수는 삭제되구요.

01.png

 

3. 글쓰기에서 확장변수 필드에 발행일시에 해당하는 YmdHi 형식(년월일시분)의 숫자를 입력해주면 예약발행이 됩니다.

02.png

- 이때 등록된 글의 status는 PUBLIC이 아니라 EMBARGO로 저장됩니다. 엠바고가 궁금하면 여기를 참조. https://xetown.com/questions/1570845

- 곁가지로 확장변수 입력 방식은 나중에 datetime-local로 바꿔볼 생각입니다. 스킨단에 끼어드는 방식을 고민해봐야겠어요. 물론 코어에서 datetime-local 형식도 지원해주면 좋겠지만요.

 

4. 이번에는 문서 목록을 만드는 함수 getDocumentList에 트리거로 끼어들어서, 확장변수 prepub_datetime의 값이 현재일시 date('YmdHi')보다 크면, 해당 글은 게시판 목록에는 나타나지 않도록 했습니다. (아래 그림은 해당글이 목록에서 제외된 결과)

04.png

 

5. 위와 같이 게시판 목록에는 나타나지 않지만, 반대로 관리자 페이지의 ./index.php?module=admin&act=dispPrepubAdminList 의 예약발행 목록에 나타나게 됩니다. EMBARGO 상태의 문서만 목록으로 나오게 했거든요.

03.png

 

6. 그리고 getDocumentList에 트리거를 넣을 때, 확장변수값이 현재일시를 지나게 되면 문서 상태값을 EMBARGO에서 PUBLIC으로 바꾸게 했습니다. 즉, 사이트 이용자들 중 누군가 글 목록을 실행하게 된다면 예약글이 공개글로 자동으로 바뀌게 되는 거죠. . (아래 그림은 시간이 지나 해당글이 목록에 포함된 결과)

05.png

 

7. 이후의 과제

- 중간에 잠깐 언급했듯 발행일시 입력 형식을 예쁘게 꾸며볼 생각입니다. 여러개의 숫자를 바로 입력하는 방식은 오류 가능성이 높으니까요.

- 지금은 예약글이 공개될 때 문서상태를 PUBLIC으로 고정시켰는데, 발행 문서가 비밀글일 경우도 대비를 해야 할 것 같습니다. 확장변수를 하나 더 생성해서 비밀글 속성을 넣어줄지, 어떤 식으로 PUBLIC과 SECRET을 판별할지 고민이 좀 되네요ㅎㅎ

글쓴이 윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • profile
    ^^* 자랑하실만 합니다.
    화이팅~
  • profile profile
    숙원사업 중 하나였는데 의외로 큰 어려움없이 진행돼서 너무 자랑을 하고 싶었어요ㅋㅋㅋㅋㅋ
  • profile profile
    항상 응원하고 있습니다. ^^*
  • profile
    워매 역시,... 무럭무럭 잘 자라고 계시군요!
    혼자만 자라지 않고 라이믹스랑 함께 잘 자라고 계세요 ㅎㅎㅎ
    파이팅이에요! ㅎㅎ
  • profile profile
    이제는 모듈성애자입니다ㅋㅋㅋㅋ
  • profile
    응원합니다.
    과거 텍스타일의 기능중에서 복원되었으면 하는 기능중의 하나가 예약발행이었습니다.
    그리고 기대하겠습니다.
  • profile profile
    네, 커뮤니티를 넘어 말 그대로 콘텐츠 제공 목적의 게시판에서 유용한 기능이죠.
    10년 묵은 체증이 내려가는 느낌이에요.
  • profile
    와 이벤트 같은거 사전 공지 준비하는거 상당히 유용하겠네요.
    사전 등록 검수 후 노출 하는 거는 실제로 실무에서도 많이사용했던 기능인데 멋집니다!
  • profile profile

    아쉽지만 발행일시를 걸어놓으면 자동으로 발행되는 것(처럼 보이는 꼼수)여서, 대기->승인의 프로세스와는 거리가 좀 있습니다;;;

  • ?
    정말 원하던 기능 중에 하나였는데, 배포되면 하는 업무를 미리 처리할 수 있어서 좋겠습니다.
    수행 임무를 3일 전부터 하나씩 등록해야 하는데 미리 1주일 분을 해 두면 주말에 좀 편히 쉴 수 있겠습니다. 좋은 모듈 만들어지길 응원합니다~
  • ? profile
    자랑을 하긴 했는데;;; 기존에 유사한 유료자료들이 이미 있어서 배포까지는 고민을 더 해봐야 할 것 같습니다. 기능적으로 좀 떨어지기도 하구요ㅜ
  • ?
    https://xetown.com/thirdparties/677337

    이런 느낌일까요?
  • ? profile
    네, 느낌만 꼼수로 비슷하게 내봤어요ㅎㅎ
  • profile
    역시 프로개발자 윤삼님!
  • profile profile
    취미생활자예욧;;;
  • profile
    산삼보다 윤삼님 너무 감사드립니다.^^

    귀한 자료와 정보를 상세한 설명과 과정까지 공유해 주시니 초보에게는 황금과도 같은 귀한 자료입니다.
    찬찬히 읽어보니 정말 유용한 기능인 것 같습니다. 건승하시길요 ㅎㅎ
  • profile profile
    저 또한 도움이 되는 정보였기를 바랍니다!
  • profile
    와 꼭 필요했던 기능이에요!! 감사합니다!
  • profile profile

    유료로 판매 및 제작되는 유사 기능의 기존 자료들이 있어서 다 만들더라도 어떤 식으로 배포할지는 고민 중입니다.
    어떤 방식이 좋을지...

  • profile
    멋진데요?!!
    자랑할만 하세요 ㅋ
  • profile profile
    더 멋지게 하려고 노력 중입니다ㅋㅋ
  • profile
    일단 제작이 일단락돼서 공개자료실에 올렸습니다.
    https://xetown.com/download/1721679

    시간나실 때 테스트해보시고 의견 나눠주시면 감사하겠습니다 :)
    @karma @DoubleCheck @hatali @맘잉