如何在layout / default中设置控制器和模型以在所有页面中加载

时间:2013-03-29 08:28:16

标签: php mysql codeigniter

布局

对于加载数据的所有页面,但模型和控制器不起作用。我指定的其他型号有效。我的意思是,一个控制器和所有页面的布局模型,但其他页面自己的模型和控制器。所有页面都有一个控制器,每页一个控制器。

<?php foreach ($sidebars as $row):  ?>
<tr><td><?php echo $row->title; ?> </td></tr>
<?php endforeach; ?>

<div id="main" role="main" class="content">
            {content}------here this show my pages content other model and controller
</div>

控制器

在我的控制器上我加载了我的页面

现在,如果我再次加载其他页面,我必须输入

$this->load->model('side_model');
            $data['sidebars'] = $this->side_model->get_sidebar();

这是我的页面控制器它的工作但其他控制器如果不提及所以不工作我想让它作为每个页面的控制器,我不想在每个页面控制器上面提到代码

"<?php"
    public $layout = 'default'

    public function index()
    {
        $this->load->model('side_model');
        $data['sidebars'] = $this->side_model->get_sidebar();   
        $this->load->view('Layout/default',$data);
    }

模型

function get_sidebar(){
    $this->db->select('*');
    $this->db->from('side');
    $this->db->where('active','1');
    $this->db->order_by('added_date', 'DESC');

    return $this->db->get()->result();

如何为所有页面制作一个具有多种功能的主控制器和型号?

2 个答案:

答案 0 :(得分:1)

创建一个名为core / MY_Controller.php的文件:

    class MY_Controller extends CI_Controller {

        public function __construct(){
            parent::__construct();
            $this->load->model("side_model");
            $this->data["sidebars"] = $this->side_model->get_sidebar();
        }

        protected function get_html_meta($meta){
            // method will be available for all extending controllers
            return ucfirst($meta)." ".date("Y-m-d");
        }

    }

从现在开始,您应该扩展MY_Controller而不是CI_Controller,在现有控制器中,您现在可以传递视图可用的变量$this->data(我添加了一些$this->data用法示例和其范围:

class your_controller extends MY_Controller {

    public function index(){
        $this->data["html_meta"] = $this->get_html_meta("this is meta");
        $this->data["html_title"] = "Hello World!";
        $this->load->view('Layout/default',$this->data);
    }

}

注意:$this->data不同,$data的范围在您声明的函数内。

对于全局模型,一旦MY_Controller构造函数(或autoload.php)加载模型,只要其他控制器扩展MY_Controller,就可以调用模型。

答案 1 :(得分:0)

编写自己的控制器

class ParentController extends CI_Controller {

    public function index()
    {
        echo 'Hello World!';
    }
}

class Blog extends ParentController {

    public function index()
    {
        echo 'Hello World!';
    }
}