XETOWN

물어보기

특정게시판에서만 (묻고답하기)

 

글작성 시 쿼리를 돌려 이 회원이 서명에 아무것도 입력하지 않은 회원인지 확인해서 입력 안했다면...

 

너 서명좀 입력해줄래! 정말....!

 

이라고 알럿을 띄워주고 글 작성은 안되고 리턴되게 가능할까요... 

 

 

 

질문시 굉장히 참조가 될만한 사항 그리고 커뮤니티 회원들끼리 가장 궁금해하는 내용을 서명에 넣도록 하는 관례가 만들어진 사이트에요 ㅡㅡ;

  • profile
    기진곰 2016.12.13 14:48:35

    현재 로그인된 회원의 서명을 가져오는 코드:
    $signature = getModel('member')->getSignature(Context::get('logged_info')->member_srl);

    회원정보 수정시 서명을 입력하지 않으면 공백이나 빈 태그만 들어갈 수도 있으므로
    아래의 코드를 사용해서 공백과 태그를 지워줍니다.
    $signature = trim(strip_tags($signature));

    여기서 $signature에 내용이 없으면 빠꾸~
    if(Context::get('mid') == 묻고답하기게시판mid && !$signature)
    {
        return new Object(-1, '서명입력하셈!!!!도대체몇번을말해야알아듣나!!!');
    }

  • profile
    웹지기 2016.12.13 14:53:13
    감사합니다. 나가려던 멘탈 일단 다시 잡아와서 정신차리고 해보겠습니다 ㅡㅡ;
  • profile
    웹지기 2016.12.13 15:16:58
    애드온으로 만들었는데요. 그냥 통과과 되어버리네요. 그냥 다른 애드온 다 지우고 위 코드만 넣어서 뭐가 빠졌나 보네요.

    if(in_array($called_position, array('before_module_init', 'after_module_proc')))
    {
    $signature = getModel('member')->getSignature(Context::get('logged_info')->member_srl);
    $signature = trim(strip_tags($signature));
    if(!$signature)
    {
    return new Object(-1, '회원정보 서명입력란에 함께하는 반려견 정보를 입력하셔야 글 작성이 가능합니다!');
    }

    }
  • profile
    기진곰 2016.12.13 15:24:48
    아, 애드온이라면 얘기가 달라져요. return new Object는 모듈 소스를 직접 수정하실 때 쓰는 거고요, 애드온이라면 별도 파일로 인클루드되기 때문에 return이 무의미해집니다.

    before_module_proc 시점에서 $this->stop('에러메시지'); 해보세요.
  • profile
    웹지기 2016.12.13 15:37:15

    if(in_array($called_position, array('before_module_init', 'after_module_proc')))
    {
    $signature = getModel('member')->getSignature(Context::get('logged_info')->member_srl);
    $signature = trim(strip_tags($signature));
    if(!$signature)
    {
    if(in_array($act, array('procBoardInsertDocument', 'procBoardInsertDocumentBydocument_srl')) && $called_position == 'before_module_init')
    {

    $this->stop_proc = TRUE;
    $this->stop($error_message);
    }
    }

    }

    요렇게 고쳐봐쓴데 그냥 통과네요... 뭐가 빠졌나봐요..

  • profile
    기진곰 2016.12.13 15:46:06
    before_module_init에서는 stop이 먹히지 않고, after_module_proc은 이미 늦었어요.
    before_module_proc에서 잡아야 합니다.

    stop만으로 먹히지 않는다면 $this->act = '무의미한 랜덤 문자열'; 이것도 추가해 보세요.
  • profile
    웹지기 2016.12.13 15:58:02

    감사합니다. 아래로 해서 일단 막아지기는 했는데 다른 애드온에서 작성된 코드를 참조하다보니 그 애드온과 비슷하게 다른 애드온의 경고창도 같이 뜨게 되는데 포지션 차이인가요??

    아이고.,.....   모바일에서는 왜 안막히는거지.....  모바일은 또 통과가 되네요.. 이런....



    if(in_array($called_position, array('before_module_init', 'after_module_proc')))
    {
    $signature = getModel('member')->getSignature(Context::get('logged_info')->member_srl);
    $signature = trim(strip_tags($signature));
    if(!$signature)
    {
    if (in_array($act, array('dispBoardWrite', 'dispBoardWriteBydocument_srl')) && $called_position == 'after_module_proc')
    {
    $this->act = 'true';
    $this->stop('문구!');
    }
    }

    }

  • profile
    기진곰 2016.12.13 16:10:06
    포지션이 틀리다니까요. 여전히 before_module_init, after_module_proc으로 되어 있잖아요.
  • profile
    웹지기 2016.12.13 16:11:10
    아.. 모바일은 착각인듯 해요... 제가 코드 변경 후 모바일만 안되는것으로 봤네요.
    일단 위 코드로 되긴 하는데 다른 애드온에서 띄우는 팝업까지는 같이 뜨는데 에디터는 안뜨고 메시지창은 떠서 막는거 까지는 정상적으로 되었습니다.
  • profile
    웹지기 2016.12.13 16:17:01
    와우.. 무슨 말씀인지 이해되었습니다. 그렇게 하니 한단계 전에 차단해서 다른 애드온이 동작하는 시점보다 앞에서 차단되네요. 감사합니다!!!!
  • profile
    기진곰 2016.12.13 16:19:18
    잘 된다니 다행이네요.

    위의 코드를 보면 서명 체크를 먼저 하고 그 다음에 act 체크를 하도록 되어 있는데, 이렇게 하면 글쓰기와 관련없는 act에서도 불필요하게 서명을 체크하게 됩니다. act 체크를 먼저 하고 그 다음에 서명 체크를 하도록 바꿔보세요.
  • profile
    웹지기 2016.12.13 16:21:03
    네. 감사합니다. 그부분까지 바꿔볼게요~
  • profile
    웹지기 2016.12.13 16:26:24
    위쪽에 조건이 불필요한거 같아서 밑에 조건에 서명체크부분을 넣어서 해보니 잘 되네요. 포지션을 먼저 글쓰기로 체크했으니 다른부분에서는 서명을 불러오는 부하는 없을 듯 합니다. 조언 감사합니다.
  • profile
    웹지기 2016.12.13 16:27:39
    다음 작업은 메시지창이 맘에 안들어 메시지 템플릿을 하나 만들어 회원정보 수정으로 보내던지 해야겠습니다 ㅋㅋ

    PC에서는 로그인, 모바일에서는 로그아웃 하라고 하네요 ㅋ
  • profile
    웹지기 2016.12.18 20:27:14
    기지곰님 $this->act = '무의미한 랜덤 문자열';

    이부분을

    $this->act = 'true';
    $this->stop('문구!')

    이것으로해서 해결을한 것으로 알고 있었고 실제 php7 이 아닌 경우 잘 되는데 php7에서 테스트해보니 그냥 통과가 되어 버리네요. 혹시 다른 방법이 있을까요??
  • profile
    기진곰 2016.12.18 21:00:51
    전체 소스를 보지 않으면 모르겠네요. 자료실에서 내리셨던데 혹시 애드온을 메일로 보내주실 수 있을까요?
  • profile
    웹지기 2016.12.18 21:02:19
    아.. 해당부분이 아니고 그 위쪽에 조건이 php7에서는 적용이 안되는 문법인가 보네요. 더 해보고 해결 못하면 다시 도움 부탁드릴게요.
  • profile
    웹지기 2016.12.18 21:51:09
    같이 공개했던 다른 애드온 때문에 메일 하나 드렸습니다. 귀찮게 해드려서 죄송해요~
  • ?
    라그릿 2016.12.13 16:41:25
    ... 위에 대화를 읽어본다.
    다시 읽어본다.
    한번 더 읽어본다.

    이해 불가능.. 젠장!
  • profile
    웹지기 2016.12.13 16:57:07
    일단 다른 애드온을 먼저 열어서 본다음... 계속 보고 또 보고.. 보다 보면... 수정이 필요한경우 수정이 가능해지고... 뭐 그래요... 저도 개발자가 아니라 그냥 다른 애드온 그대로 놓고 필요 없는거 다 지우고 컨닝하다 안되서 질문 올려 댓글 보고 완성한거에요.
  • ?
    라그릿 2016.12.13 17:00:59
    저도 구글 애드센스 필터 애드온을 뜯고 다른걸 참고해서 수정수정해봤지만..
    위 대화는 뭔가를 만드는 대화..ㅎㄷㄷ.. 저에겐 아직 미지의 길..

    수정과는 달라보여양 ㅠㅠ

서버에 요청 중입니다. 잠시만 기다려 주십시오...