CodeIgniter. How to pass data from Core controller to view without loading the view in the Core controller

Hello I’m kinda new to CodeIgniter but I’ve been working with it at least 3 months and it works great. Now I’m posting this because I just cannot figure out how to solve some code in which I’m working.

I’m going straight to the point; I have this on my MY_Controller:

<?php

class MY_Controller extends CI_Controller
{
	//Get user data for all controllers	
	public $users = array();
	
    function __construct()
    {
		parent::__construct();
			
		//Get user data to make it available for both Admin and Public Controllers
        $this->load->model('User_model');
        $data['users'] = $this->User_model->get_list();

		
		//Load Menu Library
		$this->load->library('menu');
		$this->pages = $this->menu->get_pages();
		
		// Brand/Logo
		$this->favicon = 'https://blogpersonal.net/wp-content/uploads/2017/08/favicon-v2-150x150.png';
		$this->brand = 'Some Name';
		$this->description = 'Some Description';
		$this->credits = 'https://blogpersonal.net/';
		$this->version = '1.1.1';
    }
}

class Admin_Controller extends MY_Controller
{

    function __construct()
    {
        parent::__construct();
      
        if (!$this->session->is_admin) {
            redirect('admin/login');
        }
		
		//some code here
		
    }
}

class Public_Controller extends MY_Controller{
	function __construct(){
		parent::__construct();

		//some code here
		$this->User_model->session_comprobate_member();
		
	}

}

class Social_Controller extends MY_Controller
{

    function __construct()
    {
        parent::__construct();
      
        if (!$this->session->is_member) {
            redirect('dashboard/login');
        }

		//some code here

    }
}

As you can see I’m loading a $users variable outside the __construct function in order to make it work with the __construct function itself and with the other controllers.

So the next thing is to load the user_model and from there get the $data[‘users’] to display it in the view but WITHOUT loading it. Here is my view:

        <!-- -->
        <ul class="nav navbar-nav">
          <?php if(!$this->session->is_member) : ?>
          <li><?php echo anchor('public/users/login', 'Login'); ?></li>
          <li><?php echo anchor('public/users/register', 'Register'); ?></li>
          <?php elseif($users) : ?>
            <!-- Messages: style can be found in dropdown.less-->
            <li class="dropdown messages-menu">
              <!-- Menu toggle button -->
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                <i class="fa fa-envelope-o"></i>
                <span class="label label-success">4</span>
              </a>
              <ul class="dropdown-menu">
                <li class="header">You have 4 messages</li>
                <li>
                  <!-- inner menu: contains the messages -->
                  <ul class="menu">
                    <li><!-- start message -->
                      <a href="#">
                        <div class="pull-left">
                          <!-- User Image -->
                          <img src="<?php echo base_url(); ?>assets/img/user2-160x160.jpg" class="img-circle" alt="User Image">
                        </div>
                        <!-- Message title and timestamp -->
                        <h4>Support Team<small><i class="fa fa-clock-o"></i> 5 mins</small></h4>
                        <!-- The message -->
                        <p>Why not buy a new awesome theme?</p>
                      </a>
                    </li>
                    <!-- end message -->
                  </ul>
                  <!-- /.menu -->
                </li>
                <li class="footer"><a href="#">See All Messages</a></li>
              </ul>
            </li>
            <!-- /.messages-menu -->
            <!-- Notifications Menu -->
            <li class="dropdown notifications-menu">
              <!-- Menu toggle button -->
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                <i class="fa fa-bell-o"></i>
                <span class="label label-warning">10</span>
              </a>
              <ul class="dropdown-menu">
                <li class="header">You have 10 notifications</li>
                <li>
                  <!-- Inner Menu: contains the notifications -->
                  <ul class="menu">
                    <li><!-- start notification -->
                      <a href="#">
                        <i class="fa fa-users text-aqua"></i> 5 new members joined today
                      </a>
                    </li>
                    <!-- end notification -->
                  </ul>
                </li>
                <li class="footer"><a href="#">View all</a></li>
              </ul>
            </li>
            <!-- Tasks Menu -->
            <li class="dropdown tasks-menu">
              <!-- Menu Toggle Button -->
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                <i class="fa fa-flag-o"></i>
                <span class="label label-danger">9</span>
              </a>
              <ul class="dropdown-menu">
                <li class="header">You have 9 tasks</li>
                <li>
                  <!-- Inner menu: contains the tasks -->
                  <ul class="menu">
                    <li><!-- Task item -->
                      <a href="#">
                        <!-- Task title and progress text -->
                        <h3>
                          Design some buttons
                          <small class="pull-right">20%</small>
                        </h3>
                        <!-- The progress bar -->
                        <div class="progress xs">
                          <!-- Change the css width attribute to simulate progress -->
                          <div class="progress-bar progress-bar-aqua" style="width: 20%" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">
                            <span class="sr-only">20% Complete</span>
                          </div>
                        </div>
                      </a>
                    </li>
                    <!-- end task item -->
                  </ul>
                </li>
                <li class="footer">
                  <a href="#">View all tasks</a>
                </li>
              </ul>
            </li>
            <!-- User Account Menu -->
            <?php // if($this->users) : ?>
                <li class="dropdown user user-menu">
                  <!-- Menu Toggle Button -->
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                    <!-- The user image in the navbar-->
                    <img src="<?php echo base_url(); ?>assets/img/user2-160x160.jpg" class="user-image" alt="User Image">
                    <!-- hidden-xs hides the username on small devices so only the image appears. -->
                    <span class="hidden-xs"><?php echo $this->users['username']; ?></span>
                  </a>
                  <ul class="dropdown-menu">
                    <!-- The user image in the menu -->
                    <li class="user-header">
                    <img src="<?php echo base_url(); ?>assets/img/user2-160x160.jpg" class="img-circle" alt="User Image">
                      <p><?php echo $this->users['name']; ?> - Web Developer<small>Member since Nov. 2012</small></p>
                    </li>
                    <!-- Menu Body -->
                    <li class="user-body">
                      <div class="row">
                        <div class="col-xs-4 text-center">
                          <a href="#">Followers</a>
                        </div>
                        <div class="col-xs-4 text-center">
                          <a href="#">Sales</a>
                        </div>
                        <div class="col-xs-4 text-center">
                          <a href="#">Friends</a>
                        </div>
                      </div>
                      <!-- /.row -->
                    </li>
                    <!-- Menu Footer-->
                    <li class="user-footer">
                      <div class="pull-left">
                        <a href="#" class="btn btn-default btn-flat">Profile</a>
                      </div>
                      <div class="pull-right">
                        <a href="<?php echo base_url(); ?>public/users/logout" class="btn btn-default btn-flat">Sign out</a>
                      </div>
                    </li>
                  </ul>
                </li>
            <?php //endif; ?>
            <li>
                <a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
            </li>
          <?php endif; ?>
          </ul>
        <!-- -->

Here is my User_model:

<?php

class User_model extends CI_MODEL
{

    function __construct()
    {
        parent::__construct();
        $this->table = 'users';
    }

    public function get_list()
    {
        $query = $this->db->get($this->table);
        return $query->result();
    }

    public function get($id)
    {
        $this->db->where('id', $id);
        $query = $this->db->get($this->table);
        return $query->row();
    }

    public function add($data)
    {
        $this->db->insert($this->table, $data);
    }

    public function update($id, $data)
    {
        $this->db->where('id', $id);
        $this->db->update($this->table, $data);
    }

    public function delete($id)
    {
        $this->db->where('id', $id);
        $this->db->delete($this->table);
    }

    public function login($username, $password)
    {
        $this->db->select('*');
        $this->db->from($this->table);
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $this->db->limit(1);

        $query = $this->db->get();

        if ($query->num_rows() == 1) {
            return $query->row()->id;
        } else {
            return false;
        }
    }
	
	//I need to work on these two
    public function get_username($users) {
        $this->db->select('id');
        $this->db->from('users');
        $this->db->where('username', $users);
        return $this->db->get()->row('id');
    }
	
    public function get_userid($user_id) {
        $this->db->from('users');
        $this->db->where('id', $user_id);
        return $this->db->get()->row();
    }
	///
	
    public function existent_username($username) {
        $query = $this->db->get_where('users', array('username' => $username));
        return $query->row_array();
    }
    public function existent_email($email) {
        $query = $this->db->get_where('users', array('email' => $email));
        return $query->row_array();
    }
	
    public function session_comprobate_member() {
        if ($this->session->userdata('is_member') != NULL) {
            redirect('dashboard');
        }
    }
	
    public function session_comprobate_admin() {
        if ($this->session->userdata('is_admin') != NULL) {
            redirect('admin');
        }
    }
	
}

I’ve been working with this for already three days and I’m desperate(not going to lie) . I just need help. Does somebody knows how can I do it without loading the view and just make it available for all views?; or any reference(book, video tutorial, online course).

Thanks for helping.

If you want to send data to a aview, but not show it, you can use the third parameter in the $this->load->view and save the generated data into a variable like this:

$view_content = $$this->load->view(‘my_view’, $data,TRUE);

in this way you send the data to the view, the view uses it and you get the generated content into a variable to use later.

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.