Content 확장 위젯에 비밀글 노출 안되게 수정
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 7.4 |
Content 확장 위젯의 경우
추천 순 조회순 인기순 정렬 등 워낙 기능이 많다보니 12년이 지난 지금까지 사용 중에 있습니다.
근데 아무래도 오래되다보니 비밀글이 최신글에 노출된다거나
대기상태의 글이 노출되는 경우도 발생되고 있습니다.
그래서
https://xe1.xpressengine.com/index.php?mid=download&package_id=19088419
이 오래된 자료에
if($args->show_secret == 'Y')
{
$obj->statusList = array('PUBLIC', 'SECRET');
}
else
{
$obj->statusList = array('PUBLIC');
}
이 부분을 추가 해주고 싶습니다.
형식이 완전히 달라 조금 애를 먹고 있는데
// 해당 문서가 비밀글일 경우 권한이 있는지 확인, 없으면 continue
if ($args->view_secret_document == 'use_permission' || $args->view_secret_document == 'not_show') {
if ($args->view_secret_document == 'use_permission' && $oComment->isSecret() && !$oComment->isGranted()) continue;
else if ($args->view_secret_document == 'not_show' && $oComment->isSecret()) continue;
if ($args->comment_document_secret == 'Y') {
$doobj = null;
$doobj->document_srl = $oComment->get('document_srl');
$output = executeQuery('widgets.contentextended.getDocument', $doobj);
$oDocument = new documentItem();
$oDocument->setAttribute($output->data, false);
if ($oDocument->isSecret()) continue;
}
}
여기 어디 추가하면 좋을것 같은데 관련하여 도움 부탁드립니다.
감사합니다.

댓글 7
인용하신 소스는 왠지 비밀글일 때 댓글 수집을 제어하는 것 같은데요.
정확한 판독인지는 모르겠지만, 위젯에서 비밀 댓글을 보여주는 것으로 설정했더라도 문서가 비밀글이면 그냥 통과하는 거 아닌가요?
getNewestDocuments 쿼리 자체를 손봐야 할 것 같아요.
getNewestDocuments.xml을 보면 문서의 status(PUBLIC, SECRET, EMBARGO 등등) 구분 없이 다 수집하는 것 같거든요.
답변감사합니다.
저런식으로 뜨다보니 작년 겨울에도 해보다가 포기 했는데
이번에 다시보니 비밀글 비밀댓글은 출력이 안되게 설정이 되네요(당시 파도위젯은 안되어서 포기했는데)
엠바고 내용만 추가 해주면 될것같네요.
// 비밀글 표시 방법
if (!$args->view_secret_document) $args->view_secret_document = 'all_user';
이런 방식인데 이거
info.xml에 우선 엠바고를 추가하고 몇몇개 더 테스트 해봐야겠네요.
- '최신 댓글 추출' 등 (댓글이나 이미지와 같이) 기타 콘텐츠를 수집할 때 해당 콘텐츠가 소속된 문서의 비밀글 여부를 체크하는 것으로 보이는데, 이때 문서 status가 EMBARGO인 경우도 필터링을 해줘야 하는 것(아예 넘어가거나 아니면 '발행 대기 중인 글에 달린 댓글입니다' 같은 문구를 출력)
등이 포인트가 될 것 같아요.
https://xetown.com/download/1721679#comment_1724628 도 보고 해보고
이래저래 안돼서 또 다시 보류 해두어야겠습니다.
이게 다시 보니 (위젯 설정에 따라 문서 목록을 만드는 게 아니라) 애초부터 문서를 모두 다 가져온 다음에 위젯 설정에 따라 목록을 필터링하는 방식이네요. (불가피한 이유가 있을 것 같긴 한데 암튼 저같은 선무당이 봐도 비효율적이에요ㅠㅠ)
위젯 클래스 php 파일 472행 쯤에 아래 문구를 넣어보시겠어요?
// 해당 문서가 발행 대기 상태일 경우 continue
if ($oDocument->getStatus() === 'EMBARGO') continue;
isAccessible() 메소드로 하면 더 좋을 것 같긴 한데, 말씀하셨던 것처럼 문서 권한이 해제되는 경우가 있어서 위와 같은 방식으로 확인을 하면서 필터링을 해야 할 것 같아요.