CodeIgniter installed
[living-lab-site.git] / user_guide / general / views.html
diff --git a/user_guide/general/views.html b/user_guide/general/views.html
new file mode 100755 (executable)
index 0000000..ad93f4b
--- /dev/null
@@ -0,0 +1,274 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Views : CodeIgniter User Guide</title>
+
+<style type='text/css' media='all'>@import url('../userguide.css');</style>
+<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
+
+<script type="text/javascript" src="../nav/nav.js"></script>
+<script type="text/javascript" src="../nav/prototype.lite.js"></script>
+<script type="text/javascript" src="../nav/moo.fx.js"></script>
+<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
+
+<meta http-equiv='expires' content='-1' />
+<meta http-equiv= 'pragma' content='no-cache' />
+<meta name='robots' content='all' />
+<meta name='author' content='ExpressionEngine Dev Team' />
+<meta name='description' content='CodeIgniter User Guide' />
+
+</head>
+<body>
+
+<!-- START NAVIGATION -->
+<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
+<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
+<div id="masthead">
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
+<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
+</tr>
+</table>
+</div>
+<!-- END NAVIGATION -->
+
+
+<!-- START BREADCRUMB -->
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td id="breadcrumb">
+<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
+<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
+Views
+</td>
+<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
+</tr>
+</table>
+<!-- END BREADCRUMB -->
+
+<br clear="all" />
+
+
+<!-- START CONTENT -->
+<div id="content">
+
+<h1>Views</h1>
+
+<p>A <dfn>view</dfn> 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.</p>
+
+<p>Views are never called directly, they must be loaded by a <a href="controllers.html">controller</a>.  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 <a href="controllers.html">Controllers</a> page
+you should do so before continuing.</p>
+
+<p>Using the example controller you created in the <a href="controllers.html">controller</a> page, let's add a view to it.</p>
+
+<h2>Creating a View</h2>
+
+<p>Using your text editor, create a file called <dfn>blogview.php</dfn>, and put this in it:</p>
+
+<textarea class="textarea" style="width:100%" cols="50" rows="10">
+&lt;html>
+&lt;head>
+&lt;title>My Blog&lt;/title>
+&lt;/head>
+&lt;body>
+       &lt;h1>Welcome to my Blog!&lt;/h1>
+&lt;/body>
+&lt;/html>
+</textarea>
+
+<p>Then save the file in your <dfn>application/views/</dfn> folder.</p>
+
+<h2>Loading a View</h2>
+
+<p>To load a particular view file you will use the following function:</p>
+
+<code>$this->load->view('<var>name</var>');</code>
+
+<p>Where <var>name</var> is the name of your view file.  Note: The .php file extension does not need to be specified unless you use something other than <kbd>.php</kbd>.</p>
+
+
+<p>Now, open the controller file you made earlier called <dfn>blog.php</dfn>, and replace the echo statement with the view loading function:</p>
+
+
+<textarea class="textarea" style="width:100%" cols="50" rows="10">
+&lt;?php
+class Blog extends CI_Controller {
+
+       function index()
+       {
+               $this->load->view('blogview');
+       }
+}
+?&gt;
+</textarea>
+
+
+<p>If you visit your site using the URL you did earlier you should see your new view.  The URL was similar to this:</p>
+
+<code>example.com/index.php/<var>blog</var>/</code>
+
+<h2>Loading multiple views</h2>
+<p>CodeIgniter will intelligently handle  multiple calls to $this-&gt;load-&gt;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:</p>
+<p><code>&lt;?php<br />
+<br />
+class Page extends CI_Controller {<br /><br />
+
+ &nbsp;&nbsp;&nbsp;function index()<br />
+&nbsp;&nbsp;&nbsp;{<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['page_title'] =  'Your title';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('header');<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('menu');<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('content', $data);<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('footer');<br />
+&nbsp;&nbsp;&nbsp;}<br />
+<br />
+}<br />
+       ?&gt;</code></p>
+<p>In the example above, we are using &quot;dynamically added data&quot;, which you will see below.</p>
+<h2>Storing Views within Sub-folders</h2>
+<p>Your view files can also be stored within sub-folders if you prefer that type of organization.  When doing so you will need
+to include the folder name loading the view.  Example:</p>
+
+<code>$this->load->view('<kbd>folder_name</kbd>/<var>file_name</var>');</code>
+
+
+<h2>Adding Dynamic Data to the View</h2>
+
+<p>Data is passed from the controller to the view by way of an <strong>array</strong> or an <strong>object</strong> in the second
+parameter of the view loading function. Here is an example using an array:</p>
+
+<code>$data = array(<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'My Title',<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'heading' => 'My Heading',<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'message' => 'My Message'<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
+<br />
+$this->load->view('blogview', <var>$data</var>);</code>
+
+<p>And here's an example using an object:</p>
+
+<code>$data = new Someclass();<br />
+$this->load->view('blogview', <var>$data</var>);</code>
+
+<p>Note: If you use an object, the class variables will be turned into array elements.</p>
+
+
+<p>Let's try it with your controller file.  Open it add this code:</p>
+
+<textarea class="textarea" style="width:100%" cols="50" rows="14">
+&lt;?php
+class Blog extends CI_Controller {
+
+       function index()
+       {
+               $data['title'] = "My Real Title";
+               $data['heading'] = "My Real Heading";
+
+               $this->load->view('blogview', $data);
+       }
+}
+?&gt;
+</textarea>
+
+
+<p>Now open your view file and change the text to variables that correspond to the array keys in your data:</p>
+
+
+<textarea class="textarea" style="width:100%" cols="50" rows="10">
+&lt;html>
+&lt;head>
+&lt;title>&lt;?php echo $title;?>&lt;/title>
+&lt;/head>
+&lt;body>
+       &lt;h1>&lt;?php echo $heading;?>&lt;/h1>
+&lt;/body>
+&lt;/html>
+</textarea>
+
+<p>Then load the page at the URL you've been using and you should see the variables replaced.</p>
+
+<h2>Creating Loops</h2>
+
+<p>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.</p>
+
+<p>Here's a simple example. Add this to your controller:</p>
+
+<textarea class="textarea" style="width:100%" cols="50" rows="17">
+&lt;?php
+class Blog extends CI_Controller {
+
+       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);
+       }
+}
+?&gt;
+</textarea>
+
+
+<p>Now open your view file and create a loop:</p>
+
+
+<textarea class="textarea" style="width:100%" cols="50" rows="24">
+&lt;html>
+&lt;head>
+&lt;title>&lt;?php echo $title;?>&lt;/title>
+&lt;/head>
+&lt;body>
+&lt;h1>&lt;?php echo $heading;?>&lt;/h1>
+
+&lt;h3>My Todo List&lt;/h3>
+
+&lt;ul>
+&lt;?php foreach ($todo_list as $item):?>
+
+&lt;li>&lt;?php echo $item;?>&lt;/li>
+
+&lt;?php endforeach;?>
+&lt;/ul>
+
+&lt;/body>
+&lt;/html>
+</textarea>
+<p><strong>Note:</strong> 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 <a href="alternative_php.html">here</a>.</p>
+
+<h2>Returning views as data</h2>
+
+<p>There is a third <strong>optional</strong> parameter lets you change the behavior of the function 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 <kbd>true</kbd> (boolean) it will return data.  The default behavior is <kbd>false</kbd>, which sends it
+to your browser.  Remember to assign it to a variable if you want the data returned:</p>
+
+<code>$string = $this->load->view('<var>myfile</var>', '', <kbd>true</kbd>);</code>
+
+</div>
+<!-- END CONTENT -->
+
+
+<div id="footer">
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="reserved_names.html">Reserved Names</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Next Topic:&nbsp;&nbsp;<a href="models.html">Models</a>
+</p>
+<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
+</div>
+
+</body>
+</html>
\ No newline at end of file