我有一个变量,应该在整个站点中存在的相关数据。我想知道是否有办法让这些数据可用于网站中的每个视图,而不是将这些数据传递给每个控制器的每个视图。数据可用于codeigniter中的所有视图
Pd。将此数据存储为会话变量/ ci会话cookie不是一种选项。
非常感谢。
我有一个变量,应该在整个站点中存在的相关数据。我想知道是否有办法让这些数据可用于网站中的每个视图,而不是将这些数据传递给每个控制器的每个视图。数据可用于codeigniter中的所有视图
Pd。将此数据存储为会话变量/ ci会话cookie不是一种选项。
非常感谢。
创建一个MY_Controller.php
文件并将其保存在应用程序/核心文件夹中。在这里面,是这样的:
class MY_Controller extends CI_Controller {
public $site_data;
function __construct() {
parent::__construct();
$this->site_data = array('key' => 'value');
}
}
纵观你的控制器,视图,$this->site_data
现已推出。 请注意,为此,所有其他控制器需要扩展MY_Controller
而不是CI_Controller
。
您需要延长是CI_Controller创建一个基本的控制器:
http://ellislab.com/codeigniter/user-guide/general/core_classes.html
核心/ MY_Controller.php
<?php
class MY_Controller extend CI_Controller {
public function __construct() {
parent::__construct();
//get your data
$global_data = array('some_var'=>'some_data');
//Send the data into the current view
//http://ellislab.com/codeigniter/user-guide/libraries/loader.html
$this->load->vars($global_data);
}
}
控制器/的welcome.php
class Welcome extend MY_Controller {
public function index() {
$this->load->view('welcome');
}
}
的意见/ welcome.php
var_dump($some_var);
注:得到这个瓦尔在功能或控制器,你可以使用$this->load->get_var('some_var')
可以使用$这 - >负载>瓦尔( 'varname的',$数据);或加载数据在第一视图] onse和在此之后在任何加载的视图中使用
如果这不是一个变量(值不断变化),那么我会建议在constant.php文件中的config目录下创建一个常量应用程序目录,如果它是一个变量不断变化,那么我会建议在核心文件夹中创建一个自定义控制器(如果不存在,请继续创建文件夹“核心”)在apps文件夹下。需要对其他控制器进行一些更改,如下所述: 使用“CI_Controller”类扩展您的新控制器。示例
open-php-tag if(!defined('BASEPATH'))exit('No direct script access allowed'); 类LD_Controller扩展是CI_Controller {} 密切 的PHP标签
这里LD_是我的自定义关键字,如果你想改变,你可以在config.php文件更改线下#112,如下所示: $ config ['subclass_prefix'] ='LD_'; 并在所有控制器中扩展此类,作为“类Mynewclass扩展LD_Controller .. 而在LD_controller中,您必须编写要在其中定义变量/值的数组的方法&在整个应用程序中调用该数组,如下所示: 定义变量: var $ data = array(); 方法通过模型类来获得从分贝值:
function getbooks()
{
$books = $this->mybooks_model->getbooks(); //array of records
$this->data = array('books'=>$books);
}
调用此变量的观点:的print_r($这 - >数据[ '书籍']););你会得到所有的数组值...在这里,我们必须确保至少有一个“$ data”参数需要通过,如果不是没有问题,你可以在视图中定义这个$ data参数,如下所示: $ this- >负载>视图( 'mybookstore',$数据);
然后它工作绝对没问题,,,爱分享......有乐趣的工作的朋友
使用会话在控制器
$this->session->set_userdata('data');
然后在视图中显示
$this->session->userdata('data');
或者在基本视图文件中包含页面,例如index.php
include "page.php";
然后在page.php文件,
添加$this->session->userdata('data');
的任何元素或DIV
那么这将会在所有的意见
坐落在的application/config /自动加载.php
$autoload['libraries'] = array('config_loader');
创建应用程序/库/ Config_loader.php
defined('BASEPATH') OR exit('No direct script access allowed.');
class Config_loader
{
protected $CI;
public function __construct()
{
$this->CI =& get_instance(); //read manual: create libraries
$dataX = array(); // set here all your vars to views
$dataX['titlePage'] = 'my app title';
$dataX['urlAssets'] = base_url().'assets/';
$dataX['urlBootstrap'] = $dataX['urlAssets'].'bootstrap-3.3.5-dist/';
$this->CI->load->vars($dataX);
}
}
您意见
<title><?php echo $titlePage; ?></title>
<!-- Bootstrap core CSS -->
<link href="<?php echo $urlBootstrap; ?>css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap theme -->
<link href="<?php echo $urlBootstrap; ?>css/bootstrap-theme.min.css" rel="stylesheet">
嗨..将这种方法甚至加载'$ site_data'变量时,我们内部调用一个函数我们的控制器更新数据库而不是返回视图? – Rifky 2013-08-15 12:39:34
@Rifky可能是一个迟到的答案,但我今天才发现它。是的,它将在所有控制器中扩展MY_Controller和所有视图。 – MarkSkayff 2017-07-25 20:46:20