Données disponibles pour toutes les vues en codeigniter

j'ai une variable, contenant des données qui devraient être présentes dans tout le site. Au lieu de transmettre ces données à chaque affichage de chaque contrôleur, je me demandais si il existe un moyen de rendre ces données disponibles pour chaque vue dans le site.

Mp. Le stockage de ces données sous forme de cookie session / session ci n'est pas une option.

Merci beaucoup.

16
demandé sur user1739460 2013-04-23 17:48:39

7 réponses

Créer un MY_Controller.php Enregistrez et sauvegardez-le dans le dossier application/core. En elle, quelque chose comme:

class MY_Controller extends CI_Controller {

   public $site_data;

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

tout au long de vos controllers, vues,$this->site_dataest maintenant disponible. Notez que pour que cela fonctionne, tous vos autres controllers doivent étendre MY_Controllerau lieu de CI_Controller.

22
répondu Mudshark 2013-04-23 14:07:06

vous devez étendre CI_Controller pour créer un contrôleur de 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);

     }  
}

contrôleurs/la bienvenue.php

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

vues/la bienvenue.php

var_dump($some_var);

Note: pour obtenir ce vars dans vos fonctions ou controllers, vous pouvez utiliser $this->load->get_var('some_var')

13
répondu Aurel 2013-04-23 14:14:08

Set application/config / autoload.php

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

Créer application/libraries / 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);
    }
}

de votre vues

<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">
2
répondu 2015-08-20 22:17:59

Si ce n'est pas une Variable(d'une valeur de changer) alors je suggère de créer une constante dans la constante.fichier php sous le répertoire de configuration dans le répertoire apps, si c'est une variable, continuez à changer, alors je suggérerais de créer un contrôleur personnalisé dans le dossier core (s'il n'existe pas, allez de l'avant un dossier create "core") sous le dossier apps. Besoin de faire quelques changements dans un autre contrôleur comme mentionné ici : étendez votre nouveau contrôleur avec la classe" CI_Controller". Exemple

ouvrir-php-tag if ( ! défini ('BASEPATH')) exit ('pas d'accès direct au script autorisé'); classe LD_Controller extends CI_Controller { } proche-php-balise

Ici LD_ est mon mot-clé personnalisé, si vous voulez changer, vous pouvez le changer dans config.fichier php sous la ligne# 112 comme indiqué ici: $config ['subclass_prefix'] = 'LD_'; et étendez cette classe dans tous vos controllers comme "class Mynewclass extends LD_Controller.. Et dans LD_controller vous devez écrire la méthode dans laquelle vous voulez définir la variable / tableau de valeurs & appeler ce tableau dans toute l'application comme montré ici : la définition de la variable : var $data = array(); Méthode pour obtenir des valeurs de db à travers la classe Model:

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

pour appeler cette variable dans la vue : print_r($this->data['livres']);); vous obtiendrez toutes les valeurs de tableau... ici nous devons nous assurer qu'au moins un paramètre "$data" doit être passé sinon aucun problème vous pouvez définir ce $data param dans la vue comme montré ici : $this - > load - >view ('mybookstore',$data);

ensuite, il fonctionne tout à fait bien,,, d'amour à partager... amusez-vous un travail les amis

1
répondu Srinivasu 2014-08-16 13:28:07

utilisez les sessions dans vos controllers

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

puis de les afficher dans votre vue.

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

ou inclure une page dans le fichier de vue de base E. g index.php

include "page.php";

puis à la page.php,

ajouter $this->session->userdata('data'); pour tout élément ou div

ensuite, ce sera diffusée sur tous vos points de vue

1
répondu Emman Etti 2015-03-18 18:47:16

vous pouvez utiliser $this->load->vars('varname', $data);[ ou de charger des données à 1ère vue seulement] onse et de l'utiliser en tout chargé vues après ce

0
répondu michail1982 2013-04-23 14:27:14

j'ai lu toutes les réponses, mais imho la meilleure approche est via hook:

  1. Créer un crochet, de recevoir de nouveaux messages, par exemple:

    class NewMessages {
        public function contact()
        {
            // Get CI instance CI_Base::get_instance();
            $CI = &get_instance(); // <-- this is contoller in the matter of fact
            $CI->load->database();
    
            // Is there new messages?
            $CI->db->where(array('new' => 1));
            $r = $CI->db->count_all_results('utf_contact_requests');
    
            $CI->load->vars(array('new_message' => $r));
        }
    }
    
  2. fixez-le à un certain point du flux, par exemple sur 'post_controller_constructor'. De cette façon, il sera chargé à chaque instanciation de votre controller.

    $hook['post_controller_constructor'][] = array(
        'class'    => 'NewMessages',
        'function' => 'contact',
        'filename' => 'NewMessages.php',
        'filepath' => 'hooks',
        'params'   => array(),
    );
    
  3. Maintenant, nous pouvons accéder à notre variable $new_message dans chaque vue ou modèle.

Aussi simple que ça :)

0
répondu Stojko 2018-07-01 15:26:07