Extra Form
PHP PHP 7.2
CMS Rhymix 2.0

안녕하세요.

 

비밀댓글 최신댓글 추출시 노출 되는 증상이 있습니다.

 

혹시 비밀 댓글일 경우 최신 댓글 추출을 막는 방법이 있을까요?

 

감사합니다.

  • profile

    어디에서 어떻게 추출하시는지에 따라 답이 달라지겠지요? 예) xxx 위젯 yyy 스킨

  • profile profile

    우선 아래 위젯을 가공하려고합니다.
    https://xe1.xpressengine.com/index.php?mid=download&package_id=22753725
    다른 위젯들을보니 어떤것들은 비밀댓글을 잘 숨기는 기능이 있는것도 있나보네요!

    조금 더 찾아봐야겠습니다.

    답변감사드립니다!

  • profile profile
    네, 기본 content 위젯도 비밀댓글(is_secret)은 빼고 추출해요.
    비슷한 위젯이 많은데 기능은 모두 제각각이니 잘 찾아보시기 바랍니다.^^
  • profile

    content 위젯에서 댓글 목록을 가져오는 부분을 보면

     

    if($args->show_secret != 'Y')
    {
        $obj->is_secret = 'N';
    }


    이라는 부분이 있습니다.

    위젯 설정의 show_secret 변수값에 따라 댓글 목록 쿼리에 비밀 댓글을 포함시킬 것인지를 확인하는 코드죠.

    이 값이 comment 모듈의 getNewestCommentList 함수로 전달되어 목록이 만들어지는데요.

    댓글 목록을 수집하는 db 쿼리가 실행될 때 조건들 중에 하나로 들어가게 됩니다.

     

    이렇게 content 위젯에서 댓글 목록을 만들 때 비밀 댓글 노출을 제어하는 방식을 참고하셔서 다른 위젯에서도 관련 조건을 확인해보시면 될 것 같아요.

    즉,

    • 위젯.class.php 파일에서 비밀 댓글 제외 조건이 전달되고 있는지
    • 그리고 해당 위젯에서 목록을 만들 때 사용하는 db쿼리에서 그 조건을 받아주고 있는지

    등을 확인해보세요.

  • profile profile
    윤삼님 항상 시간 내어주셔서 감사합니다. 또 하나 배웠습니다! 잘 활용하겠습니다.
  • profile profile
    톰캣님이 올려주신 위젯은 해당 comment 모듈의 getNewstCommentList 함수를 사용하지 않고 직접 쿼리하는 방식으로 되어 있습니다.

    따라서 비밀글의 추철을 제외할려면
    @톰캣

    $output = null;
    코드를 pado_comment_rankingWidget.class.php 파일에서 찾습니다.

    그 다음줄로 엔터를 눌러서
    $obj->is_secret = 'N';

    코드를 넣으시고 queries 폴더안에 있는 2개 파일
    <condition operation="equal" column="modules.module_srl" default="comments.module_srl" filter="number" pipe="and"/>

    위 코드 다음줄 </conditions> 코드 윗줄로 공간만드셔서

    <condition operation="equal" column="commnets.is_secret" var="is_secret" pipe="and" />

    이코드를 추가해주셔야 할 것 같습니다.

    코드에 오타가 있을 수 있으며 모든 코드상황은 적용하실때 확인하시면서 적용하시길 바랍니다.
  • profile profile

    빈게시판.JPG

     

    주신 코드를 잘 적용하여 테스트 해보았는데 빈 게시판입니다로 나옵니다.

     

    파도 댓글 위젯에는 추천 수로 댓글 정렬 기능도 없는것 같고

    아무래도 비밀댓글 숨기기 기능이 내장되어있는 컨텐츠 확장위젯을 가공하여 사용해야할것 같습니다.

     

    도움주셔서 감사합니다.

  • profile profile
    빈 게시판입니다. 라고 뜨는건 저기 출력되는 템플릿코드도 함께 확인이 되어야 답변이 가능할것 같네요.
  • profile

    비밀댓글이 최신글 위젯에 노출되는 것이 아니라, 비밀로 쓴 본문글 밑에 일반 댓글을 달았는데, 그 일반 댓글이 최신글 위젯에 노출되는 것일 수도 있습니다. 논리적으로 생각하면, 본문 내용이 비밀이니까 그 댓글도 비밀여야 옳겠지만, 기술적으로는 그렇지 않을수가 있지요.

    따라서 댓글 목록을 얻은 후에 (getNewestCommentList() 또는 그와 동일한 query를 한 후), 각 댓글의 본문글의 is_secret 까지 검사해서 필터링 해줘야 원하는 결과를 얻을수 있습니다. (예를들면, content.class.php의 _getCommentItems() 를 참고하시면 됩니다). 아니면, 이걸 getNewestCommentList()에 내장하는 것도 나쁘지 않을 것 같기도 합니다.

     

    예를들면, 이런 것이 추가로 붙어야 하는 것이지요.

     

    $output = $oCommentModel->getNewestCommentList($obj);
    
    foreach($output as $key => $oComment)
    
    {
    
      $oDocument = getModel('document')->getDocument($oComment->get('document_srl'), false, false);
    
      if(!$oDocument->isExists() || $oDocument->isSecret() && $args->show_secret != 'Y')
    
      {
    
        continue;
    
      }
    
      ... 
    
    }

     

  • profile profile

    그 부분까지는 보지 못했었네요.
    역사가 쌓인 만큼 콘텐츠 위젯에 사려깊음이 느껴집니다ㅎㅎ

    토비리님의 매의 눈! 👍👍


    근데 저렇게 output 만들고 난 다음에 루프 돌려서 비밀글의 댓글을 목록에서 건너뛰게 하면 의도치 않게 한 목록에 list_count 보다 적은 문서가 목록화될 것 같은 킹리적 갓심이 듭니다.
    애초에 쿼리 돌릴 때 documents 테이블이랑 join을 해야 하지 않나 싶기도 하구요 🤔

  • profile profile
    쿼리에서 모든 조건을 처리하도록 해야 목록이 문제가 생기지 않습니다.

    간단하게 total카운트 가져와서 page 네비게이션을 따로 만드는 방법도 있겟지만, 불필요하게 모든 갯수를 가져오는 형태이다보니 상당히 느릴꺼구요... 윤삼님 말씀대로 하는게 맞아요 ㅎㅎ
  • profile profile
    오, 서당개 7년이 되니... ㅋㅋㅋㅋ
    "그럼 코어의 content 위젯에도 언젠가 반영해주세요" 라고 말씀드리려 했는데,
    쿼리도 새로 만들어야 하고 귀찮으실지 모르겠습니다 TㅅT