XpressEngine

[기초] XE구조의 비밀 그 네번째 - 애드온은 살아있어...

이번에는 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"로 바뀝니다.


  • ?
    날아라 2014.02.23 20:45:54
    명강의 잘 보고 있습니다. 너무감사해요 !
    아쉬운점이 있다면 각 호출지점별로
    어떠한 쓰임새가 있는지를 잘 알수가 없어서
    아쉬움이 남네요..
  • profile
    CONORY 2014.02.24 17:13:42
    간단하게 설명을 넣었어요..
  • ?
    날아라 2014.02.24 17:23:32
    와.. 이해가 쏙쏙 됩니다!! 감사합니다!!
  • ?
    다이오니 2015.02.02 01:11:20
    애드온의 쓰임새가 이렇군요. 레이아웃 파일을 수정해서 커스텀으로 사용하는데 매번 업데이트 될 때 마다 같이 수정하는게 불편하더군요. 그런 부분을 애드온으로 해결하네요.
?

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