CodeIgniter:如何设置页面中常见变量的默认值?
我正在用CI建立一个网站,使用一个简单的模板系统 这是我的基本模板:CodeIgniter:如何设置页面中常见变量的默认值?,codeigniter,Codeigniter,我正在用CI建立一个网站,使用一个简单的模板系统 这是我的基本模板: $this->load->view('includes/header'); $this->load->view($main_content); $this->load->view('includes/footer'); 我有一组变量要传递给我的视图,我知道我可以这样做: $data['title'] = 'title goes here'; $data['main_content'] =
$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);
$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);
到目前为止,一切都很好。但是我希望上面的变量集具有默认值,这样我就不必在每次加载模板时声明整个变量集
我提出的解决方案是在主控制器下声明公共静态变量,如下所示:
public static $default_data = array(
'title' => 'Generic Title Goes Here',
'main_content' => 'home_view'
);
然后我可以像这样加载我的视图:
$data['title'] = 'title goes here';
$data['main_content'] = 'name of page goes here';
$this->load->view('template', $data);
$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();
有没有办法为这些变量设置默认值,这样我就不必在每次加载页面之前调用模型中的方法了?找到了解决方案。希望这是一个好的。把它写下来,希望它能帮助别人 我扩展了主控制器,并将所有公共变量放在那里——静态和动态。我将它们声明为受保护,因此它们在所有视图中都可用 这是
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\u controller
,而不是class Home extends CI\u controller
,感谢您共享解决方案