어제 질문에 포함된 내용이긴 하지만 일단 비로그인시 리턴시키고 등등해서 조치는 했습니다만 궁금증이 계속 남습니다.

 

 

if($addon_info->alert_writer == 'Y' && Context::get ('logged_info')->member_srl == $oDocument->get ('member_srl')){

실행내용

}

 

제가 아무리 봐도 위 내용은 비로그인 방문자에게는 실행이 되서는 안될 듯 한데 비로그인시에는 실행이 되어 버립니다. 

단,목록에서 실행이 되어버립니다....

 

아... 글 쓰면서 지금 생각이 났네요...  $oDocument  이게 글 목록에서 가져올 수 없는 거군요,,

 

그럼 어제 목록에서 애드온이 동작되지 않도록 조치한게 제대로 한거 같네요. 비로그인자도 리턴시킨것도 맞는 조치 같구요...

 

어라.. 다시 생각하니 로그인 회원은 왜 그럼 이상이 없지요 ??  이상하다.... 로그인 회원은 목록에서도 이상없이 실행이 안되었네요.

 

 

  • profile

    다른 애드온에서 $oDocument를 선언하고 있는 게 아닐까요? 애드온에서 흔히 쓰는 변수명이라...

     

    if($addon_info->alert_writer == 'Y' && Context::get('oDocument') && Context::get('oDocument')->get('member_srl') == Context::get ('logged_info')->member_srl) {

        실행내용

    }

     

    이렇게 로컬 변수에 의존하지 말고 Context에서 직접 뽑아오도록 해보세요.

     

    Context::get('oDocument')가 존재하는지 한 번 더 체크해야 하는 이유는, 이게 없으면 그 다음에 ->get('member_srl')에서 get 함수가 존재하지 않는다며 치명적인 오류가 발생하기 때문입니다.

  • profile profile
    게시판 목록에서 위 코드가 먹지 않는다면... 위 조건으로 봐서는 실행이 안되는게 맞는데... 이상하게 목록에서 비회원에게는 실행내용이 실행되어 버렸습니다. 이해가 가지 않는 상황잉에요... && 두가지 조건이 만족해야 되는거 아닌가요 ??
  • profile profile

    목록 화면에는 $oDocument가 없으니 $oDocument->get('member_srl')이 없고
    로그인하지 않았다면 Context::get('logged_info')->member_srl도 없고
    둘다 없으니 == 조건이 먹힌 게 아닐까요?

  • profile profile

    아... 그냥

     

    없다 = 없다 이렇게 되어버린거군요! 이거네요...

    && Context::get('oDocument') 이거는 이 코드 윗단에다가 미리 적용해 버렸어요. 답변 감사해요. 이해가 쏙 되었습니다.