CI 묻고 답하기

제목 ci 질문입니다.
카테고리 CI 4 관련
글쓴이 kasumil 작성시각 2021/08/06 11:11:08
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 8442   RSS

안녕하세요.

현재 코드이그나이터 이용해서 작성중입니다.

navigation bar에 해당 컨트롤러를 이용하여 해당 값을 넘겨주려고 합니다.

nav는 어디서나 페이지내에서 호출이 되며 해당 php를 호출할 경우 자동으로 값 호출되어야 합니다.

해당 부분에서 호출이 안되어 에러를 뿜어내고 있습니다.

하지만, 해당 nav.php 주소로 들어가야 정상적으로 호출이 되며,

다른 곳 home나 mypage.php 내에 있는 nav.php 이런곳에서는 해당 값이 해당 nav.php로 값이 넘어오지 않습니다.

컨트롤러 안에 아래의 코드를 작성했는데, 어떻게 해야 다른 곳에서 호출하는 nav.php에다가 해당 값을 넘길 수 있을까요?

해당 부분은 어떻게 처리해야할까요?

 

현재 nav의 컨트롤러 코드입니다.

public function index()
    {
        $botInfo = json_decode($this->botInfo());
        $data["bots"] = $botInfo->bots;
        $this->load->view('해당 navbar', $data);
    }

 

 다음글 CI4 폴더이름변경 관련 질문드립니다. (4)
 이전글 ci4 csrf 사용 관련해서... (5)

댓글

변종원(웅파) / 2021/08/06 11:44:29 / 추천 0

헤더와 메뉴, 푸터 부분은 보통 분리해서 뷰를 따로 선언하고 같이 호출하는 형태로 처리하거나

        $this->load->view('header', $data);
        $this->load->view('해당 navbar', $data);

        $this->load->view('contents', $data);

        $this->load->view('footer', $data);    

레이아웃을 사용하여 1회 선언하여 전체에 적용하는 형태로 사용합니다. (포럼에서 레이아웃 검색해보세요) 

kasumil / 2021/08/06 13:20:38 / 추천 0

변종원 / 답변감사합니다.

제가 원하는 답변은 navbar에 연결된 컨트롤러에서 서버통신하고, 그 값을 어디서나 호출되는 nav바에 붙이는 것이었습니다.

지금 현재 서버통신 호출은 제대로 진행이되고, nav.php가 포함된 home.php, mypage.php에서 nav.php를 호출시 nav컨트롤러에서 변수를 nav.php에 넘기는 부분에서 해당 변수가 nav.php에 들어오지 않아 발생하는 문제입니다.

아쉽지만 제 질문에 맞는 답변이 아닙니다.

 

좀 고민하다가 찾았는데, nav컨트롤러에선 작동되지 않고, 해당 페이지 컨트롤러에서 해당 서버통신 로직을 추가하여,

$this->load->view('nav.php', $headerdata)로 넘겨야 해당 부분이 처리가 되는 내용이었습니다.
 
답변 감사합니다.
변종원(웅파) / 2021/08/06 15:45:43 / 추천 0

아직도 제가 질문을 이해를 못하겠네요. ㅎㅎㅎ

nav.php가 포함된 home.php, mypage.php에서 nav.php를 호출시 nav컨트롤러에서 변수를 nav.php에 넘기는 부분에서 해당 변수가 nav.php에 들어오지 않아 발생하는 문제입니다. -> 이게 무슨 말인지 이해가 되시는 분 계실까요?

변종원(웅파) / 2021/08/06 15:46:44 / 추천 0
변종파는 누구신지? ^^
kasumil / 2021/08/06 21:38:39 / 추천 0

변종원 / 죄송합니다. 변종원(웅파)를 보고 치다가 변종파라고 적었네요;;;

기존에 nav에서 호출하는 컨트롤러가 있고,

다른 페이지 부분인 home, mypage 각페이지마다 컨트롤러가 있습니다.

기존에는 nav 자체 컨트롤러에서 서버통신하고 동적 메뉴에 서버통신 값이 들어간 채로 이를 각 페이지에서 그냥 쓰는 방식으로 생각했습니다. include 'nav.php' 이렇게 사용했죠.

하지만 이부분이 생각대로 구현되지 않았고, 어쩔 수 없이 각페이지 컨트롤러에서 말씀하신 방법대로

 $this->load->view('header', $data);
        $this->load->view('해당 navbar', $data);

        $this->load->view('contents', $data);

        $this->load->view('footer', $data);  로 처리하였습니다.

 

변종원(웅파) / 2021/08/09 08:25:32 / 추천 0

kasumil / 컨트롤러에서 다른 컨트롤러를 호출해서 쓰고 싶으신 거였네요. 할 수는 있으나 편의상 제가 알려드린 방법을 일반적으로 사용합니다.

레이아웃 도입해보세요. 1번 선언으로 편하게 사용할 수 있습니다.