2010-03-26 25 views
9

Ich verwende Daten $ in alle meine Ansichten $this->load->view('my_view', $data);CodeIgniter globale Variable

ich auch haben AutoLoad- einen Controller-Anschluss an diese Führung Extending Core Controller

Aber ich will $ Daten global machen, weil in views eine ist Sidebar, die für das gesamte Projekt konstant ist und Info über Db in Autoloaded Controller

anzeigt

Zur Zeit muss ich manuell $ data ['todo'] für jeden schreiben und Informationen aus dem Autoloaded Modell abrufen.

Vielen Dank.

Antwort

16

1: Erstellen MY_Controller in application/libraries mit folgenden:

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

2: Ersetzen Controller zu MY_Controller in allen Controller-Dateien und laden Ansichten mit $this->data

class Contact extends Controller { //to.. } 

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

Auf diese Weise können Sie Standardfunktionen ausführen, die für die gesamte Site in MY_Controller wie Ladeeinstellungen gelten.

+0

Das ist nicht für mich funktioniert !! – JoeM05

+0

Wenn es nicht funktioniert, dann versuche MY_Controller.php info Anwendung/Kern Und wenn Sie das Präfix zu etwas ändern, dann achten Sie darauf, es in Config zu ändern.php @ $ config ['subclass_prefix'] –

5

Ich stieß heute früher auf ein ähnliches Problem. Ich fand, dass ein einfacherer Weg, als globale, war, Konstanten zu verwenden. Sie können eine Konstanten-Datei definieren, die von der index.php geladen werden:

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

Dann können Sie Ihre Konstanten in die defines.php Datei hinzufügen:

define(MY_CONSTANT,'my constant info'); 

diese Weise können sie in einer beliebigen Datei verfügbar sein wird, im ganzen System entweder direkt: echo MY_CONSTANT; oder Sie können sie Variablen zuweisen.

Ich entschied, dass dieser Weg für mich einfacher wäre, da ich nur einen Standort hätte, wenn/wenn ich die Konstanten ändern müsste.

Mehr: http://codeigniter.com/forums/viewthread/56981/#280205

+0

Seine gute Idee und ich verwende bereits für alle konstanten Werte, aber das ist nicht geeignet für mich, weil ich die Daten von db bekomme, die jedes Mal anders ist. Unter Verwendung eines anderen include-Skripts lasse ich nicht die eingebaute CI-Datenbankbibliothek verwenden, also musste ich diesen Weg gehen – Shishant

-1

Anstatt machen die Ansicht Daten global, würde ich HMVC mit empfehlen, ein Modul bauen diese Seitenleiste Ansicht zu erzeugen. HMVC ist eine schöne, saubere Art, Teilansichten zu kodieren.

+3

HVMC ist übertrieben, wenn Sie über etwas so einfaches wie Teilansichten sprechen. Wenn Sie eine Teilansicht haben, die sich nicht viel ändert, laden Sie einfach die Ansicht in die Konstante selbst: 'define ('MY_VIEW', $ this-> load-> view ('my_view', '', TRUE));' - dann einfach die MY_VIEW-Konstante in Ihrer größeren Ansicht widerhallen. HVMC fügt eine Menge Gepäck für so einfache Dinge hinzu. –

+0

Wo im Code laden Sie die Daten, die zum Rendern der Teilansicht benötigt werden? –

1

Ich habe eine Hilfsfunktion verwendet, um eine globale Funktion aufzurufen!

z. Jetzt

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; 
    } 
} 

Ich habe Zugriff auf meine Benutzerdaten überall ..