묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
스킨에서 foreach as 오류...
2011.03.09 18:14
$output = executeQuery('communication.getChat',$args);
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', count($output->data));
Context::set('chat_list', $output->data);
제가 사용한 코드를 간단하게 줄여보자면 위와 같습니다.
보시면 DB에서 sql질의를 한 후 받은 결과값을 템플릿으로 전송하고
스킨 파일에서는 foreach as를 이용하여 아래와 같이 출력하고 있습니다.
<!--@foreach($chat_list as $val)-->
<tr>
<td class="nowrap wide">{$val->content} / {$val->message_type} / {$other_nick_name}</td>
<td class="nowrap"><span class="regdate">{zdate($val->regdate,"Y-m-d H:m:s")}</span></td>
</tr>
<!--@end-->
문제는 DB에서 얻은 결과값의 개수가 0개이거나 2개이상이면 정상적으로 출력이 됩니다.
하지만 1개일 경우에는 foreach로 데이터를 받아오지 못하면서 지 멋대로 루프가 10번가량 돌아버립니다.
즉, $val->content 로는 데이터를 받아오지 못하고 $chat_list->content를 해야만 데이터를 받아올 수 있더군요.
그래서 비어있는 데이터로 <tr>~~</tr>가 10번 가량 화면에 출력이 됩니다.
무엇이 문제인가요?
foreach가 원래 그런가요?
현재는 if문을 이용하여 결과값을 개수가 1개일때는 $chat_list->content 와 같은 식으로 출력하도록 사용하고는 있습니다만,
foreach만으로 해결이 되지 않는다는게 걸리적거리네요.
혹시 원인을 아시는 분 계시면 조언 부탁드려요.
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', count($output->data));
Context::set('chat_list', $output->data);
제가 사용한 코드를 간단하게 줄여보자면 위와 같습니다.
보시면 DB에서 sql질의를 한 후 받은 결과값을 템플릿으로 전송하고
스킨 파일에서는 foreach as를 이용하여 아래와 같이 출력하고 있습니다.
<!--@foreach($chat_list as $val)-->
<tr>
<td class="nowrap wide">{$val->content} / {$val->message_type} / {$other_nick_name}</td>
<td class="nowrap"><span class="regdate">{zdate($val->regdate,"Y-m-d H:m:s")}</span></td>
</tr>
<!--@end-->
문제는 DB에서 얻은 결과값의 개수가 0개이거나 2개이상이면 정상적으로 출력이 됩니다.
하지만 1개일 경우에는 foreach로 데이터를 받아오지 못하면서 지 멋대로 루프가 10번가량 돌아버립니다.
즉, $val->content 로는 데이터를 받아오지 못하고 $chat_list->content를 해야만 데이터를 받아올 수 있더군요.
그래서 비어있는 데이터로 <tr>~~</tr>가 10번 가량 화면에 출력이 됩니다.
무엇이 문제인가요?
foreach가 원래 그런가요?
현재는 if문을 이용하여 결과값을 개수가 1개일때는 $chat_list->content 와 같은 식으로 출력하도록 사용하고는 있습니다만,
foreach만으로 해결이 되지 않는다는게 걸리적거리네요.
혹시 원인을 아시는 분 계시면 조언 부탁드려요.
원인을 알았습니다.
query에서 navigation 구문과 연계가 되네요.
위에서 처럼 foreach 오류가 났을 때는 navigation을 아래와 같이 작성하였습니다.
<navigation>
<index var="sort_index" default="regdate" order="desc" />
<list_count var="list_count" default="10" />
</navigation>
그런데 아래와 같이 수정하였더니 foreach가 잘 작동하네요.
<navigation>
<index var="sort_index" default="regdate" order="desc" />
<list_count var="list_count" default="10" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
페이지가 필요없다고 생각해서 빼버렸더니..xe에서 처리하는 구문과 연계가 안되었었나보네요.