+ +
+

Views

+

A view is simply a web page, or a page fragment, like a header, footer, +sidebar, etc. In fact, views can flexibly be embedded within other views +(within other views, etc., etc.) if you need this type of hierarchy.

+

Views are never called directly, they must be loaded by a +controller. Remember that in an MVC framework, the +Controller acts as the traffic cop, so it is responsible for fetching a +particular view. If you have not read the +Controllers page you should do so before +continuing.

+

Using the example controller you created in the +controller page, let’s add a view to it.

+
+

Creating a View

+

Using your text editor, create a file called blogview.php, and put this +in it:

+
<html>
+<head>
+        <title>My Blog</title>
+</head>
+<body>
+        <h1>Welcome to my Blog!</h1>
+</body>
+</html>
+
+
+

Then save the file in your application/views/ directory.

+
+
+

Loading a View

+

To load a particular view file you will use the following method:

+
$this->load->view('name');
+
+
+

Where name is the name of your view file.

+
+

Note

+

The .php file extension does not need to be specified +unless you use something other than .php.

+
+

Now, open the controller file you made earlier called Blog.php, and +replace the echo statement with the view loading method:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                $this->load->view('blogview');
+        }
+}
+
+
+

If you visit your site using the URL you did earlier you should see your +new view. The URL was similar to this:

+
example.com/index.php/blog/
+
+
+
+
+

Loading multiple views

+

CodeIgniter will intelligently handle multiple calls to +$this->load->view() from within a controller. If more than one call +happens they will be appended together. For example, you may wish to +have a header view, a menu view, a content view, and a footer view. That +might look something like this:

+
<?php
+
+class Page extends CI_Controller {
+
+        public function index()
+        {
+                $data['page_title'] = 'Your title';
+                $this->load->view('header');
+                $this->load->view('menu');
+                $this->load->view('content', $data);
+                $this->load->view('footer');
+        }
+
+}
+
+
+

In the example above, we are using “dynamically added data”, which you +will see below.

+
+
+

Storing Views within Sub-directories

+

Your view files can also be stored within sub-directories if you prefer +that type of organization. When doing so you will need to include the +directory name loading the view. Example:

+
$this->load->view('directory_name/file_name');
+
+
+
+
+

Adding Dynamic Data to the View

+

Data is passed from the controller to the view by way of an array or +an object in the second parameter of the view loading method. Here +is an example using an array:

+
$data = array(
+        'title' => 'My Title',
+        'heading' => 'My Heading',
+        'message' => 'My Message'
+);
+
+$this->load->view('blogview', $data);
+
+
+

And here’s an example using an object:

+
$data = new Someclass();
+$this->load->view('blogview', $data);
+
+
+
+

Note

+

If you use an object, the class variables will be turned +into array elements.

+
+

Let’s try it with your controller file. Open it add this code:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                $data['title'] = "My Real Title";
+                $data['heading'] = "My Real Heading";
+
+                $this->load->view('blogview', $data);
+        }
+}
+
+
+

Now open your view file and change the text to variables that correspond +to the array keys in your data:

+
<html>
+<head>
+        <title><?php echo $title;?></title>
+</head>
+<body>
+        <h1><?php echo $heading;?></h1>
+</body>
+</html>
+
+
+

Then load the page at the URL you’ve been using and you should see the +variables replaced.

+
+
+

Creating Loops

+

The data array you pass to your view files is not limited to simple +variables. You can pass multi dimensional arrays, which can be looped to +generate multiple rows. For example, if you pull data from your database +it will typically be in the form of a multi-dimensional array.

+

Here’s a simple example. Add this to your controller:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
+
+                $data['title'] = "My Real Title";
+                $data['heading'] = "My Real Heading";
+
+                $this->load->view('blogview', $data);
+        }
+}
+
+
+

Now open your view file and create a loop:

+
<html>
+<head>
+        <title><?php echo $title;?></title>
+</head>
+<body>
+        <h1><?php echo $heading;?></h1>
+
+        <h3>My Todo List</h3>
+
+        <ul>
+        <?php foreach ($todo_list as $item):?>
+
+                <li><?php echo $item;?></li>
+
+        <?php endforeach;?>
+        </ul>
+
+</body>
+</html>
+
+
+
+

Note

+

You’ll notice that in the example above we are using PHP’s +alternative syntax. If you are not familiar with it you can read about +it here.

+
+
+
+

Returning views as data

+

There is a third optional parameter lets you change the behavior of +the method so that it returns data as a string rather than sending it +to your browser. This can be useful if you want to process the data in +some way. If you set the parameter to TRUE (boolean) it will return +data. The default behavior is false, which sends it to your browser. +Remember to assign it to a variable if you want the data returned:

+
$string = $this->load->view('myfile', '', TRUE);
+
+
+
+
+ + +