2010-03-26 23 views
9

Sto usando dati $ in tutte le mie opinioni $this->load->view('my_view', $data);CodeIgniter variabile globale

ho autoLoad anche un controller seguendo questa guida Extending Core Controller

ma voglio fare $ dati globali perché in views c'è un barra laterale che è costante per tutto il progetto e visualizza informazioni recuperate attraverso db controller autocaricate

Attualmente devo scrivere manualmente $ data [ 'todo'] per ciascuno e per recuperare informazioni da autoavviata modello.

Grazie.

risposta

16

1: Creare MY_Controller in application/libraries con le seguenti:

class MY_Controller extends Controller { 
    var $data;  
    //constructor function    
} 

2: Sostituire Controller a MY_Controller in tutti i file del controllore e caricare opinioni con $this->data

class Contact extends Controller { //to.. } 

class Contact extends MY_Controller { 
$this->load->view('contact_view', $this->data); 
} 

in questo modo è possibile eseguire le funzioni predefinite applicabili a tutto il sito in MY_Controller come le impostazioni di caricamento.

+0

questo non sta funzionando per me !! – JoeM05

+0

Se non funziona, prova a inserire l'applicazione di informazioni MY_Controller.php/core E se cambi il prefisso a qualcosa, assicurati di cambiarlo in config.php @ $ config ['subclass_prefix'] –

5

Mi sono imbattuto in un problema simile prima di oggi. Ho trovato che un modo più semplice, piuttosto che i globals, era usare le costanti. È possibile definire un file di costanti che caricherà dal file index.php:

// Include additional constants 
$defines_file = 'includes/defines.php'; 
if (file_exists($defines_file)) 
{ 
    require_once($defines_file); 
} 

Quindi è possibile aggiungere le costanti al file defines.php:

define(MY_CONSTANT,'my constant info'); 

In questo modo essi saranno disponibili in qualsiasi file in tutto il sistema direttamente: echo MY_CONSTANT; oppure è possibile assegnarli alle variabili.

Ho deciso che in questo modo sarebbe stato più semplice per me poiché avrei solo 1 luogo in cui andare quando/se avessi avuto bisogno di cambiare le costanti.

Più: http://codeigniter.com/forums/viewthread/56981/#280205

+0

La sua buona idea e sto già usando per tutti i valori costanti ma questo non è adatto per me perché sto ricevendo i dati da db che è diverso ogni volta. L'utilizzo di un altro script include non mi consente di utilizzare la lib di database CI incorporata, quindi ho dovuto procedere in questo modo. – Shishant

-1

Invece di rendere i dati visione globale, mi consiglia di utilizzare HMVC per costruire un modulo per la produzione di questo punto di vista barra laterale. HMVC è un bel modo pulito per codificare viste parziali.

+3

HVMC è eccessivo quando parli di qualcosa di semplice come viste parziali. Se hai una vista parziale che non cambia molto, basta caricare la vista nella costante stessa: 'define ('MY_VIEW', $ this-> load-> view ('my_view', '', TRUE));' - quindi semplicemente echo la costante MY_VIEW nella tua vista più grande. HVMC aggiunge un sacco di bagagli per qualcosa di così semplice. –

+0

Dove nel codice si caricano i dati necessari per il rendering della vista parziale? –

1

Ho usato una funzione di supporto per chiamare una funzione globale!

es.

function get_user($userid){ 
    $CI =& get_instance(); 

    $query = $CI->db->get_where('users', array('id' => $userid), 1, 0); 
    foreach ($query->result() as $row){ 
     // Return a object with userdata! 
     return $row; 
    } 
} 

Ora ho accesso al mio userdata ovunque ..