2010-05-26 4 views
2

CodeIgniter로 작성된 CMS 용 관리자 패널을 작성하려고합니다. 레이아웃의 헤더 섹션과 사이드 바에서 모두 사용자 정보를 볼 수 있습니다. 나는 필자가 개인적으로 희망하고 생각하는 방식으로 그것을하는 데 익숙해 졌는데, 뷰에 동일한 파라메터를 반복해서 보내야하는 것에 지쳐 있었기 때문에, 표시해야하는 동적 데이터 언제나 모든 페이지에서 (예 : 읽지 않은 메시지, 사용자 이름, 이름, 상태 등).관리자 패널 - 레이아웃에 "정적"데이터를 표시하는 가장 좋은 방법은 무엇입니까?

저는 컨트롤러와 모델이 필요합니다.하지만보기를로드해야 할 때마다 예를 들어 사용자의 사용자 이름, 읽지 않은 메시지 등을 전달해야합니까? 이 일종의 도서관을해야할까요?

이제 내 질문은 : 모범 사례와 향후 유지 관리가 용이 ​​할 때 어떻게해야합니까?

나는 당신이 정보를 보유하고 한 곳에서 모든 것을 유지하려면보기 자체가 $ _SESSION 변수에서 그걸 얻기 위해 단지보기를 만들 수 있습니다 내 질문 :

답변

2

개인적으로 컨트롤러 라이브러리를 확장합니다 (Creating Libraries at codeigniter.com 하단의 안내에 따라 MY_Controller 만들기).

정상적으로 모델 등을 사용합니다. 그런 다음 관련 "글로벌"데이터를 얻을 수 있도록 MY_Controller 클래스에 개인 기능을 만들고 부를 것이다 $everywhere_data로 그 시점에서 호출 된 모든 뷰에 데이터를 사용할 수 있도록 할

$this->load->vars('everywhere_data', $data_from_relevant_models); 

. 그런 다음 해당 함수에 대한 참조를 MY_Controller의 생성자에 추가합니다. 실제로 사용자가 실제로 로그인했는지에 대한 조건부 검사를 사용합니다.

모든 데이터를 수집하고 가져 오는 것이 복잡한 경우 라이브러리를 작성하여 처리 할 수 ​​있습니다 당신을 위해,하지만 '컨트롤러'부분은 여전히 ​​MY_Controller에 의해 수행됩니다 : 즉, 데이터를 가져온 다음 load-> vars()를 사용하여 뷰에 게시합니다. _logged_in_userid() 같은 것들을 당신을위한 세션 (예를 들어, return $this->session->userdata('logged_in_userid');)에 액세스 할 것이라고

<?php 
class MY_Controller extends Controller 
{ 
    private $logged_in_user; 


    function MY_Controller() 
    { 
     parent::Controller(); 

     if($this->_logged_in_userid() > 0) 
     { 
      $this->logged_in_user = $this->_get_user($this->logged_in_userid()); 

      $this->load->vars('logged_in_username', $this->logged_in_user->username); 
     } else { 
      $this->logged_in_user = false; 
     } 

    } 
... 
} 

주 및 _get_user()는 관련 모델에 액세스 할 : 신속하고 검증되지 않은 예를 들어

는 MY_Controller은 다음과 같은 것을 시작합니다.

마지막으로, 당신은 그들이 자신의 특정 기능을 제공에 초점을 맞출 수 있도록 등이 일반 컨트롤러 정리 된 잎 당신이 당신의 헤더에 부를 것이다 (내 첫 번째 예 또는 everywhere_data) $logged_in_username에 액세스 볼 수있을 것입니다, 당신을 중지 코드를 여러 번 다시 작성하고 MVC 이상을 유지합니다.

+0

매우 유용하고 매우 흥미로운 방법입니다. 도와 주셔서 감사합니다. :) – rkj

+0

문제 없습니다! 이것이이 사이트의 모든 것입니다. 의심 할 여지없이 내가 언젠가는 질문하는 것에 답할 것입니다 :) – Kurucu

0

이해할 수 있기를 바랍니다.

+0

세션을이 용도로 사용하고 싶지는 않습니다. 나는 당신의 요점을 볼 수 있지만 세션을 사용하지 않고도 해결책을보고 싶습니다. – rkj

+0

예입니다. 어떤 방식 으로든 뷰 내에서 데이터를 얻는다면, 그것은 단지 또 다른 PHP 파일 일뿐입니다. MVC의 가장 엄격한 정의를 따르지는 않지만 작동합니다. –

+0

정확히 내 생각도 고수하지 않는다. 답변 해 주셔서 감사합니다. :) – rkj

관련 문제