만들면서배우는 CI 책에서 나와있는 lists 관련 부분을 딱 뺀 부분입니다. 제가 하고 싶은것이 있어서,,, 질문을 드려봅니다.
단순히, 컨트롤러에서 모델로 보내서 1개의 Row에 담아서 다시 컨트롤러로 보냈습니다.
근데 저는, DB를 구성했을 때, 미래의 수정사항을 손 쉽게 바꾸고자 해서, 중요 키워드 단어들은 모두 별도의 코드 테이블에서
관리하기 위해서 빼두고, 순수 게시판 Table에 정보들은 모두 0, 1, 2, 1234, 뭐 이런식의 코드 데이터들로 입력을 해놨습니다.
아래 소스가 해당 부분입니다.
/* xxx.php Controller */
$data[lists] = $this->xxx_m->lists();
$this->load->view('list_v', $data); // 뷰-리스트-출력
/* xxx_m.php Model */
function lists(){
$query = "select * from a";
$result = $query ->row();
return $result
}
/* xxx_v.php View */
<?php foreach($lists as $lt){ ?>
<tr>
<td><input type="checkbox" name="chk_all" id="chk_all" class="checkbox"></td>
<td><?= $lt->idx ?></td> <!-- 순수 DB Row Data -->
<td><?= $lt->name ?></td> <!-- 순수 DB Row Data -->
<td><?= $lt->login ?></td> <!-- 순수 DB Row Data -->
<td><?= $lt->nickname ?></td> <!-- 순수 DB Row Data -->
<td><?= $lt->status ?></td> <!-- Row Data -> Text로 교정된 데이터 -->
<td><?= $lt->writer ?></td> <!-- Row Data -> Text로 교정된 데이터 -->
</tr>
<? } ?>
이렇게 되어 있을 때...
모델에서 db를 건드릴때 코드 테이블과 데이터 테이블을 일일이 조인해서 하는 방법 외에,
컨트롤러에서 임의의 함수를 통해서 변경해서 다시 $data[lists] 배열 안에 넣어서 view.php 페이지에서
$lt->status 하면 상태값 0,1,2, 대신에 "살았다" , "죽었다", "죽깆ㄱ전" 뭐 이런식으로 표시하게 하고 싶은거거든요..
$data[status] = "살았다" 이렇게 하면 view 에서 <?= status ?> 로 쓸수는 있는데 다중 행의 반복문에서는 적절치 못한 것 같아서요.
그래서 제 생각대로 $data[lists][status] = "살았다" 이렇게 해보니 에러 나서요...
방법이 있으면 가르침 부탁 드립니다.
lists.php 페이지는 다중의 row 행인데... db 테이블 조인이 가장 속 편할까요...? 아니면... 함수 통해서 다녀와서 다시 넣는게 편할런지..
어떤게 정답인지는 저도 여태까지 매번 하면서 고민이었긴 한데, ㅊ코드이그나이터를 접하고 나서는 기존에 해왔던 방법이랑은 조금 틀려서요~
이전에는.. 그냥 view 페이지에다가 함수 하나 만들어놓고, 계속 호출하면서 바꿔주는 방식을 취했기는 했습니다만... 흠냐 -_-;
고수님들의 많은 가르침 부탁 드립니다.
kaido 님 의견 감사합니다.
그럼 하나만 다시 질문드리면,, $data[lists] = xxxx_m 에서 result로 리턴 받는 값들의 배열인데요...
구성도는
Array
(
[0] => stdClass Object
(
[seq] => 1
[cu_idx] => 1
[cu_name] => asdf
[cu_sex] => male
[cu_tel1] => 1234
[cu_etc_hospital] =>
[cu_complain] => 1
[cu_customer_job] => 1
[cu_customer_addr] => 1
[cu_customer_tendencies] => 1
)
)
이렇게 되었을 때...
커트롤러에서 열심히 if로 저 위의 숫자 1의 값 들을 text치환 했을 때,
다시 [cu_xxx_xxx] => aaaaaaaa 로 넣는 방법 좀 알려주실 수 있나요?
질문 글에도 포함되어 있는 사항이긴한데요.. 흠냐;;
아니면 그냥 애초부터 조인식으로 해서 원하는 것만 셀렉트 해서 가져와서 mvc 지켜가야 하는지.. 디비에 부담은 안갈련지 하느 뭐 그런거죠... ㅎㅎ;;
사실 조인식이 오히려 더 낭비 없는 방법입니다. 테이블 조인 1개 정도는 부담이 거의 없습니다.
//list 출력 기본 식입니다. -- 저는 이렇게 씁니다.
//model
function lists(){
$this->from('tb_name');
return $this->get()->result_array();
}
//controller
$db_data = $this->model->lists();
//변환이 필요하면
foreach($db_data as $key=> $val){
if($val['cu_customer_job'] == 1) $db_data[$key]['cu_customer_job'] = "꽃거지";
}
$data['lists'] = $db_data;
//view -- ci 에서 제공하는 숏코드 사용
<?php foreach($lists as $key => $val): ?>
<?=$val['idx']?>
<?=$val['cu_customer_job']?>
<?endforeach; ?>
view 숏코드 [대체문법] 에 대해서 더 자세한 사항은 메뉴얼 참고
http://www.ciboard.co.kr/user_guide/kr/general/alternative_php.html
[의외로 유용합니다 ㅎㅎ]
조인식이 아니면 해당 값을 바꾸는 방법은 if 문 말고는 없습니다.
방식의 차이인데, 사실 뷰에서 if 문으로 넣는게 논리적으로는 맞습니다만
일부러 컨트롤러에서 if문으로 배열값을 전부 교체해놓고 view에서는 출력만 합니다.
MVC 규칙을 지키기 위해서 말이죠.