https://conory.com/blog/14417
이번에는 XE 애드온 이야기를 해보겠습니다.
애드온은 XE 실행에 관여하는 존재입니다. XE는 실행완료되기전까지 여러번 애드온을 호출합니다.
왜 이런방식을 취할까요?
그것은 XE Core 수정을 필요없게 하기위함입니다.
생각해보세요.
나는 홈페이지 방문자를 알기위해 방문자의 ip기록하길원합니다. 그럼 XE를 수정해야겠지요;;
그렇게 되면 XE 업데이트시 번거로움이 발생하게됩니다. 업데이트를 덮어쓸때 마다 소스수정을 해야 됩니다.
그렇다고, 업데이트를 포기하자니, 홈페이지 보안이 걱정되고, 업데이트 하자니, 귀찮고...
그래서 "아, 사용자파일(일명 : 사용자 정의파일)을 만들어서 XE실행시 사용자가 만든 파일을 불려오자!"라고 생각해냅니다.
"그러면 그 파일만 수정하면 되고, 왜냐면 XE에서 그 파일을 불려오니까! 파일도 자동으로 실행될꺼고.."
이 생각을 보완해서 체계적으로 만든 게 바로 "애드온"입니다.
애드온이 사는 방법!!
애드온은 마치 사용자 정의파일이라고 생각하면 됩니다. 그걸 관리자페이지에서 동작하도록 설정하면 그때부터 사용자가 만든 소스코드가 XE실행에 적용되지요..
위에서 애드온은 XE실행중에 여러번 호출된다고 했습니다.
그 이유는 무엇일까요? 바로 영향을 끼치는 부분을 다르게 하기위해서입니다.
이전강좌를 보신분은 아시겠지만, XE실행은 8단계까지 입니다. 많이 길어요..
그 긴 실행과정에서 애드온을 딱한번 호출한다면 어느 단계에서 애드온을 호출해야될까요?
예를 들어 모듈실행전 단계에서 호출하면 모듈실행에 영향을 끼칠 수 있습니다. (모듈실행을 막을 수도 있습니다.)
그러나 모듈실행후 단계에서 호출하면 모듈실행에는 영향을 끼칠 수는 없지만, 모듈 실행 결과물을 조작할 수 있습니다.
그래서 XE실행중에 여러번 호출됩니다.
어느단계에서 호출하는 지 알아야하기에 "called_position"변수로 호출되는 위치가 어딘지 표시합니다. (애드온 파일에서"called_position"변수로 확인가능 )
- $called_position == 'before_module_init' : 모듈검색 전 호출
현재 실행모듈과 관계없는 처리를 할 수 있습니다.
실행모듈에 대한 권한체크전이기에 잘못된 접근만 아니면 100% 실행됩니다.
예를 들어 카운터 기록이나 캡챠체크하여 접근을 막을 할 수 있습니다.
- $called_position == 'before_module_proc' : 모듈실행 전 호출
현재 실행모듈에 대한 값체크후 모듈실행을 하지않고 에러를 출력할 수 있습니다.
예를 들어 게시글 삭제시 댓글이 있는 지 없는지 체크후 있다면 삭제실행을 막을 수 있습니다.
- $called_position == 'after_module_proc' : 모듈실행 후 호출
모듈실행을 완료하고, 그 결과물을 조작할 수 있습니다.
예를 들어 임시로 게시물내용을 다른내용으로 바꾼다거나 임시로 게시판에 확장변수를 추가할 수 있습니다. (실제로는 변경되지않았지만)
- $called_position == 'before_display_content' : 결과물출력 전 호출
"$output"변수로 최종결과물을 조작할 수 있습니다.
예를 들면 $output에 출력될 최종결과물이 담겨있기에 치환함수를 써서 "$output = str_replace("NAVER", "CONORY", $output);"로 하면 출력시 "NAVER"란 단어가 있으면 전부 "CONORY"로 바뀝니다.