질문/조언질답게시판
Extra Form
PHP PHP 7.0
CMS XpressEngine

레이아웃 제작중 layout.html 파일 상단에

 

{@

  $identifierForm = new stdClass();
  $identifierForm->title = $lang->{$member_config->identifier};
  $identifierForm->value = $member_info->{$member_config->identifier};
  $identifierForm->name = $member_config->identifier;
  Context::set('identifierForm', $identifierForm);
}
 
이렇게 작성하였는데..
 
$identifierForm->title = $lang->{$member_config->identifier};
$identifierForm->value = $member_info->{$member_config->identifier};
 
이 두 줄에서
PHP Parse error:  syntax error, unexpected '?>' in /home/test/xe/classes/template/TemplateHandler.class.php(436) : eval()'d code on line 14
오류가 납니다..ㅠㅜ
 
며칠째 이 오류를 잡지 못하고 있습니다..
혹시 해결방법을 알고있는 분이 계신지요..
  • profile

    {@ ... } 안에서 { } 를 또 사용할 수 없습니다. 이것은 XE 템플릿 문법의 근본적인 한계이고, XE와의 호환성을 유지하는 라이믹스도 마찬가지입니다.

     

    굳이 저런 식으로 참조해야 한다면

        $identifierForm->title = lang($member_config->identifier);

    이렇게 $lang 대신 라이믹스에서 지원하는 lang() 함수를 활용하고 (XE에는 Context::getLang()이 있습니다)

     

    후자는 변수 선언 부분을 둘로 나누어서

        $identifier = $member_config->identifier;
        $identifierForm->value = $member_info->$identifier;

    이렇게 쓰면 될 것 같습니다만... 만약 이것도 안 된다면 배열로 변환하여

        $identifierForm->value = get_object_vars($member_info)[$member_config->identifier];

    이렇게 쓰는 꼼수도 있습니다. 아무래도 XE가 오래되었다 보니 배열 문법을 좀더 잘 지원합니다.

     

    템플릿 파일에서 선언한 변수는 모두 Context에 자동으로 들어가므로 (이게 사실 만악의 근원입니다만...) Context::set은 필요하지 않습니다.

  • profile profile
    와...!
    Context::getLang(), $identifier = $member_config->identifier; 이 두개로 해결됐습니다..!!
    정확하고 빠른 답변 정말 감사드립니다...

    안될 상황 대비해서 꼼수까지 알려주시다니..
    정말 감사합니다 ㅠㅠ