Static Pages: Installed The Framework
Static Pages: Installed The Framework
Static Pages: Installed The Framework
Note: This tutorial assumes youve downloaded CodeIgniter and installed the framework in your
development environment.
The first thing youre going to do is set up a controller to handle static pages. A controller is simply
a class that helps delegate work. It is the glue of your web application.
For example, when a call is made to:
http://example.com/news/latest/10
We might imagine that there is a controller named news. The method being called on news would
be latest. The news methods job could be to grab 10 news items, and render them on the page.
Very often in MVC, youll see URL patterns that match:
http://example.com/[controller-class]/[controller-method]/[arguments]
As URL schemes become more complex, this may change. But for now, this is all we will need to
know.
Create a file at application/controllers/Pages.php with the following code.
<?php
class Pages extends CI_Controller {
You have created a class named Pages, with a view method that accepts one argument named
$page. The Pages class is extending the CI_Controller class. This means that the new pages
class can access the methods and variables defined in the CI_Controller class
(system/core/Controller.php).
The controller is what will become the center of every request to your web application. In very
technical CodeIgniter discussions, it may be referred to as the super object. Like any php class, you
refer to it within your controllers as $this. Referring to $this is how you will load libraries,
views, and generally command the framework.
Now youve created your first method, its time to make some basic page templates. We will be
creating two views (page templates) that act as our page footer and header.
Create the header at application/views/templates/header.php and add the following code:
<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>
The header contains the basic HTML code that youll want to display before loading the main view,
together with a heading. It will also output the $title variable, which well define later in the
controller. Now, create a footer at application/views/templates/footer.php that includes the following
code:
<em>© 2015</em>
</body>
</html>
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
Now, when the page does exist, it is loaded, including the header and footer, and displayed to the
user. If the page doesnt exist, a 404 Page not found error is shown.
The first line in this method checks whether the page actually exists. PHPs native
file_exists() function is used to check whether the file is where its expected to be.
show_404() is a built-in CodeIgniter function that renders the default error page.
In the header template, the $title variable was used to customize the page title. The value of title
is defined in this method, but instead of assigning the value to a variable, it is assigned to the title
element in the $data array.
The last thing that has to be done is loading the views in the order they should be displayed. The
second parameter in the view() method is used to pass values to the view. Each value in the
$data array is assigned to a variable with the name of its key. So the value of $data['title']
in the controller is equivalent to $title in the view.
Routing
The controller is now functioning! Point your browser to [your-site-
url]index.php/pages/view to see your page. When you visit
index.php/pages/view/about youll see the about page, again including the header and
footer.
Using custom routing rules, you have the power to map any URI to any controller and method, and
break free from the normal convention: http://example.com/[controller-class]/
[controller-method]/[arguments]
Lets do that. Open the routing file located at application/config/routes.php and add the following
two lines. Remove all other code that sets any element in the $route array.
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
CodeIgniter reads its routing rules from top to bottom and routes the request to the first matching
rule. Each rule is a regular expression (left-side) mapped to a controller and method name separated
by slashes (right-side). When a request comes in, CodeIgniter looks for the first match, and calls the
appropriate controller and method, possibly with arguments.
More information about routing can be found in the URI Routing documentation.
Here, the second rule in the $routes array matches any request using the wildcard string
(:any). and passes the parameter to the view() method of the Pages class.
Now visit index.php/about. Did it get routed correctly to the view() method in the pages
controller? Awesome!