목록

댓글 12

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

  • @기진곰

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

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

    답변감사드립니다!

  • @톰캣
    네, 기본 content 위젯도 비밀댓글(is_secret)은 빼고 추출해요.
    비슷한 위젯이 많은데 기능은 모두 제각각이니 잘 찾아보시기 바랍니다.^^
  • content 위젯에서 댓글 목록을 가져오는 부분을 보면

     

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


    이라는 부분이 있습니다.

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

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

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

     

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

    즉,

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

    등을 확인해보세요.

  • @윤삼
    윤삼님 항상 시간 내어주셔서 감사합니다. 또 하나 배웠습니다! 잘 활용하겠습니다.
  • @윤삼
    톰캣님이 올려주신 위젯은 해당 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" />

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

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

    빈게시판.JPG

     

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

     

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

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

     

    도움주셔서 감사합니다.

  • @톰캣
    빈 게시판입니다. 라고 뜨는건 저기 출력되는 템플릿코드도 함께 확인이 되어야 답변이 가능할것 같네요.
  • 비밀댓글이 최신글 위젯에 노출되는 것이 아니라, 비밀로 쓴 본문글 밑에 일반 댓글을 달았는데, 그 일반 댓글이 최신글 위젯에 노출되는 것일 수도 있습니다. 논리적으로 생각하면, 본문 내용이 비밀이니까 그 댓글도 비밀여야 옳겠지만, 기술적으로는 그렇지 않을수가 있지요.

    따라서 댓글 목록을 얻은 후에 (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;

      }

      ... 

    }

     

  • @토비리

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

    토비리님의 매의 눈! 👍👍


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

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

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