2010-03-26 80 views
9

estoy usando datos en todos mis puntos de vista $this->load->view('my_view', $data);CodeIgniter variable global

tengo también autoLoad un controlador $ siguiendo esta guía Extending Core Controller

Pero quiero hacer $ de datos global porque en views hay una barra lateral que es constante para todo el proyecto y muestra información obtenida a través de db en el controlador autocargado

Actualmente tengo que escribir manualmente $ data ['todo'] para cada uno y obtener información del modelo autocargado .

Gracias.

Respuesta

16

1: Crear MY_Controller en application/libraries con lo siguiente:

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

2: Sustituir Controller a MY_Controller en todos sus archivos de los controladores y cargar puntos de vista con $this->data

class Contact extends Controller { //to.. } 

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

de esta manera puede realizar funciones predeterminadas que son aplicables para todo el sitio en MY_Controller como la configuración de carga.

+0

Esto no está funcionando para mí !! – JoeM05

+0

Si no funciona, intente poner MY_Controller.php info application/core Y si cambia el prefijo a algo, asegúrese de cambiarlo en config.php @ $ config ['subclass_prefix'] –

5

Me encontré con un problema similar hoy. Descubrí que una manera más fácil, en lugar de globales, era usar constantes. Se puede definir un archivo de constantes que se carga desde el archivo index.php:

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

A continuación, puede añadir sus constantes al archivo defines.php:

define(MY_CONSTANT,'my constant info'); 

De esta manera estarán disponibles en cualquier archivo en todo el sistema, ya sea directamente: echo MY_CONSTANT; o puede asignarlos a variables.

Decidí que de esta manera sería más fácil para mí, ya que solo tendría 1 ubicación a la que ir cuando/si tuviera que cambiar las constantes.

Más: http://codeigniter.com/forums/viewthread/56981/#280205

+0

Es una buena idea y ya estoy usando todos los valores constantes, pero esto no es adecuado para mí porque obtengo los datos de db, que es diferente cada vez. Usar otro script de inclusión no me deja usar la lib de base de datos de CI incorporada así que tuve que ir de esta manera – Shishant

-1

En lugar de hacer los datos de vista global, me gustaría recomendar el uso HMVC para construir un módulo para producir este punto de vista la barra lateral. HMVC es una forma bonita y limpia de codificar vistas parciales.

+3

HVMC es excesivo cuando se trata de algo tan simple como vistas parciales. Si tiene una vista parcial que no cambia mucho, solo cargue la vista en la constante misma: 'define ('MY_VIEW', $ this-> load-> view ('my_view', '', TRUE));' - Entonces simplemente repite la constante MY_VIEW en tu vista más grande. HVMC agrega una gran cantidad de equipaje para algo tan simple como esto. –

+0

¿En qué parte del código carga los datos necesarios para representar la vista parcial? –

1

¡Utilicé una función auxiliar para llamar a una función global!

por ejemplo.

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

Ahora tienen acceso a los datos de usuario en todas partes ..