CI 묻고 답하기

제목 foreach 문에 조건 넣기
글쓴이 하얀당근 작성시각 2013/06/20 14:39:22
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 16622   RSS
코드이그나이터 초보입니다 ㅠ 전에 질문을 한적 있는데 염치 불구하고 한번 더 여쭈어 보겠습니다.

My_Controller.php
 function _sidebar(){
  $topics = $this->topic_model->gets();
  $this->load->view('topic_list',array('topics'=>$topics)); 
 }
이런 식으로 사이드 바가 정의 되어 있습니다.

view : topic_list.php
      <?php
         foreach($topics as $entry){
      ?>
         <li><a href="/index.php/topic/get/<?=$entry->menu_code?>/<?=$entry->id?>"><?=$entry->title?></a></li>
      <?php
         }
      ?>
사이드 바는 이런식으로 보여주고요.

그런데 보시면 알겠지만 menu_code 가 만약 sub01이면 sub01만 사이드바에 보여주고
sub02이면 sub02만 사이드바에 표시할려고 합니다.

제가 머리가 안 돌아가서 이런 경우에 어떻게 조건을 걸어야 할지 모르겠어요 ㅠㅠ
gets()는 아래와 같이 정의 돼 있어요
 function gets() {
  return $this->db->query('SELECT * FROM topic')->result();
 }

 다음글 ajax로 값을 보낼 때에 데이터 보안 (2)
 이전글 마냐보드 config 설정 시 문제 해결방법 (1)

댓글

변종원(웅파) / 2013/06/20 14:54:49 / 추천 0
현재 주소에 대해 좌측 메뉴를 보여주는 거니 컨트롤러명 넘기고 
그 컨트롤러명에 대한 메뉴 리스트를 반환하게 모델을 만들면 됩니다.

_sidebar(컨트롤러명)() 을 넘겨 처리하게 수정해보세요
하얀당근 / 2013/06/20 15:42:00 / 추천 0
 죄송한데 쪼금만 더 자세하게 설명해주실수 있나요 ㅠㅠ 초보여서 죄송합니다....예를 보여주시면 더욱 감사하겠습니다. 
한대승(불의회상) / 2013/06/20 16:19:19 / 추천 0
function gets($cate) {
return $this->db->query('SELECT * FROM topic')->where('cate', $cate)->result();
}

하얀당근 / 2013/06/20 16:52:25 / 추천 0
그런데 $cate 라는 부분을 어디서 받아오죠?
주소가 "....~/ topic / get / sub01 / 5 " 이런 식이라면 아래의 get에서 값을 받아오는데 조건을 어떤식으로 수정해야 할지 모르겠습니다 ㅠㅠ 자꾸 여쭈어봐서 죄송합니다. 

function get($topic_menu_code, $topic_id){
  $this->db->select('id');
  $this->db->select('menu_code');
  $this->db->select('title');
  $this->db->select('description');
  $this->db->select('UNIX_TIMESTAMP(created) AS created');
  
  return $this->db->get_where('topic', array('menu_code'=>$topic_menu_code, 'id'=>$topic_id))->row();
 }

한대승(불의회상) / 2013/06/20 17:13:35 / 추천 0
get이 컨틀롤러 인가요? 모델인가요?
하얀당근 / 2013/06/20 17:18:15 / 추천 0
 모델이여
하얀당근 / 2013/06/20 17:19:32 / 추천 0
 컨트롤 get은 이렇게 생겼어요
    function get($menu_code, $id){ 
  $this->_head();
  $this->_sidebar();
  
  $topic = $this->topic_model->get($menu_code, $id);
  $this->load->helper(array('url','HTML','korean'));
        $this->load->view('get',array('contents'=>$topic));
        
  $this->_footer(); 
    }
변종원(웅파) / 2013/06/20 17:56:06 / 추천 0
$cate는 예로 든겁니다. 그런 식으로 변수를 넘겨서 모델에서 처리하라고 예제를 들어준거죠.

$cate에 해당하는 것은 하얀당근님이 만드시거나 받아오거나 해야하는거구요.

제가 예제를 안 올리는 이유는 간단합니다. 해결은 될지언정 학습에는 도움이 안됩니다.

그래서 이렇게 해라까지만 조언합니다. 

생각을 잘 해보세요. 주소에 따라 왼쪽 메뉴가 바뀔거니 주소의 컨트롤러명을 모델에 넘겨주고
모델에서는 먼저 db구조가 컨트롤러-메뉴1, 메뉴2, 메뉴3 이렇게 되어 있다는 전제하에
컨트롤러에 해당하는 메뉴1, 메뉴2, 메뉴3을 반환해서 사이드메뉴를 구성하는 겁니다.

하얀당근님이 처음에 한 방식은 낭비가 심할 수 있습니다. 메뉴를 다 가져와서 사이드메뉴에서 필요한
메뉴만 보여주는 방식이죠. 쓰지도 않는 데이터를 db에서 불러와서 가지고 있게 됩니다.
이렇게 프로그램 짜다 보면 습관됩니다. 

그래서 처음부터 원하는 데이터만 가져오게 하는 겁니다.


그래도 이해가 안된다면 코딩 중지하시고 구조 이해부터 하고 코딩하시는 걸 추천합니다.
코딩은 기술일 뿐이구요. 중요한 것은 로직입니다. 어떻게 프로그램으로 구현을 할 것인가.
그게 이해가 안되는데 어떻게 코딩을 할 수 있겠습니까?
하얀당근 / 2013/06/21 13:42:36 / 추천 0
두분 다 감사합니다.~ 덕분에 해결됐어요 ^^ 친절한 설명 감사합니다