CI 묻고 답하기

제목 프레임 워크 사용시 코드가 꼬이는게 고민입니다. MVC모델
글쓴이 스크림 작성시각 2009/08/21 15:37:53
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 30299   RSS
codeIgniter 를 공부하려고 하는데

mvc 에서

v 에서는 최대한 php 코드가 없게끔 하고 싶습니다.

하지만 while 같은건 어쩔수 없겠죠~?

여튼.

컨트롤러에서 가져온 연산 값들을

while 돌면서. 출력해줄 때. 값을 변경해주거나 조합해야하는 경우에는 어떻게 하나요?

예를 들어,

db에서 회원 정보를 가져온다고 했을 때

while($row = mysql_fetch_array($result)){    // mvc 사용할 때도 이런식으로 while 쓰는지는 모르겠습니다.아직 공부중이라.

}

이렇게 돌면서 만약 timestamp 형태로 가져온 $row[regiDate]  값을 date('y-m-j',$row[regiDate]);

해서 출력해줘야 한다면

결국 view 에 php 함수들이 들어서게 되지 않나요? 제 프로그램의 경우에.

이렇듯. while 돌면서 값을 정리해주는 경우가 많은데 어떻게 해야 view 를 잘 짰다고 소문이 나게 짤수 있을지 고민입니다.


또한...

페이지 출력 부분에서도

페이지가 위에서부터 5구간으로 나누어져서 a,b,c,d,e 로 나누어 졌다면.

각각의 구간이 권한이 있는지 유무나 시간 대에 따라서 출력 유무가 결정 된다면

이런걸 검사해주는 if 문은 불가피 한 것이겠죠~?

특히

권한 유무에 따라서

게시판에서 '쓰기', '수정','삭제',' 답글 ' 등의 내용을 출력하려고 할 때는 더더욱 그렇구요.



질문의 요지는 2가지 입니다.

프레임웍 사용시

while 에 대한 고민.
if 문에 대한 고민.
 다음글 rewrite .. 고민입니다. (4)
 이전글 tank_auth 스키마 질문. (5)

댓글

케이든 / 2009/08/21 15:51:22 / 추천 0
while if 문을 떠나서

mvc에 따라오는 고질병이죠..

mvc 각각 허용하는 기준은 어디까지인가..

v에는 php코드 안넣기
c에는 html코드 echo로 안뿌리기
m은 db만 쓰기 등등..
많지만

답이 없습니다..

코딩하다보면 컨트롤러에서 db관리하는경우도 생기고

뷰에서 컨트롤러 부르는 일도 있습니다

그냥 즐거운 고민이라고 생각하고 코딩합니다 저는~
emc / 2009/08/21 16:11:02 / 추천 0
ci parser가 그리 좋지 않은 관계로 view 안에 코딩이 들어갈수밖에 없더라구요.
스마티같은 템플릿으로 연동하지 않는 이상은 힘들것 같습니다.
변종원(웅파) / 2009/08/21 16:25:04 / 추천 0
ci view에서 while문 보다는 foreach를 사용합니다.

포럼 리스트의 일부입니다.
	<? foreach ($list as $lt) { ?>
	<?

	$vals = mktime(date("H") - 24, date("i"), date("s"), date
		("m"), date("d"), date("Y"));
	$dates = strtotime($lt['reg_date']);

	if ($dates >= $vals) {
		$new_icon = ' <img src="/images/icon_new.gif">';
	} else {
		$new_icon = ' ';
	}

	if ($lt['hit'] > 100) {
		$bl1 = '<b>';
		$bl2 = '</b>';
	} else {
		$bl1 = '';
		$bl2 = '';
	}

	if ($lt['voted_count'] > 30) {
		$recom_icon = ' <img src="/images/recom_new.gif">';
	} else {
		$recom_icon = ' ';
	}

    $bubble_title = strip_tags($this->common->strcut_utf8($lt['contents'], 200));
?>
 	<tr class="bg0">
    	<td class="num"><?= $lt['no'] ?></td>
     	<td class="subject"><a href="/<?= $this->seg_exp[0] ?>/view/<?= $lt['no'] ?>/page/<?=$page_account?>/<?=$search_url?><?=$search_sfl?>" title="<?= $bubble_title ?>"><?= $bl1 ?><?= $this->
common->strcut_utf8(strip_tags($lt['subject']), 30) ?><?= $bl2 ?></a> [<?=$lt['reply_count']?>]<?= $new_icon ?><?= $recom_icon ?></td>
		<td class="name" align="center"><span class='guest'><?  if($lt['nickname']) { echo $lt['nickname']; } else { echo $lt['user_name']; } ?></span></td>
        <td class="datetime"><?= substr($lt['reg_date'], 0, 10) ?></td>
        <td class="hit"><?= $lt['hit'] ?></td>
	    <td class="hit"><?= $lt['voted_count'] ?></td>
  	</tr>
	<? } ?>
    </table>
timestamp의 경우 mysql query 자체에서 변환하여 가져오면 됩니다. 포럼소스에는 그렇게 적용을 하지않았지만 query에서 변환할 수 있는 값들은 변환하여 view에서는 뿌려주기만 하면 됩니다.

그리고 작업을 하다보면 어쩔 수 없이 php함수가 쓰일 수밖에 없습니다. 완벽하게 C에서 모두 처리하여
넘겨주기가 힘들고, 또 그렇게 처리할때 시간과 능률을 따져보면 안하게 됩니다. ^^;

저는 view에서는 foreach, if 이외에는 가급적이면 사용하지 않으려고 노력하는 편입니다.
if 같은 경우 그 처리를 controller에서 처리하여 결과를 html 형태로 만들어서 view로 전달해주면 되기는
합니다. while도 마찬가지구요.

if($use == 'Y'){
  $data['use'] = "사용함";
} else {
  $data['use'] = "사용안함";
}

$this->load->view('views', $data);
위 방식으로 처리하면 view에서는 변수만 출력해주면 되겠죠.
이것저것 다 귀찮으시면 emc님 말씀대로 ci에 스마티 적용하여 쓰시면 됩니다. ^^
스크림 / 2009/08/21 16:56:51 / 추천 0
감사합니다 ^^;

저렇게 php 코드가 많이 들어간다면... ㅜ.ㅜ MVC분리로 얻어지는 이득이 얼마나 클지가 고민이네요.
ci세상 / 2009/08/21 17:27:04 / 추천 0

Q. 결국 view 에 php 함수들이 들어서게 되지 않나요? 제 프로그램의 경우에.
이렇듯. while 돌면서 값을 정리해주는 경우가 많은데 어떻게 해야 view 를
 잘 짰다고 소문이 나게 짤수 있을지 고민입니다. ....

=> 의견 : CI 프레임웍에 너무 구속을 받지 말고 자유롭게 코딩을 해보세요..
=> 무엇을 하시다가 궁금하시면 가장먼저 CI 외국 포럼을 검색해보세요 대부분의 해답이 다 나와 있습니다. 또한 한국포럼에 전문가분들도 여러분 계십니다.

예) 날짜 포맷과 관련해서
- 위키 : http://codeigniter.com/wiki/MySQL_DATETIME_Helper/
- 응용 : http://j2k.naver.com/j2k_frame.php/korean/d.hatena.ne.jp/dix3/20081104/1225786103

예2) view에서 while 문 관련
사용이 가능한것이 CI의 장점입니다. 하지만 반복코드가 많이 들어가면 모델로 빼시면 됩니다.

<?
$this->db->select('*');
$this->db->order_by("no", "asc"); 
$query = $this->db->get("board");
foreach ($query->result_array() as $data) {
?>                                

순환출력

<?
}
?>

 

 

Q. 페이지 출력 부분에서도
페이지가 위에서부터 5구간으로 나누어져서 a,b,c,d,e 로 나누어 졌다면.
각각의 구간이 권한이 있는지 유무나 시간 대에 따라서 출력 유무가 결정 된다면
이런걸 검사해주는 if 문은 불가피 한 것이겠죠~?

=> 의견 : 컨트롤러에서 view를 if 처리하시면 될것 같습니다.


Q. 저렇게 php 코드가 많이 들어간다면... ㅜ.ㅜ MVC분리로 얻어지는 이득이 얼마나 클지가 고민이네요.

=> 300% 이득이 있습니다.^^

 

변종원(웅파) / 2009/08/21 17:38:38 / 추천 0
소스 올려드린 것은 디자인, 개발자 분리가 아닌 제가 혼자 작업하면서 시간을 줄이려고 했던 부분이라 그렇구요. foreach 구문 알려드리려고 올린 내용입니다.

제가 마지막에 올려드린 내용처럼 컨트롤러에서 모든 내용 처리가 가능합니다.
단, 세세하게 다 컨트롤러에서 처리할 경우 시간, 능률 대비 비용을 생각했을때 낭비라는 것이죠. ^^;
MVC패턴 지키려면 얼마든지 가능하죠. 시간이 문제인거죠...
마냐 / 2009/08/21 19:38:55 / 추천 0

foreach 는 당근 허용.
else if 가 없는 if 문까지 허용.
그 이외는 출력부분(<?=$변수?>)만 뷰페이지에서 허용.

뷰페이지와 컨트롤러에서의 코딩 차이를 둠. (이건 아무이유 없음. 지극히 주관적)

컨트롤러
if () {
  // 내용
}


if ():
  // 내용
endif;

양승현 / 2009/08/25 10:31:32 / 추천 0

템플릿파서..^_^;;