2012-09-28 24 views
0

我目前正在處理一個項目,這意味着我正在處理大量日期,並且我有一個視圖,用戶可以在其中查看各種事件的概述,周。Codeigniter - 將複雜的IF語句移出視圖

該視圖顯示多個帳戶的多個事件。

我面臨的問題是,我的觀點有一些非常複雜的IF語句(檢查當前日期,檢查事件日期,檢查帳戶ID對事件等),並開始看起來凌亂,我敢肯定它可以更容易/更簡化!

我將如何去移動一條IF語句到控制器?

我試過查找CI的最佳實踐,但沒有任何用處。

任何有識之士將不勝感激!

+0

聽起來像是你需要一些[主持人類](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter)在你的模型之上,你可以推擠所有這些條件,並給他們一些描述性的名字。 – complex857

+1

是否有助於將你的視圖分成幾部分,做你的if(無論是在控制器還是在「主」視圖中),並根據結果加載某個片段? –

+0

你能發表一些代碼嗎? –

回答

1

我會有一個單獨的函數(在控制器或庫中),用於準備數據。這個函數只需要返回一個數組,這樣就可以在HTML中構造數據而不需要所有的條件檢查。

這是一個數據預處理庫的例子,它不會只是工作,所以你需要創建一個完整的庫,它只是給你一個大概的想法。

<?php 
class prepare { 
    function prep_page_data($page_id) { 

     $output = array(); 

     $query = $this->ci->db->get_where("page_data", array("page_id" => $page_id)); 

     foreach($query->result_array() as $row) { 
      $output = $row; 
      //complete all addtional checks below 
      if($row['datetime'] < date("Y-m-d 00:00:00")) { 
       $output['archive'] = "old" 
      } 
      else { 
       $output['archive'] = "new"; 
      } 
      //you can add as many conditions as you like to complete the data collection. 
     } 

     return $output; 

    } 
} 

?>