我有一個變量,應該在整個站點中存在的相關數據。我想知道是否有辦法讓這些數據可用於網站中的每個視圖,而不是將這些數據傳遞給每個控制器的每個視圖。數據可用於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