Extra Form
PHP PHP 7.0
CMS Rhymix 2.x

제가 배포했던 심플 멜로우와 멜로우 스킨에서 오류가 발생하고 있습니다.

라이믹스를 쓰지 않아서 오류가 나는지도 몰랐는데, 어떤 사용자 분이 댓글을 남겨주셔서 알게 됐습니다.

자체 테스트 결과 1.9까지는 무리없이 동작하는데 2.0에서 문제가 발생하네요.

댓글 출력 부분 자체에서 오류가 나는 것 같습니다.

스킨 파일에서 확인해보니 111번째 줄이 아예 없네요.

개발자가 아니라서 어떻게 고쳐야 할지 모르겠습니다.

 

오류 메시지는 다음과 같습니다. 

서버 오류
ParseError #0 "syntax error, unexpected end of file" in modules/board/skins/ena_board_set_simplemellow/_comment_guestbook.html on line 111

  • profile

    XE 템플릿 문법을 컴파일하는 과정에서 줄번호가 조금씩 달라질 수 있습니다. 그러나 unexpected end of file 오류는 항상 파일 맨 끝에서 발생하므로, 전체 줄 수와 대략 비슷하다면 정확한 위치를 찾으실 필요는 없습니다.

     

    이 오류는 따옴표나 중괄호의 짝이 맞지 않아서 발생하는 경우가 많습니다. 여는 괄호는 있는데 닫는 괄호가 안 보인다, 파일 끝까지 다 찾아봤지만 못 찾겠다 꾀꼬리! 라는 뜻이니까요. 라이믹스는 템플릿 문법을 변환한 결과를 files/cache/template/원본파일경로.html.php와 같이 예측하기 쉬운 경로에 저장하도록 되어 있으니, 그 파일을 직접 열어서 어느 부분이 잘못 해석되었는지 확인하시는 것이 가장 빠를 것 같네요.

  • profile ?
    정성스러운 댓글 감사합니다!
  • profile ?

    해당 파일을 확인해서 }가 세 개 부족하다는 사실을 확인했는데, 전 cond문을 주로 사용해서 코드를 어떻게 수정해야 될지 모르겠습니다.

  • ? profile

    XE 템플릿 문법 중 가장 골치아픈 것이 태그를 통째로 보여주거나 숨기는 데 사용하는 cond문입니다. 태그에다가 <div cond="조건"> 이렇게 해놓으면 내부적으로 if(조건) { 문으로 바꿔주게 되는데요, 중괄호를 } 닫으려면 저 <div> 태그가 어디에서 닫히는지 알아야 하잖아요? 나름 가능성이 높아 보이는 </div>를 하나 찾아서 거기에 중괄호를 붙여주게 되는데요, 이게 정확하지 않은 경우가 종종 있습니다. 특히 <div>와 </div> 사이에 템플릿 문법이나 PHP 코드를 많이 사용한 경우 헷갈리기 딱 좋지요. 관련 소스를 아주 조금만 건드려도 난리가 나버립니다. ㅠ

    루프를 돌릴 때 사용하는 loop 속성도 마찬가지입니다. 루프가 끝나는 지점을 찾는 로직이 완전 주먹구구식이거든요. 게다가 loop 속성은 HTML5 <audio>, <video> 태그에서도 사용되므로 멀쩡한 소스를 잘못 해석할 가능성도 무척 높습니다. 너무 문제가 많아서 다음에 도입하는 v2 템플릿 엔진에서는 이 두 가지 속성을 지원하지 않을 예정입니다.

    cond로 되어 있는 부분 중 안에 내용이 많거나 PHP 코드가 많이 들어 있는 것들부터 우선 <!--@if()--><!--@end--> 문법으로 변경해 보시면 도움이 될 것 같습니다.

    ※ 특정 속성만 켰다 껐다 할 수 있는 class="클래스"|cond="조건" 문법은 거의 문제가 되지 않습니다. 이건 얼마든지 사용하셔도 무방합니다.