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 라는 변수를 사용할 경우, 오류가 발생하더라구요. -_-;;

 

  • Lv36

    html 파일 내용을 불러와서 어떠한 변환도 거치지 않고 그대로 출력하라고 명령을 내렸으니, 컴퓨터는 명령대로 따를 뿐이지요. (1번에서 sprintf는 왜 들어갔는지 모르겠지만...) XE 문법을 변환하려면 반드시 XE에서 제공하는 TemplateHandler를 거쳐야 합니다.

    lang을 로딩할 때는 굳이 html에 의존하지 않고 Context::loadLang()을 직접 호출하는 것이 좋긴 합니다. 그러면 html뿐 아니라 애드온 자체에서도 자유롭게 사용할 수 있으니까요. 그리고 어차피 한 줄짜리라면 굳이 TemplateHandler를 거치는 것보다 그냥 저렇게 쓰는 것이 빠릅니다. 저 정도 기능이라면 저라도 3번처럼 구현하겠어요.

     

    $addon_path는 원래 없는 변수입니다. 절대경로가 필요하면 __DIR__ 상수를 쓰면 되고, 상대경로가 필요하면 애드온 만든 사람이 자기 애드온 경로를 제일 잘 알 테니 (./addons/애드온이름) 변수가 필요하지 않지요.

  • Lv36 Lv15
    sprintf 는 빼면 안되는거 같길래. 넣어둔 건데 빼도 잘 동작했네요;
    경로가 길어서 여러번 써주기가 번거로워서 그랬습니다.;;
    lang은 html이 아닌 애드온에서 직접 불러오는 걸로!;
    TemplateHandler 방법은 잘 모르겠지만. 일단 짧게는 저 정도로 마무리하는 걸로 ㅠ;
    사용자마다 스킨을 나중에 사용할 수 있게 해볼려고 했는데 이 정도로 해야겠습니다.
    ----------------------------------------------------------------------------------------------
    <?php
    /**
    * @file eondGrayScreen.addon.php
    * @brief 화면흑백전환애드온
    * @author 이온디([email protected])
    */
    if(!defined('__XE__'))
    exit();
    if($called_position=="before_display_content")
    {
    // execute addon (before module initialization)
    // $oAddonController = &getController('addon');
    // $addon_file = $oAddonController->getCacheFilePath(Mobile::isFromMobilePhone()?'mobile':'pc');
    // @include($addon_file);

    // $message = $position.'\n'.'Module : '.$this->module.'\n'.'Mid : '.$this->mid.'\n'.'Act : '.$this->act.'\n'.'Module_srl : '.$this->module_srl.'\n'.'Document_srl : '.$this->document_srl;
    // $script = sprintf('<script type="text/javascript"> xAddEventListener(window,"load", function() { alert("%s"); } );</script>', $message);

    // $called_position = 'Before_display_content now runs.';




    // Context::addHtmlFooter(sprintf(file_get_contents($this_addon_path.'eondGrayScreen.html')));
    //

    $path_addon = './addons/eondGrayScreen/assets/';
    Context::loadLang($path_addon.'lang');
    Context::addCSSFile($path_addon.'eondGrayScreen.css');
    Context::loadFile(array($path_addon.'eondGrayScreen.js', 'body', '', null), true);
    Context::loadFile(array('//cdn.rawgit.com/carhartl/jquery-cookie/master/src/jquery.cookie.js', 'body', '', null), true);
    Context::addHtmlFooter('<div class="eondGrayScreen"><button class="btn-eondGrayScreen">'.Context::getLang("conversion").'</button></div>');
    }
  • Lv19
    오 이것은..! 기대되는 애드온이네요.
  • Lv19 Lv15

    언어별로 기본적으로 동작하는 거고
    HTML 코드를 기본적으로 출력하고,
    CSS랑 JS를 같이 출력해주니깐...
    왠만한 건 이런 식으로 만들 수가..^^;

     

    또 해보고 싶은게..

    HTML, CSS도 사용자가 추가할 경우 그게 선 적용되도록 하고..