모듈

예약발행

추천 수 10 댓글 41
Extra Form
자료 소개 등록된 문서를 대기상태로 만들고, 정해진 일시에 또는 수동으로 공개 및 발행합니다.
설치 경로 ./modules/prepub
테스트 환경 Rhymix 2.0
라이선스 GPL v2
이름 버전 날짜 다운수
prepub.0.0.4.zip 0.0.4 2022-11-24 15
prepub.0.0.3.zip 0.0.3 2022-11-23 4
prepub.0.0.2.zip 0.0.2 2022-11-23 5
prepub.0.0.1.zip 0.0.1 2022-11-20 17

0.0.4 업데이트 (2022.11.24)

0. 잦은 업데이트여서 민망합니다;;;

1. 전체 공지 목록이 사라지는 문제 수정 (핑크두유님)

-> getNoticeList.xml 쿼리 제거

-> getNoticeList 트리거를 after 시점으로 잡고 엠바고 상태의 문서들을 목록에서 제외하는 방식

 

0.0.3 업데이트 (2022.11.23)

1. 기존 공지가 사라지는 문제 수정 (핑크두유님)

 

0.0.2 업데이트 (2022.11.23)

1. 통합게시판에도 적용

2. 비관리자가 일반 문서 수정시 예약이 신생/갱신되지 않는 문제 수정

3. 게시판에서도 작성자 및 관리자가 발행 대기 문서를 열람 가능 (산소아빠님)

4. getDocumentList, getNoticeList 트리거 호출 시점 변경 (기진곰님)

 

자료 소개

1. 게시글을 정해진 시점에 공개 및 발행할 수 있습니다.

2. 또한 발행 일시와 관계없이 무기한 대기시킬 수도 있습니다.

3. 발행 대기 상태의 문서는 관리자에 의해 수동으로 공개 및 발행할 수도 있습니다.

4. PHP 7.4 및 라이믹스 2.0.23 버전에서 제작되었습니다. 그 외의 환경에서는 오작동할 수 있습니다.

 

Special Thanks to ...

- 본 자료는 기존의 유료자료들과 기능적으로 겹치는 부분이 있지만, 개발자분들께서 흔쾌히 양해해주셔서 무료 배포를 할 수 있게 됐습니다. 람보님과 sejin7940님의 조언과 격려에 다시 한 번 감사 말씀 올립니다.

- 아울러 본 모듈은 코어에서 제공하는 트리거에 대부분 의존하고 있어서, getDocumentList 및 getNoticeList 트리거를 활용하는 다른 서드파티 자료와 충돌 가능성이 있는데(예. 확장변수 다중검색 애드온 같은 것들ㅜ), 혹시라도 이용에 불편하신 부분이 있다면 기존의 유료자료를 사용하시기를 권장합니다.

- 람보님의 예약게시글 모듈 : https://xetown.com/thirdparties/677337

- 세진님의 승인글/예약글 모듈 : http://sejin7940.co.kr/index.php?mid=sejin7940_work&category=102928

 

 

설치 및 사용 안내

 

1. ./modules/prepub에 모듈을 설치합니다.

 

2. 관리자 페이지 대시보드에서 모듈 관련 설정을 확인합니다.

00.png

 

3. 각 게시판의 설정/관리 페이지에서 '추가 설정' 탭으로 이동, 중하단쯤에서 '예약발행 설정'을 진행할 수 있습니다.

01.png

- 사용 안 함(기본값) : 예약발행 모듈을 사용하지 않습니다.

- 발행일시 지정 방식 : 게시판에 확장변수(prepub_datetime)를 자동 생성하고, 글쓴이는 글쓰기 화면에서 특정 일시를 지정하여 발행을 예약할 수 있습니다.

- 무조건 발행대기 방식 : 일시와 상관없이 게시물을 발행 대기 상태로 있게 합니다.

 

4. 발행 대기 상태의 문서들은 모듈 관리 페이지(./index.php?module=admin&act=dispPrepubAdminList)에서 일람할 수 있습니다. 여기서 '발행' 버튼을 통해 대기 상태의 문서들을 수동으로 발행하는 것도 가능합니다.

02.png

 

제작자 윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • ?

    항상 윤삼님의 자료는 훌륭합니다. Good~~

     

    한가지 질문사항입니다.

    나만의 문제인 것 같아서 그런데...

    예약발행을 한 후 content위젯에서는 정상적으로 설정 기간이 되어야 출력이 됩니다.(정상)

    그런데 예전 위젯을 기반으로 만든 위젯에서는 설정 기간전에도 출력이 됩니다.(비정상)

    클릭해서 들어가 보면 내용은 비밀글로 보호는 됩니다.

     

    2022-11-24 091807.jpg

    위의 이미지에서 왼쪽은 구형 위젯이고, 오른쪽은 content위젯입니다.

    왼쪽에는 예약발행글이 보이고(비정상), 오른쪽에는 정상적으로 보이지 않습니다.

    왼쪽에는 지금이 11월 24일인데 11월 25일 예약발행글이 보입니다. (미래에서 온 글입니다👍)  

     

    제 생각에 구형 위젯에서 어떤 조치를 취해야 할 것 같은데 제 실력으로는 어렵네요.    
     

  • ? profile

    위젯에서 문서를 수집하는 과정 때문일 것으로 짐작됩니다.
    아래 링크에서 보듯 content 위젯에서는 공개 또는 비밀 문서만 수집하는데요.
    https://github.com/rhymix/rhymix/blob/90d3766e5c6125b263eccc1ecd25a8dea7e1039e/widgets/content/content.class.php#L263-L270
    예약글은 기본적으로 엠바고(EMBARGO) 상태이기 때문에 수집대상에서 제외되고 목록에서 노출이 안 되는 거죠.

    구형 위젯은 소스를 까봐야 알겠지만 문서상태(status) 식별을 하지 않고 있을 가능성이 있어보입니다.

     

    특히나 공지글만 가져온다거나 하는 경우는 더더욱 애로사항이 있는데요.

    코어의 공지사항 목록 쿼리 자체가 문서상태와 상관없이 공지사항 전부를 수집하는 것이어서, 이 쿼리를 재사용하거나 응용한 위젯이라면 엠바고가 걸린 문서도 자동 수집하게 될 겁니다.

     

    관건은 위젯 쪽에서 문서상태를 제한해줄 수 있느냐 하는 데 있을 것으로 보입니다.

  • ? profile
    그 이후로 위젯 출력 제어는 잘 되셨나요?
    소식이 궁금합니다~
  • profile ?
    Contact 위젯에서 이리 저리 코드를 가져와 붙여보아도 정상 작동을 하지 않아서 포기한 상태입니다. 님 번거롭게 할까봐 답글 달지 않았습니다.
  • ? profile

    해당 위젯에서 문서 목록을 가져오는 쿼리에 status 조건이 없는 거 아닌가요?

  • profile ?
    님이 남겨주신 참고에 따라 status 부분을 추가해도 비정상 작동을 하더군요.
    그 이상은 저의 실력으로 무리라...

    PHP 파일에 아래 코드 넣고, info.xml파일까지 수정해 보았습니다.
    if($args->show_secret == 'Y')
    {
    $obj->statusList = array('PUBLIC', 'SECRET');
    }
    else
    {
    $obj->statusList = array('PUBLIC');
    }
  • ? profile
    네, 이 부분은 괜찮은 것 같은데요.
    그런데 info.xml 파일은 위젯 설정 정보를 담는 것이니 문서 목록과는 무관할 것 같습니다.

    위젯의 class.php 파일에서 문서목록을 생성하는 함수나 DB쿼리는 어떻게 되나요?
    기존 document 모듈의 함수를 활용하는지, document 모듈의 db 쿼리를 사용하는지, 아니면 위젯 자체적으로 db 쿼리를 실행하는지요?

    해당 부분의 코드도 알려주시면 좋겠습니다.
    이 부분에 따라서, 삽입하신 $obj가 제대로 전달되는지, 그리고 쿼리 실행에 반영되는지 알 수 있을 것 같습니다.
  • profile ?

    사용중인 php파일 첨부합니다.

    Atachment
    첨부
  • ? profile
    150~168행이 조건에 따라 쿼리를 실행시켜주는 것 같은데요.
    이들 쿼리 xml 파일에서 $obj->statusList = array('PUBLIC', 'SECRET'); 또는 $obj->statusList = array('PUBLIC'); 를 받아주는 조건이 있나요?

    content 위젯 기준으로 보면
    https://github.com/rhymix/rhymix/blob/90d3766e5c6125b263eccc1ecd25a8dea7e1039e/widgets/content/queries/getNewestDocuments.xml#L11 같은 부분이요.
    이렇게 쿼리 xml 파일에서 statusList를 받아줘야 위젯의 class.php에서 새로 넣을 $obj->statusList = array('PUBLIC', 'SECRET'); 같은 코드가 반영될 텐데요.
  • profile ?
    xml파일에 해당 조건 넣어주니 잟 작동합니다.
    힘써 주셔서 감사합니다.
  • ? profile
    잘 된다니 다행입니다!!!
  • profile

    이 모듈 쓰시고 게시판에 전체공지로 체크한 글들이 사라지는 현상 있으신분
    모듈 지우면 다시 보이고요~

  • profile profile
    헉 얼른 롤백하세요. 빠른 시일 내에 확인해보고 업데이트하겠습니다ㅜ
  • profile profile
    그냥 공지 체크는 영향 없는데 전체(게시판) 공지 체크 있는 게시판에서 사라지네요
    PHP 7.4 라이믹스 2.0.23 버전
  • profile profile
    긴급 패치해서 0.0.3으로 올렸습니다. 확인 부탁드릴게요~
  • profile profile
    똑같이 사라지네요
  • profile profile

    전체공지면 다른 서드파티 자료를 통해 지정되는 것인가요?

     

    덧. 개인적으로는 (일반문서와 달리) 코어의 공지사항 목록 쿼리와 함수에 이슈가 있다고 보고 있는데요(이런 문제입니다). 그 때문에 이 모듈에서도 공지사항 쪽은 목록을 따로 만들어서 대체해주는 방법을 쓰고 있습니다. 그러다보니 목록에서 전체공지가 누락되는 것 같아요.

  • profile profile
    넵 서드파티 게시판 스킨에 있는 기능이라
    그냥 공지는 잘 되니깐 스킨 문제인 듯해요~
  • profile profile
    헛 서드파티 호환성까지 신경써주시다니
    매우 잘됩니당~
  • profile profile
    서드파티 문제라기보다는 코어의 전체공지 기능을 캐치하지 못한 제 쪽의 문제였어요;;;
    잘 된다니 다행입니다!
  • profile
    0.0.2 버전으로 업데이트했습니다.
    절찬리ㅋ 확인 부탁드려요~ @산소아빠 @adlib @현님 @라이믹스촙
  • profile
    산삼보다 좋다는 윤삼님 신작 모듈 추천하고 갑니다
  • ?

    배포해 주셔서 감사합니다.

    2.x 대 사이트에서 아주 잘 동작합니다.

    주력 사이트(몇가지모듈때문에)가 1.9.9.8에 PHP7.4에 머물러 있는데 업로드 후 관리자 화면으로 들어갈 때 아래 에러가 나옵니다.

    20221121_100738.png

    코드를 잘 몰라서 에러메시지만 캡쳐했습니다. 1.x대 지원 계획이 있으신 지 여쭈어보고 없으시면

    안정화 버전 올려주실 때 의뢰게시판 이용해서 사용하겠습니다. 좋은 모듈 만들어 주셔서 감사합니다.

     

  • ? profile
    제보 감사합니다!
    다만, 2.x 이하의 버전에서는 개발 환경 때문에 지원이 어려울 것 같습니다ㅜ

    현재는 아래 댓글에 나온 기능개선 요청(작성자 및 관리자가 게시판 목록에서 엠바고 문서를 열람, getDocumentList 및 getNoticeList를 통한 목록 조작 최소화)에 따라 작업 중인데요.
    해당 작업이 완료되고, 추가적인 버그 제보 및 기능개선 요청을 검토하면 안정화 버전도 곧 나올 것으로 기대됩니다.
  • profile ?
    예~ 감사합니다.
  • profile ?
    작업하신다고 바쁘신데 한가지만 여쭈어보고 싶습니다.
    제가 self:: 이렇게 되어있는 부분 몇 군데를 $this-> 이런식으로 수정해서 어떻게 관리자 화면까지는 진도가 나갔는데(이렇게 수정하는 것이 맞는 방법인지도 모르고 이해없이 그냥 막 해보고 있습니다. 이 모듈 작동 방식이 업무 개선에 참 좋은 구조로 되어 있어서 조금 더 도전해보려고 합니다 ㅎ )

    관리자 메인 페이지에서 설정완료화면이 안나와서 그런건지 게시판 추가설정을 들어가보니 예약발행 설정화면이 보이지가 않습니다.

    이게 1.9 버전에서 원래 게시판 추가설정 화면이 안되는 건지, 아니면 설정완료화면이 나오지 않아 그런 것인지 알수 있을까요? 조금만 더 해보고 잘 안되면 포기하고 의뢰해 보도록 하겠습니다. 스스로 한번 해결해 보고 싶어서요^^ 문과 출신이라서 그런지 코드 대부분이 외계어로 느껴집니다. -,-
  • ? profile
    2.0 이전이라 하더라도 하위호환되는 소스라면 추가설정에 설정폼이 나오는 게 맞습니다.
    과거의 $lang 변수 대신 라이믹스 내장함수인 lang으로 바꿔쓴 부분도 있고 그러네요;;;
  • profile
    윤삼님 매번 좋은 자료 감사합니다.
  • profile profile

    적용해보시고 의견 있으시면 남겨주세요~

  • profile profile
    넵 알겠습니다. 감사합니다. 윤삼님~!!!
  • profile
    좋은 자료 감사합니다.
    여기는 일요일 아침이라 성당 다녀와서 …,
  • profile profile
    어떻게... 적용 좀 해보셨습니까? ㅎㅎ
  • profile

    getDocumentList, getNoticeList 트리거에서 목록을 대체하려고 하면 동일한 트리거를 사용하는 다른 모듈들과 충돌할 가능성이 있지요. 슈퍼캐시나 타임라인도 작동하지 않게 될 위험이 있고요.

    목록을 대체하려고 시도하지 말고 해당 문서의 예약 상태만 풀어주면 (상태값을 PUBLIC으로 바꿔주면) 이후 실행 과정에서 자연스럽게 목록에 포함될 테니, 충돌 가능성이 크게 줄어들 것 같습니다.

  • profile profile
    네, 조언해주신 방향으로 생각을 해봐야겠습니다.
    EMBARGO 문서만 리스트로 따로 불러와서 현재일시와 비교대조해서 문서상태를 바꿔주는 방식이면 되겠죠?
  • profile profile

    네, 엠바고 걸어놓았던 문서의 상태만 바꿔주면 될 것 같습니다.

    단, 아랫분이 요청하신 것처럼 글쓴이나 관리자에게는 엠바고 기간에도 다 보여야 한다!! 라고 하시면 그건 좀 애매하겠네요. after 트리거 시점에서 작성시간 상관없이 맨 위에 무조건 추가해 준다면 몰라도... (실제 발행시간은 미래가 될 테니까 맨 위에 나오는 것이 정상이라고 우겨보세요! ㅋㅋㅋ)

  • profile profile
    좋은 방식인 것 같습니다ㅎㅎㅎ
    어차피 특별한 목록이니까, order_type에 상관없이 맨 위에 올리는 게 낫겠어요 😀
  • profile
    와... 감사합니다. 바로 적용해봐야겠네요~ 덕분에 즐거운 일요일밤이네요~
  • profile profile
    실제 테스트까지 해보지는 않았는데 확장변수 다중검색 애드온 등과 높은 확률로 충돌 가능성이 있어요.
    적용하실 때 감안해주세요~
  • profile profile

    적용해보았습니다. 예정시간에 잘 발행되고, 입력하지 않으면 즉시 작성되네요~
    헌데 작성글이 작성자에게도 보이지 않아, 예약 후 글을 수정하려고 하면, 회원 메뉴에서 작성글에서 확인해야 하네요~

    발행 전까지 작성자 또는 관리자에게 리스트에 (예약글)이라고 표기되어 볼 수 있게 표기되면 더 좋을 것 같습니다~^^

  • profile profile
    아 맞다. 회원 작성글 보기에서 볼 수 있게 했는데 그걸 소개글에서 뻬먹었네요ㅎㅎ

    예약글 표기는... 로그인 정보에 따라 리스트를 따로 생성을 해야 하고 표기 방식도 짜봐야 해서 연구를 좀 해야겠네요ㅎㅎ
  • profile profile
    스킨 단에서 예약일시를 판단하는 구문을 넣어 수정할 수 있도록 하면 될 것같습니다~ 좋은 모듈 정말 감사합니다^^