2013-04-23 30 views
14

我有一个变量,应该在整个站点中存在的相关数据。我想知道是否有办法让这些数据可用于网站中的每个视图,而不是将这些数据传递给每个控制器的每个视图。数据可用于codeigniter中的所有视图

Pd。将此数据存储为会话变量/ ci会话cookie不是一种选项。

非常感谢。

回答

18

创建一个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

+0

嗨..将这种方法甚至加载'$ site_data'变量时,我们内部调用一个函数我们的控制器更新数据库而不是返回视图? – Rifky 2013-08-15 12:39:34

+0

@Rifky可能是一个迟到的答案,但我今天才发现它。是的,它将在所有控制器中扩展MY_Controller和所有视图。 – MarkSkayff 2017-07-25 20:46:20

13

您需要延长是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')

+0

谢谢:)作品wonderfull! – Steven 2013-06-24 11:43:58

+0

也为我工作! – racl101 2014-12-09 17:07:37

0

可以使用$这 - >负载>瓦尔( 'varname的',$数据);或加载数据在第一视图] onse和在此之后在任何加载的视图中使用

1

如果这不是一个变量(值不断变化),那么我会建议在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',$数据);

然后它工作绝对没问题,,,爱分享......有乐趣的工作的朋友

0

使用会话在控制器

$this->session->set_userdata('data');

然后在视图中显示

$this->session->userdata('data');

或者在基本视图文件中包含页面,例如index.php

include "page.php";

然后在page.php文件,

添加$this->session->userdata('data');的任何元素或DIV

那么这将会在所有的意见

2

坐落在的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"> 
相关问题