CI 묻고 답하기

제목 view 이미지를 만들려고 하는 과정에 질문이 있습니다.
글쓴이 과학나라 작성시각 2013/09/16 13:01:02
댓글 : 12 추천 : 0 스크랩 : 0 조회수 : 12765   RSS
  우선 이렇게 해보았는데요 소스입니다.

<tr class="title" align="center">
    <td height="30">번호</td>
     <td>제목</td>

<?php foreach ($result as $row): ?>

--생략--

<a href="/welcome/view"><?=$row->content?></a>
list view에서  제목을 클릭하면 경로대로 "/welcome/view" 컨트롤러로 가집니다. 

========================<controller>========================
 
// view 화면 function view() { $data['title']='글읽기'; $this->load->model('simplebbsmodel') $this->load->view('view_message'); // 뷰 - 뷰 }
이렇게 보시다싶이 medel "
simplebbsmodel"를 호출하고 view페이지인 view_message로 뿌려지게 됩니다.

medel 부분은
============================<medel> =========================== //글읽기
    function read()
    {
        
     $data['name'] = $row['name'];
     $data['content'] = $row['content'];
     $data['memo'] = $row['memo'];
      
        $this->load->view('view_message',$data);
    }  


이렇게 하면 view 페이지는 가지는데 "
Undefined variable"  찾을수 없다라고 나오네요..

그럼 데이터를 잘못 가져오는건데 무슨 문제가 있는건지 말씀 부탁드립니다.

 다음글 다중DB 대해서 질문 드려요 (2)
 이전글 ci로 개인 cms 제작중입니다. (1)

댓글

과학나라 / 2013/09/16 13:01:40 / 추천 0
 controller페이지에서 

"$this->load->model('simplebbsmodel')"  대신에 "$this->simplebbsmodel->read();" 넣어봐도 잘 안되네요. 이럴때 "Call to a member function read() "라는 오류 메세지가 뜹니다. 무슨말인지ㅠ
한대승(불의회상) / 2013/09/16 14:59:02 / 추천 0
모델에서 view를 로드 하고 싶다는건가요?
과학나라 / 2013/09/16 14:59:29 / 추천 0
 네 그렇습니다
한대승(불의회상) / 2013/09/16 15:03:33 / 추천 0
$data 값을 리턴 하신후 컨트롤러에서 view를 로드 하시는게 정석 입니다.

뷰의 출력 결과를 리턴 값으로 받고 싶다면 view load시 3번째 인자를 TRUE로 주시면 됩니다.
출력은 컨트롤러를 통해서 하세요.

function read()
{
  . 
  .
  .
  .
  return $this->load->view('view_message', $data, TRUE);
}



변종원(웅파) / 2013/09/16 15:15:21 / 추천 0
과학나라/ 불의회상님 말씀처럼 하시거나 라이브러리로 만들어서 처리하세요.

지금 하려고 하시는 것은 mvc패턴 사용에서 살짝 벗어나는 겁니다.
과학나라 / 2013/09/16 15:20:53 / 추천 0
 죄송하지만 말씀하신대로 해도 오류가 나오네요 ㅠ,ㅠ

controller
function view()
    {
        $data['title']='글읽기';
       
 $this->load->model('simplebbsmodel');
     $this->load->view('view_message');  // 뷰 - 뷰
    }  
medel 
 function read()
    {
     $data['name'] = $row['name'];
     $data['content'] = $row['content'];
     $data['memo'] = $row['memo'];
      
     return $this->load->view('view_message', $data, TRUE);
    }  


view
<tr>
 <td width="111" height="29" bgcolor="white">
 <p align="center">제목</p>
 </td>
 <td width="627" height="29" bgcolor="white" colspan="3">
  <p align="left"><?=$content?></p>
 </td>
</tr>

오류가 

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: row

Filename: models/simplebbsmodel.php

Line Number: 54

라고 나옵니다 ㅠ,ㅠ

한대승(불의회상) / 2013/09/16 15:24:20 / 추천 0
네... 그렇군요.

그런데 model에 있는 $row는 어디에서 값을 가져오나요?
에러 메시지는 $row 변수가 NULL 이라고 하는데요.
과학나라 / 2013/09/16 15:31:50 / 추천 0
 list view에서 가져옵니다.
<tr class="title" align="center">
            <td height="30">번호</td>
            <td>제목</td>
            <td>작성자</td>      
            <td>작성일자</td>      
            <td>조회수</td>
         </tr>
          <?php foreach ($result as $row): ?>
     <tr class="list_con">
        <td align="center"><?=$row->no?></td>
        <td align="center">
        <a href="/welcome/view"><?=$row->content?></a>
        </td>
       <td align="center"><?=$row->name?></td>
        <td align="center"><?=$row->date?></td>
        <td align="center"><?=$row->view?></td>
     </tr>
     <?php endforeach; ?>

변종원(웅파) / 2013/09/16 15:55:06 / 추천 0
프로그램은 바보(?)라서 개발자가 데이터를 넘겨주지 않으면 사용 못합니다.

리스트 뷰에 있는 데이터를 read()모델에 넘겨줘야 사용을 하죠. ^^

잘 이해가 안되시면 종이에 관계를 그리시고 최종 모델에서 필요한 데이터가 어디 있는지 파악하고
그걸 단계를 따라 넘겨주거나 그 데이터를 구할 수 있는 번호를 넘겨서 db에서 원하는 데이터를
구하거나 해야 합니다.
과학나라 / 2013/09/16 16:12:31 / 추천 0
 죄송하지만 변수 row를 road로 보내면 되는데 예시로 한번 부탁드려도 될까요ㅠ.ㅠ

다른 소스 봐도 이런 흔적은 볼수가 없어서요 ㅠㅠ 
한대승(불의회상) / 2013/09/16 16:54:16 / 추천 0
과학나라// 에러를 없애고 싶으시다면...아래 처럼 하시면 됩니다만.. 원하시는 결과는 받아 보실수 없을겁니다.
왜 그런지는 직접 찾아 보세요.
function read($row = array())
{
.
.
.
.
.
}

변종원(웅파) / 2013/09/16 16:54:33 / 추천 0
모델 로딩할때 전역변수처럼 $row를 넘기고 싶다는 말씀인가요?

제가 알기론 로딩할때는 변수 못넘기고 모델내의 함수 호출할때 넘깁니다.

$this->load->model('simplebbsmodel');
$this->simplebbsmodel->read($row);

모델 로딩하는 것과 사용하는 것은 다릅니다. 
모델 로딩을 한다고 자동으로 그 안의 함수가 호출되어 결과를 보내주는 것은 아닙니다.

모델 매뉴얼을 다시 한번 차근차근 보세요.