2013-06-02 25 views
0

中我沒有找到類似的話題,所以我問:笨太多模型的查詢控制器

如何克服重複我的所有的CodeIgniter控制器功能相同型號查詢的問題?對於我的網站,我在幾乎相同的重複數據庫查詢建立我的頁眉和頁腳這樣的:

class Main extends CI_Controller 
     { 
     public function aboutus() 
    { 
    $this->load->model("read_db"); 
    $commondata["title"] = "Company - ".lang("aboutus"); 
    $commondata["mainmenu"] = $this->read_db->db_mainmenu(); 
    $commondata["mainprodcat"] = $this->read_db->db_allprodmaincat(); 
    $commondata["bestselling"] = $this->read_db->db_bestselling(); 
    $commondata["brochures"] = $this->read_db->db_allbrochures(); 
    $this->load->view("headerview", $commondata); 

    $contentdata["aboutus"] = $this->read_db->db_aboutus(); 
    $this->load->view("view_aboutus", $contentdata); 

    $this->load->view("footerview"); 
    } 

public function contact() 
    { 
    $this->load->model("read_db"); 
    $commondata["title"] = "Company - ".lang("contact"); 
    $commondata["mainmenu"] = $this->read_db->db_mainmenu(); 
    $commondata["mainprodcat"] = $this->read_db->db_allprodmaincat(); 
    $commondata["bestselling"] = $this->read_db->db_bestselling(); 
    $commondata["brochures"] = $this->read_db->db_allbrochures(); 
    $this->load->view("headerview", $commondata); 

      $contentdata["aboutus"] = $this->read_db->db_contact(); 
    $this->load->view("contactview", $contentdata); 

    $this->load->view("footerview"); 
    } 

     *further functions like this* 
     } 

是否有任何選項外包相同的重複模型調用到另一個函數或文件? 非常感謝您的任何建議。

+0

不是直接的答案,所以我把它寫成評論,但你應該考慮緩存這些數據。而不是每次打電話給腳註創建一次,您可以每小時生成一次。 Smarty擁有這樣的緩存處理能力,Memcache就是爲它設計的,而Redis是wellworth被檢出的。 –

+0

@ZsoltSzilagy CodeIgniter有自己的緩存處理,它很不錯。 – Shomz

+0

@ZsoltSzilagyKösziZsolt!這是一個好主意,但我想我仍然必須在第一次被調用時生成頁面,即使它會被兌現。 – Malvolio

回答

1

您可以在您的模型中創建一個組功能,然後只從控制器調用該功能。 例如:

模型

function db_bundle() { 
    $data = array(); 
    $data["mainmenu"] = $this->db_mainmenu(); 
    $data["mainprodcat"] = $this->db_allprodmaincat(); 
    $data["bestselling"] = $this->db_bestselling(); 
    $data["brochures"] = $this->db_allbrochures(); 
    return $data; 
} 

控制器

$commondata = $this->read_db->db_bundle(); 

注意,而不是包,您可以將您的通話將需要他們,所以你可以有聯繫單獨組的網頁,About Us等等,或者你可以讓你的bundle函數接受一些參數,這些參數將允許你控制哪些函數應該被調用,哪些不應該被調用。

+0

謝謝Shomz,之前我曾嘗試過,由於某種原因它沒有工作(我可能還沒有將$ data聲明爲數組)。現在,我再次嘗試使用您的代碼建議,它效果很好。 Thx再次! – Malvolio

+0

不客氣......你可能忘了從模型調用中刪除'read_db'。如果它幫助你,請不要忘記接受答案。乾杯! – Shomz