Ciprian
Ciprian

Reputation: 3226

Passing variable to view from controller

Can something like this be done? I want to pass a variable from a public function to my view.

public function index() {

    $home_data['username']  = "myname";
            $home_data['cool'] = $this->variable;

    $this->load->view('home_view', $home_data);
}

public function a_function() {

      public $variable = "cool";      

}

//EDIT//

This is what I m actually trying to accomplish and I m stuck.

get_two gets two items from a table. I want to add the two items to two variables and pass them to the view.

public function get_two() {

           $get_results = $this->home_model->get_two_brands();

            if($get_results != false){

              $html = '';

               foreach($get_results as $result){
                     $html .= '<li><a href="#" class="pick" id="'.$result->id.'">'.$result->brand.'</a></li>';
                }

                 $result = array('status' => 'ok', 'content' => $html);
                    header('Content-type: application/json');
                    echo json_encode($result);
                    exit();

            }

}//public function get_two() {

Should I create two functions like this? But I don't know how to pass the $get_results array from get_two to the below functions. I tried public $get_results = $this->model ... etc but that didn't work.

public function result_one() {
    return $resultOne = $get_results[0];
}

public function result_two() {
    return $resultTwo = $get_results[1];
}

Upvotes: 0

Views: 80

Answers (3)

ilpaijin
ilpaijin

Reputation: 3695

I'm not sure I've got the question correctly but what you're trying to achieve is something like this?

public function index() {

    $home_data['username']  = "myname";
    $home_data['cool'] = $this->a_function();

    $this->load->view('home_view', $home_data);
}

public function a_function() {

  return $variable = "cool";      

}

/** AFTER EDIT **/

Things get complicated (possibly because of my english comprehension).

you said

get_two gets two items from a table. I want to add the two items to two variables and pass them to the view.

So from the function get_two() you need to get and use the result in this way?

public function index() {

    $home_data['username']  = "myname";
    $home_data['cool'] = $this->get_two(); // <- here?

    $this->load->view('home_view', $home_data);
}

So you can try with:

public function get_two() {

    $get_results = $this->home_model->get_two_brands();

    if($get_results != false){

       return $get_results;
    }
}

and then

public function index() {

    $home_data['username']  = "myname";

    $home_data['cool'] = $this->get_two();

    $this->load->view('home_view', $home_data);
}

and inside you home_view :

<?php

foreach($home_data['cool'] as $result){
    echo '<li><a href="#" class="pick" id="'.$result->id.'">'.$result->brand.'</a></li>';
}

?>

/** AFTER NEW QUESTION **/

I need the ids of the two choices as two distinct variables

So change the index function this way:

public function index() {

    $home_data['username']  = "myname";
    $home_data['cool'] = $this->get_two(); // <- maybe you don't need this anymore

    list($result1, $result2) = $this->get_two();

    $home_data['resultId1'] = $result1->id;
    $home_data['resultId2'] = $result2->id;

    $this->load->view('home_view', $home_data);
}

Now you're able to use $home_data['resultId1'] and $home_data['resultId1'] inside your view.

Upvotes: 3

pawel7318
pawel7318

Reputation: 3583

I don't know the codeigniter framework so this is why I asked for a part of your view but it looks pretty simple as I check in the doc. And the doc's are not bad there.

Check for Adding Dynamic Data to the View

public_function() should return something, for ex:

function public_function() {
 return 'groovy';
}

Then call it in the controller:

public function index() {

    $home_data['username']  = "myname";
    $home_data['cool'] = $this->public_function();

    $this->load->view('home_view', $home_data);
}

Then add to the view somewhere <?php echo $home_data['cool'];?>

I assume it's wrapped in some class. So if you cannot return the value you need (for ex. function already returns something else) then do something like this:

class Someclass {

 public $some_class_variable;

 function public_function() {
  $this->some_class_variable = 'groovy';
 }

 function index() {
  $home_data['cool'] = $this->some_class_variable;
 }

}

Upvotes: 0

Ananth
Ananth

Reputation: 1550

You can also define the variable in the constructor, this is one way .

CODE:

public function __construct(){
$this->variable = "cool"; 
}
public function index() {

    $home_data['username']  = "myname";
            $home_data['cool'] = $this->variable;

    $this->load->view('home_view', $home_data);
}

Upvotes: 0

Related Questions