예전에 @웹지기 님이 언급하셨던 executeQuery 사용법 문의글 https://xetown.com/qna/727523 을 통해서 executeQuery 알게 되었습니다.

 

애드온에서 디비를 직접 제어할 수 있는 것이 매우 매력적인데요.

보통 애드온에서는 실행하는 과정에서 executeQuery를 실행하는데요.

 

애드온에서 버튼을 하나 만들고 onclick 이벤트로 애드온의 executeQuery 를 실행할 수 있는지가 궁금합니다.

버튼을 통해서 특정 상황에서만 이벤트를 발생하고 싶거든요.

 

제가 해본 방식은 이런 형태인데 이부분이 해결이 안되어서 도움을 요청드립니다.

 

$end_text_button = '<div style="margin:10px; padding:30px 10px 30px 10px; text-align:center; background-color:#EFEFEF;"><a href="javascript:void(0)" onclick="executeQuery("addons.abc_end_button.updateDocumentExtra", $args)">완료 / 종료 시키기</a></div>';

 

$output = str_replace("<!--BeforeDocument(", $end_text_button."<!--BeforeDocument(", $output);

 

 

  • Lv37

    웹에서 특정 쿼리를 직접 실행할 수는 없습니다.

    만약 가능하다면 아무나 글쓰기, 글삭제 등의 쿼리를 실행할 수 있게 되어 심각한 보안문제가 일어나겠죠?

     

    웹에서 뭔가를 클릭했을 때 (예: 추천, 비추천, 신고) DB와 연동시키려면

    우선 XE의 exec_xml, exec_json 함수가 모듈만 지원하므로 애드온이 아니라 모듈이어야 하고,

    모듈에서는 지금 클릭한 사람이 해당 작업을 수행할 권한이 있는지 체크한 후 (예: 중복 클릭이라거나...)

    쿼리를 실행하거나 에러메시지를 출력하거나 합니다.

  • Lv37
    답변 감사합니다.

    이 글을 보니, 말씀하신데로 ducument 모듈에서 지원하는 insertDocumentExtraVar 함수가 있는 것 같은데 이걸로 해봐야 겠네요.

    https://xe1.xpressengine.com/qna/21620483
  • Lv37 Lv30
    코알못이 댓글 답니다 ㅋ 근데 애드온등에서도 해당 함수등을 사용해서 클릭시 쿼리 실행하고 하지 않나요?? 제가 사용해 본 애드온 중에는 후원도우미 애드온이 그러한 방식 이었던 것 같습니다.
    게시글에 버튼이 노출되고 버튼을 누르면 입금했던 이름을 넣고 클릭하면 해당 정보가 기록되는 쿼리실행..

    후원도우미 애드온은 여기 XE타운에서도 사용되고 있겠군요...
  • Lv37
    아. insertDocumentExtraVar를 사용할 수 있다고 하더라도 onclick 이벤트를 적용할 수 있느냐는 별도의 문제인건가요?
  • Lv30 Lv37
    클릭시 애드온이 실행되도록 만든 것은 일단 아무거나 요청을 넣고 그걸 애드온에서 가로채는 형태인데요, 조심해서 구현하지 않으면 엉뚱한 데 끼어들어 사이트를 불안정하게 만들거나 서버에 무리를 줄 수도 있기 때문에 특별히 권장하고 싶지는 않습니다. 애드온이라는 녀석은 자기가 끼어들 필요가 없더라도 매 요청마다 무조건 4번씩 실행되니까요.
  • Lv37
    네, 코어 모듈에서 제공하는 함수라도 보안상 외부에서 접근할 수 없도록 해둔 것이 많습니다. 제대로 체크하지 않으면 남의 글에 확장변수를 마구 추가하는 등의 부작용이 생길 수 있으니까요.
  • Lv30
    저도 요즘 코딩 배워가면서 하는거라 생소한게 너무 많습니다. ㅎㅎ
    XE는 또 새로 배워야 하는게 많기도하구요..
    저도 후원도우미 애드온을 사용중인데 제가 이해할 수 있는 수준이 아니더군요. ㅠㅠ
  • Lv37
    네 그럴 수 있겠군요.
  • Lv30
    아.. 그 자료 가지고 계시면 잘 뜯어보세요. 원하시는 버튼은 tpl 폴더에 html로 만들고 애드온 php에서 출력한다음...

    클릭 이벤트 같은건 js로 처리하는 거 같더라구요.
    그리고 처리되는 과정은 기진곰님이 말씀하신 함수 같은 것을 사용한 것으로 보여요.

    그러나 코알못이 봤을때는 그냥 코드이더군요 ㅋㅋㅋ
  • Lv30
    제가 그 수준입니다. ㅎㅎ
    @웹지기 님이 더보다 더 고수이신 것 같아요. ^^