2010-05-26 16 views
2

我即將爲在CodeIgniter中編寫的CMS編寫管理面板。隨時都會顯示一些用戶信息 - 無論是在佈局的標題部分還是側邊欄中。我習慣這樣做,因爲我個人希望和想法可以輕鬆得多,因爲我厭倦了一次又一次地向視圖發送相同的參數,當它需要顯示動態數據時反正在每一頁上(比如未讀消息,用戶名,姓名,狀態等)。管理控制檯 - 在佈局中顯示「靜態」數據的最佳方式是什麼?

我需要控制器和模型,我知道,但是我必須通過,例如,用戶的用戶名,未讀消息等每次我需要加載視圖?我應該爲此做一些類似的圖書館嗎?

現在我的問題是:如何在最佳實踐中做到這一點,併爲將來的維護做好準備?

我希望我的問題是可以理解的:)

回答

2

個人而言,我會擴展控制器庫(通過遵循Creating Libraries at codeigniter.com底部的指導創建一個MY_Controller)。

你會像平常一樣使用你的模型等。然後,你會在你的MY_Controller類中創建一個私有函數來獲得相關的「全局」數據,並調用

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

這將使該數據可從該點調用的所有意見爲$everywhere_data。然後在MY_Controller的構造函數中添加一個對該函數的引用,或許通過條件檢查用戶實際登錄。

如果收集並獲取所有數據很複雜,那麼可以編寫一個庫來處理它對你來說,但'控制器'部分仍然會由MY_Controller完成:即獲取數據,然後使用load-> vars()將其發佈到視圖。

作爲一個快速和未經考驗的例子,MY_Controller將開始類似如下:

<?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; 
     } 

    } 
... 
} 

注意的東西像_logged_in_userid()將訪問你的會話(例如return $this->session->userdata('logged_in_userid');)和_get_user()將訪問相關機型。

最後,你將有一個(在我的第一個例子或everywhere_data)訪問$logged_in_username,你會打電話到您的標題視圖等,這讓你的正常控制器整潔,使他們能夠專注於提供其特定的功能,阻止你重寫你的代碼幾次,並維護MVC的理想。

+0

非常有用,也是一個非常有趣的做法。非常感謝您的幫助和想法:) – rkj 2010-06-03 06:14:15

+0

沒問題!這就是這個網站的全部內容!毫無疑問,你會盡快回答我提出的問題:) – Kurucu 2010-06-03 11:03:42

0

您可以創建一個視圖只是爲了保存信息,如果你想保留它在一個地方從視圖本身就是一個$ _SESSION變量得到它。

+0

不確定我想爲此使用會話。我可以看到你的觀點,但我很想看到沒有使用會話的解決方案。 – rkj 2010-05-26 20:35:11

+0

這是一個例子。任何獲取數據的方式都可以在View中使用,畢竟它只是另一個PHP文件。它不遵守MVC最嚴格的定義,但它確實有效。 – 2010-05-26 20:50:08

+0

正是我的想法,它不堅持,我想。儘管非常感謝您的回覆伴侶。 :) – rkj 2010-05-27 07:12:48

相關問題