1. 애드온에서 html 불러오기
Context::addHtmlFooter(sprintf(file_get_contents($this_addon_path.'eondGrayScreen.html')));
애드온에서 html 을 푸터에 이런 식으로 불러와봤습니다. (여기까진 잘한 거 맞나요?;;)
2. 불러온 eondGrayScreen.html에서
<load target="./lang/" />
{$lang->convert} {Context::getLang('convert')}
이런 식으로 써줘봤지만 그냥 그대로 출력이 되더라구요.
애드온에서 html 을 불러와서 사용할 경우 XE의 php코드가 동작하는 방식인 {...} 가 동작하지 않는 것 같았습니다.
이렇게 할 경우는 해당 코드가 동작하지 않나요?
3. 그래서 그냥 addon.php 파일에서 그대로 html을 작성함.
Context::loadLang($this_addon_path.'lang');
Context::addHtmlFooter(sprintf('<div class="eondGrayScreen"><button class="btn-eondGrayScreen">'.Context::getLang("convert").'</button></div>'));
그냥 이런 식으로 lang 파일을 추가하고, Context:getLang() 으로 불러오긴 했습니다만...
2의 방법은 영 잘못된 건가요?
4. 그리고 애드온에서
$addon_path 라는 변수를 사용할 경우, 오류가 발생하더라구요. -_-;;
html 파일 내용을 불러와서 어떠한 변환도 거치지 않고 그대로 출력하라고 명령을 내렸으니, 컴퓨터는 명령대로 따를 뿐이지요. (1번에서 sprintf는 왜 들어갔는지 모르겠지만...) XE 문법을 변환하려면 반드시 XE에서 제공하는 TemplateHandler를 거쳐야 합니다.
lang을 로딩할 때는 굳이 html에 의존하지 않고 Context::loadLang()을 직접 호출하는 것이 좋긴 합니다. 그러면 html뿐 아니라 애드온 자체에서도 자유롭게 사용할 수 있으니까요. 그리고 어차피 한 줄짜리라면 굳이 TemplateHandler를 거치는 것보다 그냥 저렇게 쓰는 것이 빠릅니다. 저 정도 기능이라면 저라도 3번처럼 구현하겠어요.
$addon_path는 원래 없는 변수입니다. 절대경로가 필요하면 __DIR__ 상수를 쓰면 되고, 상대경로가 필요하면 애드온 만든 사람이 자기 애드온 경로를 제일 잘 알 테니 (./addons/애드온이름) 변수가 필요하지 않지요.