我正在使用简单的模板系统构建一个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();
有没有办法为这些变量设置默认值,所以我不必在每次加载页面之前调用模型中的方法?
答案 0 :(得分: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
。