묻고답하기
Context::loadFile() 과 Context::unloadFile() 문제
2012.01.27 16:14
안녕하세요?
초보가 질문 올려봅니다.
몇가지 이슈는 확인했는데,
거의 대부분 템플릿 문법상의 <load />와 <unload />에 대한 것 뿐이라서요..
애드온 제작시에 참고 하려고 합니다.
Context::loadFile()과 unloadFile() 모두 잘 동작합니다만..
XE common 폴더 쪽의 파일들을 unload할수가 없네요...
예를들어, 기본적으로 로드되는 jquery 파일을 unload 하고 싶은데요 ㅠㅠ
혹시 아시는 분 계신가요?
댓글 7
-
misol
2012.01.27 19:22
-
능소니
2012.01.28 11:28
미솔님 답변 감사합니다~
공부삼아 그런 기능을 제공하는 애드온을 만들어 보려고 했거든요! ^^
미솔님이 만드신 jQuery 외부 로딩 애드온을 까보고 꼼꼼히 봤는데 제가 초보인지라
잘 이해가 안되더라구요 ㅎㅎ
미솔님이 만드신것은 1.5.x 코어에서는 안되는거죠?
XE 공식사이트에서 제공하는 개발자 매뉴얼이나,
다른 고수분들이 올려놓은 튜토리얼 형식의 강좌를 따라해보아도
저같은 초보에게는 참 어렵군요 ㅠㅠ
그래도 매일 조금씩 배워가니 너무 재미있습니다~ ㅎㅎ
-
misol
2012.01.28 20:14
jQuery 외부로드 애드온에서 사용하는 방식은 사용 가능한데, 문구가 바뀌어서 조금 손을 봐야 원하는 기능을 할 겁니다 :)
화이팅!!
언제든지 연락 주시면, 도움 드릴 수 있는건 도움 드릴게요 ^^;
-
능소니
2012.01.28 11:45
아 추가로..
미솔님이 만드신것 보다가 이해 안되는 부분이,
저같은 경우 1.5.1 코어인데요
before_display_content 단계에서
$output에는 컨덴츠 부분에 표시되는 내용만 들어있던데
그건 1.4 버전과 1.5 버전대의 차이점인가봐요
-
misol
2012.01.28 20:17
1.4나 1.5 동일하게, 출력할 내용물이 담겨있습니다 :)
모듈 처리 이후 전체 페이지가 처리된 다음 순서를 얻기 위해서 jQuery 외부 로드 애드온에서는 $output 을 읽어오는 순서를 조금 바꿨어요 ^^;; (Context::set으로 저장해두었다가 나중에 불러오는식으로...)
글로 쓰려니 뭐라고 써야 할지 잘 모르겠네요;;;ㅎㅎ
좀 부끄럽네요 ㅎㅎ
-
능소니
2012.01.29 01:11
부끄럽다니요!! 말도 안됩니다 ㅎ 엄청 자랑스러운거 아닌가요? ㅎㅎ
어쨋든.. 제가 너무 귀찮게 하는군요 ^^;
학생에게 가르치신다 생각하고 알려주시면 그 은혜 각골난망 하겠습니다.
그럼, 질문 올리겠습니다.
원래 $output - 출력할 내용물이 <body></body> 안에 들어가는 그 내용물 맞지요?
모듈처리 이후 전체페이지가 처리된 다음 순서가 before_display_content 아닌가요?
$output 읽어오는 순서를 바꾸셨다는 의미가,
원래 $output 안에는 xe 컨텐츠 영역에 들어가는 내용만 들어있는것을
페이지 전체 내용으로 넣으셨다는 의미죠?
만드신 애드온의 handler.php 내용중,
분명 $output 내용 안에서 str_replace를 이용하는 의미를 이해할 수 있는데요..
저는 아무리 살펴봐도 $output 안에 <head> 부분이 없거든요 ㅠㅠ
혹시,
$soo_handler = Context::get('soo_jquery_unload_handler');
if(method_exists($soo_handler, "prepareToPrint")) $soo_handler->prepareToPrint($output);
이 부분이 핵심인가요???
추가로... 초보적인 질문 하나만 더;;
prepareToPrint(&$output) 여기에서 '&' 의 의미가 무엇입니까?
죄송하고 또 감사합니다 꾸벅~
-
misol
2012.01.29 23:27
http://www.xpressengine.com/20465848 관련 답 드립니다.
게시판 관리 규칙이 있으니, 묻고 답하기 게시판으로 이동하였습니다.
답은 드릴게요 ^^;;
원래 before_display_content 에서 $output 에 들어있는 내용은, 말씀 하신 내용대로, 본문 내용만(모듈에서 처리한 본문 내용) 들어있습니다. 그런데, ./classes/display/DisplayHandler.class.php 내용 중에 보시면,
$called_position = 'before_display_content';
로 시작해서 애드온 불러오는 내용이 있고, 그 다음에
if(method_exists($handler, "prepareToPrint")) $handler->prepareToPrint($output);
라는 부분이 있습니다. 이 부분에서, 전체 페이지(HTML 완성본)이 만들어집니다.
그래서, if(method_exists($handler, "prepareToPrint")) $handler->prepareToPrint($output); 가 처리된 다음에, 애드온이 처리되면, 완성된 HTML 페이지의 내용 전체를 얻어올 수 있습니다.
이 처리 순서를 얻기 위해서, $handler를 애드온에서 임의로 생성한 클래스로 치환하고, 그 클래스에서 원래 XE Core가 불러 오려 의도했던 핸들러 클래스를 불러오는 식으로 꼼수를 부렸습니다. 그렇게 하면, 애드온이 임의로 생성한 클래스를 XE Core가 읽어오고, 애드온의 임의 클래스가 XE Core의 핸들러 클래스를 불러와서 처리 한 다음, 완성된 HTML 완성 페이지가 나옵니다. 여기서 $output 값을 얻을 수 있고, 여기서 <head></head> 내용을 문자열 치환으로 변형하면, <body> 밖의 내용도 변경할 수 있게 됩니다.
충분한 설명이 되었는지요?..
-
능소니
2012.01.30 01:51
충분하고말고요!! 정말 감사합니다! 덕분에 많이 배웠습니다 ^^
애드온으로는 제거 가능합니다만, 그런 기능을 제공하는 애드온은 공식 자료실에는 없습니다 ㅠㅎㅎ 필요하시면 만들어 드릴게요 ㅎㅎ XE 코어 버전만 알려주세요 ㅋ