2

我正在使用一个简单的模板系统使用 CI 构建一个网站。

这是我的基本模板:

$this->load->view('includes/header');
$this->load->view($main_content);
$this->load->view('includes/footer');

我有一组变量要传递给我的视图,我知道我可以这样做:

$data['title'] = 'title goes here';
$data['main_content'] = 'name of page goes here';
$this->load->view('template', $data);

到现在为止还挺好。但是我希望上面的变量集具有默认值,因此我不必在每次加载模板时都声明整个变量集。

我想出的解决方案是在我的主控制器下声明公共静态变量,如下所示:

public static $default_data = array(
    'title' => 'Generic Title Goes Here',
    'main_content' => 'home_view'
);

然后我可以像这样加载我的视图:

$data = Home::$default_data;
$data['main_content'] = 'member_login_view'; // I can now declare only the relevant variables. all the rest will have the default values
$this->load->view('includes/template', $data);

这种方法工作正常,但我有一个问题:我想设置为默认值的一些变量不是静态的。例如,在标题中,我有一个统计数据行,显示我网站上的注册用户数量,以及我的数据库中的产品数量。所以我称之为

$data['stats'] = $this->products_model->get_stats();

有没有办法为这些变量设置默认值,所以我不必在每个页面加载之前调用模型中的方法?

4

1 回答 1

7

找到了解决方案。希望这是一个好的。把它写下来,希望它可以帮助别人。

我扩展了主控制器,并把所有的公共变​​量放在那里——静态的和动态的。我将它们声明为受保护的,因此我可以在所有视图中使用它们。

这是application/core/MY_Controller.php

class Home_Controller extends CI_Controller {

//Class-wide variable to store stats line
protected $stats;
protected $title;
protected $main_content;

public function __construct() {

    parent::__construct();

    //Put stats in Class-wide variable
    $this->stats = $this->products_model->get_stats();

    //Store stats in $data
    $data->stats = $this->stats;

    $data->title = 'Generic Website title';

    $data->main_content = 'home_view';

    //Load variables in all views
    $this->load->vars($data);

}

}

我将主控制器的第一行更改为class Home extends Home_Controller而不是class Home extends CI_Controller.

于 2013-02-04T09:07:06.943 回答