2013-06-02 31 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