Extra Form
PHP PHP 7.3
CMS Rhymix

https://xe1.xpressengine.com/index.php?mid=download&package_id=22753890

 

위 블라인드 모듈을 사용하고있는데 블라인드한 회원의 글을 목록이나, 댓글에서 노출하고 싶지 않습니다

 

찾아보니 제가 원하는 기능이 있는

https://xe1.xpressengine.com/index.php?mid=download&package_id=22753510

위 애드온하고 응용해서 해보려 하는데

 

 

if($called_position == 'after_module_proc') {
        if(Context::get('document_list') && !Context::get('document_srl')) {
            $docu_list = Context::get('document_list');
            $logged_info = Context::get('logged_info');
            $blocked_list = explode(",",$logged_info->block_list);
            foreach($docu_list as $key => $val) {
                if(in_array($val->get('nick_name'), $blocked_list)) {
                    if($logged_info->except_block != "N")
                        unset($docu_list[$key]);
                    else {
                        $temp = $val;
                        $arr->title="[차단한 회원이 작성한 글입니다]";
                        $temp->variables = (array) $arr;
                        $docu_list[$key] = $temp;
                    }
                }
            }
            Context::set('document_list',$docu_list);

 

 

애드온에서는 unset($docu_list[$key]); 이부분이 목록에서 블라인드한 회원의 글 자체를 숨겨주는 기능을 하는거같아

 

 

블라인드 모듈에있는 아래 부분을 수정/응용하여

foreach($document_list as $oDocument)
            {
                if(!is_object($oDocument)) continue;
                if(!in_array($oDocument->get('member_srl'), $blind_list)) continue;
                $oDocument->add('title','블라인드 처리된 글입니다.');
                $oDocument->add('title_color','FF8D00');
                $oDocument->add('content','<span style="color:#FF8D00">블라인드 처리된 글입니다.</span>');
            }
        }

 

foreach($document_list as $oDocument)
            {
                if(!is_object($oDocument)) continue;
                if(!in_array($oDocument->get('member_srl'), $blind_list)) continue;
                unset($document_list [$oDocument]);


            }
        }

 

이렇게 해보았는데 동작하지 않는군요 ㅠㅠ 도움주시면 감사하겠습니다.

 

  • profile

    "목록이나, 댓글에서 노출하고 싶지 않"다는 건 목록에서 아예 빼는 걸 의도하시는 건가요?
    아니면 제목 및 내용을 다른 텍스트로 대체?

  • profile ?
    지금 블라인드 모듈에서는 제목 및 내용을 다른 텍스트로 대체하는데 글목록, 댓글목록에서 아예 뺴고싶습니다
  • ? profile

    그렇다면 document_list 자체를 처음부터 재정의하셔야 할 거예요. (블라인드 처리될 게시물이 리스트에서 빠져나가는 만큼) list_count, page_count도 맞추고 pagination에도 신경을 써야 할 테니까요.

    member_srls(즉, $blind_list)에 해당하지 않는 리스트만 따로 추출하는 쿼리를 짜고, 그에 따라 pagination까지 재정의하는 것도 방법이겠네요.

  • ?
    10초 댓글.
    foreach($document_list as $oDocument)
    -> foreach($document_list as $key => $oDocument)

    unset($document_list[$key]);
  • ? ?
    동작안하는군요 ㅠㅠ
  • ? ?
    10초 댓글은 무슨말씀이신가요? 10초후 내용 삭제하신건가요?
  • ? profile
    10초만에 댓글 달았다는
  • ?
    제목을 대체하는게 아니라 아예 목록에서 빼는건 간단한 작업이 아닙니다.

    그냥 추출된 목록을 단순히 안 보이게 해버리면
    20개 가 추출되었는데 5개가 블라인드 대상이면 목록이 15개만 나오는등
    목록수가 계속 가변적으로 변하는 상황이 나오죠..

    그래서 결국 위의 답변들처럼 리스트 자체를 아예 다시 추출하도록 짜야합니다.

    게다가 댓글은 Tree구조로 되어있어 아예 빼버리면 Tree 구조가 깨져서 빼기가 어렵습니다
    ( 물론 대댓글 기능을 빼버리거나하면 가능하겠지만요 )

    이게 blind 모듈을 조금 고쳐서 할 그런건 아니예요
    ( 구현을 원하시면 그냥 외주 주시는게 나으실 수도 있습니다 )

    ( 구현했던 예 : http://sejin7940.co.kr/index.php?mid=sejin7940_work&category=114585&document_srl=116763 )