https://moonhouse.co.kr/qa

상기 게시판스킨을 만들면서 아이콘들의 이미지들을 아래와 같이 <img src="{$tpl_path}img로 설정을 해서 사용을 했었는데

2.1.8로 업데이트후 연결이 안되네요.

2.1.7 까지는 잘 작동했었는데...

 

<a cond="$document->getCommentCount()" href="{getUrl('document_srl', $document->document_srl)}#{$document->document_srl}_comment" class="color line_right" title="{$lang->comment}"><img src="{$tpl_path}img/chat-1-line.svg"> {$document->getCommentCount()}<span class="irt">Replies</span></a>
<span cond="$document->get('voted_count')!=0" class="color line_right"><img src="{$tpl_path}img/heart-2-line.svg"> {$document->get('voted_count')!=0?$document->get('voted_count'):'0'}<span class="irt">Likes</span></span>
<span cond="$document->get('readed_count')>0" class="color"><img src="{$tpl_path}img/registered-line.svg"> {$document->get('readed_count')>0?$document->get('readed_count'):'0'}<span class="irt">Views</span></span>

Screenshot 2023-10-27 at 14.07.16.jpg

 

아울러 아래의 코드도 연결이 안됩니다.

{@
$nickBgPath = "$tpl_path/nick_bg_img.php";
include_once($nickBgPath);
$oNickBgUtil = new nickBgUtil();
}

 

style="background:url('{$tpl_path}img/{$oNickBgUtil->getNickBgColor($document->getNickName())}') 2px 2px no-repeat; width:45px; height:45px; border-radius:50px; border:1px solid #fff; font-size:12px; color:#fff; text-shadow:1px 1px 0 #444,1px 1px 0 #222; font-weight:bold;"

  • profile

    현재 파일이 있는 경로를 가리키기 위해 $tpl_path를 사용하셨다면
    그냥 삭제하고 상대경로만 써도 정상 작동할 것입니다.

    <img src="img/foobar.jpg" />

     

    인클루드도 아래와 같이 상대경로로 대체해 보세요.

    클래스가 존재하지 않는다는 조건을 붙여서 include_once처럼 구현할 수 있습니다.
    <include target="nick_bg_img.php" cond="!class_exists('nickBgUtil')" />

    그런데 이미지 경로에 $tpl_path가 들어가는 것은 이상하네요.

    $tpl_path는 서버단의 절대경로가 담겨 있는 변수여서,

    /home/호스팅계정명/public_html/modules/aaa/bbb/img/foobar.jpg

    이런 식으로 들어가 버리거든요. 웹에서 저런 경로로 이미지에 접근할 수는 없는데...

    아무튼 하위호환성 이슈로 취급하고 해결 방법을 찾아보겠습니다.

    템플릿 엔진 관련하여 상당히 큰 리팩토링이 있었기 때문에

    어느 정도 마이너한 이슈는 예상하고 있고, 신속하게 패치하여 업데이트할 예정입니다.

  • profile

    develop에서 패치했습니다.

    단, 위에 말씀드렸듯이 서버단의 절대경로를 출력하는 변수인데
    실제로 그런 경로에서 이미지가 로딩된다면
    어딘가 다른 곳에서 상대경로로 다시 변환해 주는 기능에 의존하고 있거나,
    서버단의 경로가 외부에 노출되고 있을 가능성이 있으니 점검해 보시기 바랍니다.

    레이아웃이나 스킨을 독립적으로 배포할 수 있는 XE와 라이믹스의 구조상,
    아주 초창기부터 대부분의 경로는 해당 레이아웃이나 스킨 폴더 내부의
    상대경로만 사용해도 지장이 없도록 설계되어 있습니다.

    절대경로인 $tpl_path를 저렇게 활용할 거라고는 생각하지 못해서,
    이번에 리팩토링하면서 빠뜨린 모양이네요.

  • profile ?
    감사합니다.
  • ?

    develop 버전의 common/framework/Template.php 파일로 교체하니 잘 작동합니다.
    감사합니다.