 |
 |
 |
 |
 |
| |
|
|
 |
 |
 |
 |
 |
 |
| 글쓴사람 | 우킷스 |
| 글쓴시간 | 2003년 11월 19일 오후 5시 23분 52초 |
| 제목 | 중첩루프 사용시 제대로 출력되지 않는 문제. |
 |
 |
안녕하세요? Template_ 를 이용하고 있는 변성욱이라고 합니다.
버젼업 되면서 정말 필요했던 기능들이 추가되어 잘 쓰고 있습니다. 감사합니다.
다름이 아니라 중첩루프 사용시 상위 루프에 루프변수가 assign 되지 않으면 index가 -1 부터 시작하는 것을 발견 하였습니다. print_r 로 찍어봤습니다.
아래 소스 중에 (작성 중인거라 날짜가 맞지는 않습니다)
3번째 열의 loopPushAssign 구문이 없다면 잘못된 결과가 표시됩니다.
의도적인 것인지 버그인지는 모르겠습니다. ^^
한번 봐주시겠어요?
추운 날씨 감기 조심하시구요.
추신. 달력을 출력하는데 더 좋은 방법이 있으면 조언 부탁드립니다. ^^;
calendar.php
------------
$tpl->loopLoad("week", 1);
for($i = 0; $i < $countWeek; $i++) :
$tpl->loopPushAssign(array(
"countWeek" => $countWeek
), 1);
$tpl->loopLoad("day", 2);
for($j = 0; $j < 7; $j++) :
$day = $i * 7 + $j;
$tpl->loopPushAssign(array(
"day" => $day
), 2);
endfor;
endfor;
calendar.tpl.html
----------------
{year}년 {month}월
<table>
{@ week}
<tr><td>{.index_}th</td>{@ day}<td> {..day}</td>{/}</tr>
{/}
</table>
결과
----
2003년 11월
0th 0 1 2 3 4 5 6
1th 7 8 9 10 11 12 13
2th 14 15 16 17 18 19 20
3th 21 22 23 24 25 26 27
4th 28 29 30 31 32 33 34
5th 35 36 37 38 39 40 41
1번 루프 loopPushAssign 이 없을 때의 결과
----
2003년 11월
0th 7 8 9 10 11 12 13
1th 14 15 16 17 18 19 20
2th 21 22 23 24 25 26 27
3th 28 29 30 31 32 33 34
4th 35 36 37 38 39 40 41
5th
|
 |
 |
| 관리자 |
우킷스님 안녕하세요.
그건.. 레퍼런스에 about push 부분 읽어 보시면 나와있습니다.
$tpl->loopLoad('...', 1)
for (...) {
$tpl->loopPushLoad('...', 2)
for (...) {
$tpl->loopPushAssign('...' ,2)
}
}
내용은.. push 의 의미가 섹션을 발생시킨다는 것이고.. 중첩루프부분에 loopLoad() 대신 loopPushLoad() 를 사용하시면 해결됩니다.
레퍼런스대로면.. 인덱스가 -1 부터 시작하는게 아니라.. 아예 루프가 돌지 않아야 하는데, 어쨌든 레퍼런스에 나온대로 쓰시면 됩니다. |
| 03-11-19 18:37 |
 |
|
 |
| 우킷스 |
허걱, 뻔한 내용을 질문했네요.
레퍼런스를 다 읽지 않았다는게 들통 났습니다. --;
답변 감사합니다 (__) |
| 03-11-19 20:19 |
 |
|
 |
| 관리자 |
달력은.. 전체 7 X n 개의 셀로 구성되고.. 행의 개수(n)를 미리 구하는 방법으로 해볼 수 있을 거 같네요.
$start=2; // 그 달의 시작요일, 일요일:0 월요일:1
$num=31; // 그 달의 총 날 수
$num_plus_start = $num + $start;
$n = ceil($num_plus_start / 7);
$tpl->loopLoad("week", 1);
for($i=0,$k=0,$day=0; $i < $n; $i++) {
$tpl->loopPushLoad("day", 2);
for($j=0; $j<7; $j++, $k++) {
if ($k<$start || $k>=$num_plus_start) $day=0;
else $day++;
$tpl->loopPushAssign(array(
"day" => $day
), 2);
}
} |
| 03-11-19 20:22 |
 |
|
 |
| 관리자 |
감기조심하세요^^ |
| 03-11-19 20:22 |
 |
|
 |
| 우킷스 |
쿨럭~. 제가 생략했던 윗 부분입니다. (제대로 짠것 같아 혼자 흐뭇 모드~~)
$weekDay = date("w", mktime(0, 0, 0, $calendar->month, 1, $calendar->year));
$countDay = date("t", mktime(0, 0, 0, $calendar->month, 1, $calendar->year));
$countWeek = ceil(($weekDay + $countDay) / 7); |
| 03-11-19 23:36 |
 |
|
 |
| 우킷스 |
관리자님의 코드를 보면 예술작품을 보는 것 같습니다. --;
조언 감사드립니다~ |
| 03-11-19 23:38 |
 |
|
 |
| 관리자 |
date() 함수와 달력클래스가 아주 좋네요.^^
찾아주셔서 감사합니다. |
| 03-11-19 23:56 |
 |
|
 |
 |
 |
 |
|
|
|
|
|