RX / XERXE 개발팁XpressEngine
RXE Core를 활용한 개발과 관련된 팁을 나눌 수 있으며, 서드파티 개발에 관한 강좌도 올릴 수 있습니다.
조회 수 146 추천 수 1 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 댓글로 가기
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기

https://www.xpressengine.com/qna/17468204

해당 링크를 보면 가변 변수 사용하기가 쉽지 않겠구나 하고 포기를 했었습니다.

답변 달아주신 라르게덴님 말이 정답입니다.

스킨 파일(html)에서는 {} 처리를 템플릿 언어로 보기때문에 가변 변수는 안되죠.

 

대신 xe에서 보통 사용하는 object 값이라도 스킨에서 가변 변수 비슷하게 활용해 보려고 궁리하다가 잘되는것 같아 글을 남겨봅니다.

 

---아래는 틀린 코드

 

$args=new stdClass;
$args->a1="1";
$args->a2="2";
Context::set('php_args',$args);

 

 

<!--@for($i=1;$i<3;$i++)-->
{@
$var_result=$php_args->{'a'.$i};
}
{$var_result}
<!--@end-->

오류나고 안됩니다.

 

--- 오류 코드 끝

 

오브젝트를 배열로 변환을 해주고 사용하면 가능합니다.

 

모듈.model.php 에 변환해주는 function 을 추가

function objectToArray($data)
    {
        if (is_object($data)) {
            $data = get_object_vars($data);
        }

        if (is_array($data)) {
            return array_map(array($this, 'objectToArray'), $data);
        }

        return $data;
    }

 

모듈.view.php 에서 배열로 변환

$args=new stdClass;
$args->a1="1";
$args->a2="2";

$testModel = getModel('test');
$args_array=$testModel->objectToArray($args);
Context::set('args_array',$args_array);

 

html 에서 사용

<!--@for($i=1;$i<3;$i++)-->
{@
$var_a="a".$i;
}
{$args_array[$var_a]}
<br>
<!--@end-->

 

결과:

1

2

  • profile
    기진곰 2016.12.16 11:17:11

    PHP 5.4 이후에는 get_object_vars와 배열 문법을 한번에 쓸 수도 있습니다.

    {get_object_vars($php_args)['a'.$i]}

    물론 호출 횟수가 많다면 매번 get_object_vars를 사용하기보다는 미리 배열로 변환해 두는 편이 낫겠죠.
    아무튼 PHP는 객체보다 배열을 다루기가 더 편하다는 것에는 변함이 없네요 ㅎㅎ

  • profile
    구름이 2016.12.16 11:55:37
    php 5.4 이후에서는 그렇게 사용 가능한가 봐요.
    std class 선언해서 사용하는것도 나쁘진 않지만 그래도 저는 배열이 쉽더라구요 ㅋ

서버에 요청 중입니다. 잠시만 기다려 주십시오...