2013-04-23 19 views
14

Ho una variabile, che contenga i dati che dovrebbero essere presenti nell'intero sito. Invece di trasmettere questi dati a ciascuna vista di ciascun controller, mi chiedevo se esiste un modo per rendere disponibili questi dati per ogni vista del sito.Dati disponibili per tutte le viste nel codeigniter

Pd. Memorizzare questi dati come un cookie di sessione variabile/ci sessione non è un'opzione.

Grazie mille.

risposta

18

Creare un file MY_Controller.php e salvarlo all'interno dell'applicazione/cartella principale. In esso, qualcosa di simile a:

class MY_Controller extends CI_Controller { 

    public $site_data; 

    function __construct() { 
     parent::__construct(); 
     $this->site_data = array('key' => 'value'); 
    } 
} 

Durante i controller, viste, $this->site_data è ora disponibile. Nota che affinché funzioni, tutti gli altri controller devono estendere MY_Controller anziché CI_Controller.

+0

Hi .. sarà questo metodo caricare la variabile '$ site_data' anche quando viene chiamata una funzione all'interno il nostro controller che aggiorna il db piuttosto che restituire una vista? – Rifky

+0

@Rifky Probabilmente una risposta tardiva, ma l'ho appena trovata oggi. Sì, sarà disponibile in tutti i controller estendendo MY_Controller e tutte le visualizzazioni. – MarkSkayff

13

è necessario estendere CI_Controller per creare un controller di base:

http://ellislab.com/codeigniter/user-guide/general/core_classes.html

core/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); 

    } 
} 

controllori/welcome.php

class Welcome extend MY_Controller { 
     public function index() { 
      $this->load->view('welcome'); 
     } 
} 

views/welcome.php

var_dump($some_var);

Nota: per ottenere questo vars nelle funzioni o controller, è possibile utilizzare $this->load->get_var('some_var')

+0

Grazie :) funziona meravigliosamente! – Steven

+0

Ha funzionato anche per me! – racl101

0

è possibile utilizzare $ this-> load-> Vars ('nomevar', $ dati); [o caricare i dati solo alla prima vista] onse e utilizzare in qualsiasi vista caricata dopo questo

1

Se questa non è una variabile (il valore continua a cambiare), suggerirei di creare una costante nel file constant.php nella directory di configurazione in la directory apps, se è una variabile che continua a cambiare, suggerirei di creare un controller personalizzato nella cartella principale (se non esiste, andare avanti creare una cartella "core") sotto la cartella App. È necessario apportare alcune modifiche ad altri controller come indicato qui: estendere il nuovo controller con la classe "CI_Controller". Esempio

open-php-tag if (! Defined ('BASEPATH')) exit ('Nessun accesso diretto allo script consentito'); classe LD_Controller estende CI_Controller {} vicino-php-tag

Qui LD_ è la mia parola chiave personalizzato, se si vuole cambiare si può cambiare nel file config.php in linea # 112 come illustrato di seguito: $ config ['subclass_prefix'] = 'LD_'; e estendi questa classe in tutti i tuoi controller come "classe Mynewclass estende LD_Controller .. E in LD_controller devi scrivere il metodo con cui vuoi definire la variabile/matrice di valori & chiamare tale array in tutta l'applicazione come mostrato qui: variabile di definizione: var $ data = array(); metodo per ottenere valori da db attraverso la classe del modello:

function getbooks() 
{ 
    $books = $this->mybooks_model->getbooks(); //array of records 
    $this->data = array('books'=>$books); 
} 

per chiamare questa variabile nelle viste: print_r ($ this-> data [ 'libri']);); otterrai tutti i valori dell'array ... qui dobbiamo assicurarci che almeno un parametro "$ dati" debba essere passato se non ci sono problemi puoi definire questo $ data param nella vista come mostrato qui: $ this- > load-> view ('myBookstore', $ dati);

allora funziona assolutamente bene ,,, piacerebbe condividere ... avere un divertente lavorare amici

0

utilizzare le sessioni nelle vostre controller

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

poi visualizzare nella vista

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

Oppure includere una pagina nel file di visualizzazione di base, ad esempio index.php

include "page.php";

poi nel page.php,

aggiungere $this->session->userdata('data'); a qualsiasi elemento o div

allora questo mostrerà a tutti i vostri punti di vista

2

Situato in application/config/autoload .php

$autoload['libraries'] = array('config_loader'); 

Crea applicazioni/librerie/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); 
    } 
} 

sulle tue vista

<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"> 
Problemi correlati