글쓴사람 까비
글쓴시간2004년 8월 12일 오전 10시 22분 48초
    제목배열을 둘로 나눠서 넣고 돌릴 때
안녕하세요.

템플릿에 들어가는 배열은 이렇게 들어갑니다.
$foo = array();
$tpl->assign('foo', array_chunk($foo, 2));

지금까지는 템플릿을 이렇게 써서 잘 돌아갔습니다.

{@ foo }
 {@ .value_ }
blah blah {=..var1} {=..var2}
 {/}
{/}

그런데, 이렇게 고치니까 오류가 나버리네요.

{@ foo }
 {@ .value_ }
   {# blah}
 {/}
{/}
----------- in blah.tpl
blah blah {=..var1} {=..var2} blah blah

문제는 생략구문에서 생기네요. ..var1과 같은 형태를 허용하지 않는듯 해서 뚜렷하게 지정을 하려고 했으나 이것저것 넣어봐도 안 됩니다. (.value_. value_. abode.value_. ...)

애초에 루프를 잘못 돌린걸까요? 어쨌든 배열은 두 개로 나눠서 넘어가야 하거든요.
관리자 배열이 두 개인 것이 문제가 아니라.. 첫번째 방법 대신에 두번째 방법을 쓴 것이 문제거든요..

생략구문이거나 아니거나 루프내 변수는 모두 같은 파일에 있어야 하고. 이렇게 나누는 것을 지원하지 않는 명분은 파일I/O 가 많아진다는 것이구요.

두번째 방법을 써야 할 특별한 이유가 있으신가요..
04-08-12 11:16
까비 따로 떼어낸 부분만 여기저기서 써야할 일이 생겨서 그랬습니다. 변수 범위 문제라면 루프를 다르게 해야겠네요...
04-08-12 12:43
까비 저렇게 템플릿을 분리해서 루프에 넣어도 어차피 파일 I/O는 처음 한 번 아닌가요?
04-08-12 12:49
관리자 해당되는 php소스를 분석해 드리면 좋을 텐데.. 테스트 결과를 보시는게 쉬울거 같네요.

아래는 내용이 없는 같은 파일을 한 번, 열 번, 백 번, 천 번 인클루드하는 테스트의 50회 반복평균 결과입니다.

inc-0001  0.00063118   100.00 %  
inc-0010  0.00400526   634.57 %  
inc-0100  0.03866107   6125.25 %  
inc-1000  0.38272125   60636.24 %  
04-08-12 13:53
까비 Template_에서 어떻게 처리하는가를 먼저 봐야겠네요.

제 생각엔 루프에 있더라도 어차피 템플릿 모양은 루프가 도는 한 같기 때문에 include_once또는 require_once로 처리하면 될것 같은데요. 아니면 루프가 시작하기에 앞서 미리 템플릿을 읽어뒀다가 쓰거나요.

어쨌든, 제가 Template_에서 관련 부분을 보고 생각해 보기 전에는 공염불이니 보고나서 이야기를 해야겠습니다.

한 가지 틀을 여러 쪽에서 여러번 보여줘야 하기 때문에 루프에 다른 템플릿을 집어 넣는건 피하기 어려워 보입니다.
04-08-12 15:04
관리자 정정합니다...

한 개의 파일을 100번 인클루드 하는 것과 100 개의 파일을 한 번씩 인클루드 하는 것과는 차이가 있네요..

1inc-100   0.00137727 100.00 %  
100inc-1   0.02517849 1828.15 %

파일 I/O 가 처음 한 번인지 아닌지 소스를 봐야할 거 같습니다..
04-08-12 15:05
관리자 include_once나 require_once 는 안되구요.. 생각해 보시면 아실 겁니다.

루프변수가 포함된 템플릿을 다른 곳에서 다시 쓸 수 있는 경우를 고려하지 못했네요.

그것이 편리하고 필요하다면.. 속도가 어느 정도 떨어지더라도 지원해야 하겠죠..
04-08-12 15:17
관리자 현재로선..

{@ foo }
 {@ .value_ }
   {..value_}
 {/}
{/}

fastTemplate 쓸 때처럼 php 쪽에서 {..value_} 에 들어갈 값을 fetch() 로 가져와서 $foo 배열의 요소로 할당하는 방법을 사용하셔야 할 거 같구요..

이 기능을 지원하지 않는 다른 명분이 있다면.. 디자인 일관성 때문에.. 루프로 된 틀 안쪽만 템플릿이 바뀌는 경우가 흔하지 않은 것 같다는 것입니다.

현재 템플릿언더바의 구조가 많이 바뀌지 않는 한 이 기능을 지원하기가 어렵습니다. 양해 바랍니다.
04-08-12 15:41
관리자 에고.. 제가 정신이 없네요.. 위에 테스트를 잘못해서..

한개 파일을 100 인클루드 하는 것과 100개 파일을 1번씩 인클루드하는 것이나 비슷합니다.

1inc-100 0.01265961 100.00 %  
100inc-1 0.01335216 105.47 %

같은 파일을 여러번 인클루드해도 파일 I/O 는 항상 발생한다고 보면 되겠네요..

예전에 다 해봤던 건데.. 회사에서 눈치보며 할려니.. 그렇네요.. 횡설수설해서 죄송합니다.
04-08-12 16:01
까비 흐음... 제가 생각했던 부분은 구조적인 문제라 이곳에 이야기할 필요가 없군요. :-) 잘 알겠습니다. 루프 몇 개 더해서 fetch() & assign으로 가야겠네요.

저 역시 회사에서 눈치보면서 하려니 질문도 횡설수설... :-)
04-08-12 17:25
관리자 번거롭지만 해결책이 있어서 다행이네요.. 프로그램하는 사람들끼리는 횡설수설해도 통해서 좋은거 같습니다.ㅎㅎ
04-08-12 21:21
    이름
비밀번호
 
Since 2003-03-03 hosted on vultr.com