2013-04-23 32 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"> 
相關問題