글쓴사람 이삼구
글쓴시간 2004년 2월 18일 오후 1시 50분 52초
제목 php에서 템플릿 배열변수를 참조해야 할 때...
제가 제대로 하고 있는지 검사 맞으려구요... -_-;;;
{@ 배열} 로 인해서 현재는 loopassign을 거의 사용하고 있지 않게 되었습니다. (감사합니다. 코드가 지져분해져서 속상했거든요. (_._))
데이터들을 tpl에서 뿌려줄 때,
{@ ARR}
<!-- 표현 -->
{/}
이렇게 하면 되는데, 문제는 배열값을 표현할 때 배열값을 이용한 문자열 조합이 안된다는데 있습니다. 처음에는 그런 것들에 한해서 loopassign을 썼는데, 코드가 지저분해지는게 너무 슬펴서 T.T 슬며시 다음과 같이 해결했네요.
<ex> 게시물을 배열로 뿌려주기
<!-- list.tpl -->
{@ ARR}
<a href="{Arr.LINK}">{ARR.title}</a> <br>
{/}
<!-- list.html -->
<?php
$a['front'] = 'http://localhost/?idx=';
$a['end'] = '';
$arr['idx'] = array('1','2','3','4','5','6','7','8');
// $arr['link'] = preg_replace ( '(^.*$)', $a['front']."\\0".$a['end'], $arr['idx']); // 문자 포함일 경우
// $arr['link'] = preg_replace ( '/(^.*$)/u', $a['front']."\\0".$a['end'], $arr['idx']); // 유니코드문자 포함일 경우
$arr['link'] = preg_replace ( '(^\d*$)', $a['front']."\\0".$a['end'], $arr['idx']); // 숫자만 있을 경우
print_r($arr);
exit;
?>
{Arr.LINK} 라는 변수를 http://localhost/?idx={Arr.id} 이렇게 써도 되겠지만, 링크는 코드 쪽에서 처리한다 라는 것이 정책이라(phpBB도 마찬가지지만..., 제 생각에도 언제 바뀔지 모르는 디자인에 LINK URL이 들어간다는것이 찜찜해서...) 이렇게 처리를 했습니다.
템플릿을 쓰면 사이트 설계 정책이 무엇보다 중요할 듯 한데, 제작자님의 의견을 듣고 싶습니다. 퍼포먼스 쪽에도 코맨트 부탁드립니다. (_._)
아참, 술은 언제 사드릴까여? 헤헤... ^^
관리자
"배열값을 이용한 문자열 조합이 안된다" 는 말씀을 잘 이해를 못하겠네요.. 기존의 loop*() 메서드들로 할 수 있는 모든 일을 새 방식으로 처리할 수 있습니다. 설명서 보시면 루프의 템플릿 부분은 예전과 똑같고.. PHP쪽만 달라졌거든요. 단지 {@표현식} 만 추가되었구요.
일단 속상하셨던게 해결돼서 다행입니다.^^
04-02-18 14:47
이삼구
아... loopassign을 없애기가 쉽지 않군요. -_-;;
위의 내용과 연결이 되는 내용인데여, 2차 배열을 부분만 루핑할 때,
$arr = array('idx'=>1,'list'=>array('1','2','3'));
이런 식으로 들어있다면, list를 정렬하려 합니다.
{@ Arr.list}
{.value_} <-- {Arr.list.value_} 는 안되더군요.
{/}
이것은 출력이 잘 됩니다. 그런데,
{@ Arr.list}
{.value_}
{? .index_+1 != .size_}, {/}
{/}
위의 코드는 리스트 중간에만 쉼표를 찍는 코드인데, 작동되질 않네요. 컴파일 코드를 살펴보았더니 .index_ 가 {?}요 안에 있고 밖에 없을때는 초기화되지 않더군요.
{@ Arr.list}
{.value_}
{? .index_+1 != .size_}, {.index_} {/}
{/}
이렇게 추가하면 잘 되구요.
04-02-18 18:10
관리자
{@ Arr.list} 에서 Arr.list 는 루프아이디가 아니라 표현식이라서 루프아이디를 생략하는 형식만가능합니다. 설명서 3-16 참고하시기 바라구요. 설명서 잘 보시면.. 루프 다루는 것이 예전보다 더 유연하고 쉬워진 것을 알 수 있을 겁니다.
{@ Arr.list}
{.value_}
{? .index_+1 != .size_}, {/}
{/}
에서 .index_ 가 초기화되지 않는 것은 2.2.0 RC~RC3 의 버그이고 RC4 에서 수정되었으니 업데이트하시면 해결될 것입니다.
04-02-18 19:55
이삼구
해결... ^^
정신이 없나 보네요, RC4를 받는다는게 구버젼을 받아버려서 한시간동안 삽질했습니다. -_-;;;
거듭 감사의 말씀 올립니다. (_._)
04-02-19 13:28
관리자
감사합니다.^^
04-02-19 19:34