<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>slDesign &#187; PHP</title>
	<atom:link href="http://sldesign.openwab.com/category/tutos/tutos-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://sldesign.openwab.com</link>
	<description>Web, Dév &#38; More...</description>
	<lastBuildDate>Wed, 13 Oct 2010 10:09:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>CodeIgniter Tutorial : Introduction et première application</title>
		<link>http://sldesign.openwab.com/2010/07/20/codeigniter-tutorial-introduction-et-premiere-application/</link>
		<comments>http://sldesign.openwab.com/2010/07/20/codeigniter-tutorial-introduction-et-premiere-application/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 13:34:15 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=566</guid>
		<description><![CDATA[Je ne suis pas un fan inconditionné des Frameworks PHP, ces derniers peuvent parfois s&#8217;avérer trop lourds pour certaines applications. L&#8217;apprentissage d&#8217;un framework PHP peut être fastidieu, et la documentation n&#8217;est pas toujours au rendez-vous. Puis un jour, j&#8217;ai découvert CodeIgniter ! Je vous propose un tour d&#8217;horizon de ce framework à travers le développement [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F20%2Fcodeigniter-tutorial-introduction-et-premiere-application%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F20%2Fcodeigniter-tutorial-introduction-et-premiere-application%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-570" style="margin: 5px;" title="codeigniter-splash-screen" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/codeigniter-splash-screen.jpg" alt="Splash screen CodeIgniter" width="238" height="245" />Je ne suis pas un fan inconditionné des Frameworks PHP, ces derniers peuvent parfois s&#8217;avérer trop lourds pour certaines applications. L&#8217;apprentissage d&#8217;un framework PHP peut être fastidieu, et la documentation n&#8217;est pas toujours au rendez-vous.</p>
<p>Puis un jour, j&#8217;ai découvert CodeIgniter ! Je vous propose un tour d&#8217;horizon de ce framework à travers le développement d&#8217;un petit CRM. Nous verrons ainsi comment intégré CodeIgniter et comment tirer parti de ces nombreux avantages.</p>
<p>Notes de versions : Cette article est amené à évolué. Etant mon premier tutoriel CodeIgniter, vos remarques et toute critique pouvant améliorer cet article seront les bienvenues <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Version 0.1 du 20 Juillet 2010</p>
<p>L&#8217;application présentée dans ce tutoriel n&#8217;a pas pour vocation d&#8217;être utilisée en production mais une version plus élaborée et complète sera prochainement disponible sur ce site.<br />
<span id="more-566"></span></p>
<hr class="clear_all" />
<h2>I &#8211; Framework PHP</h2>
<h3>Définition d&#8217;un Framework (Source Wiki) :</h3>
<blockquote><p>En programmation informatique, un <strong>framework</strong> est un <em>kit</em> de composants logiciels structurels, qui définissent les  fondations ainsi que les grandes lignes de l&#8217;organisation de tout ou  partie d&#8217;un logiciel (architecture). En programmation orientée objet un  framework est typiquement composé de classes mères qui seront dérivées et  étendues par héritage en fonction des besoins  spécifiques à chaque logiciel qui utilise le framework.</p>
<p>Les framework sont utilisés pour modeler l&#8217;architecture des logiciels applicatifs, des applications web, des middleware et des composants logiciels. Les framework sont  achetés par les ingénieurs, puis ajoutés comme partie intégrante des  logiciels applicatifs mis sur le marché, ils sont par conséquent  rarement achetés et installés séparément par un utilisateur final.</p>
<p>Des tentatives de francisation du terme ont été faites. On trouve  ainsi parfois les termes <strong>cadre d&#8217;applications</strong>, proposé par l&#8217;Office québécois de la  langue française ou <strong>cadriciel</strong>.  L&#8217;expression <strong>atelier de développement</strong> est également employée.</p>
<p>Un framework est un ensemble d&#8217;outils et de composants logiciels organisés conformément à un plan d&#8217;architecture et des design patterns. L&#8217;ensemble forme un <em>squelette</em> de programme. Il est souvent fourni sous la forme d&#8217;une bibliothèque logicielle, et  accompagné du plan de l&#8217;architecture cible du framework.Avec un framework orienté objets, le programmeur qui utilise le  framework pourra personaliser les éléments principaux du programme par  extension, en utilisant le mécanisme d&#8217;héritage: créer des nouvelles classes qui contiennent toutes les  fonctionnalités que met en place le framework, et en plus ses  fonctionnalités propres, créées par le programmeur en fonction des  besoins spécifiques à son programme. Le mécanisme d&#8217;héritage permet  également de transformer des fonctionnalités existant dans les classes  du framework.</p>
<p>Un framework est conçu en vue d&#8217;aider les programmeurs dans leur  travail. L&#8217;organisation du framework vise la productivité maximale du  programmeur qui va l&#8217;utiliser &#8211; gage de baisse des coûts de construction  du programme. Le contenu exact du framework est dicté par le type de  programme et l&#8217;architecture cible pour lequel il est concu.</p></blockquote>
<h3>2°) Les avantages d&#8217;un Framework</h3>
<p><strong>Recyclage du code :</strong> Le code est réutilisable, ceci signifie qu&#8217;il n&#8217;est plus nécessaire de coder 4 ou 5 fois la même chose pour des projets différents</p>
<p><strong>Fiabilité : </strong>Le code de ces Frameworks sont testés et maintenus par une grande communauté de développeurs.</p>
<p><strong>Débogage : </strong>le frameworks PHP ont leurs propres méthodes de débogage spécifiques qui  vous permettent de repérer facilement les erreurs dans votre  développement.</p>
<p><strong>Aide communautaire:</strong> Vous ne jamais se sentir seul  alors que le codage de ces cadres. Lorsque vous jamais ressenti aucune  pression, vous pouvez demander de l&#8217;aide dans les communautés. Il ya bon  nombres de développeurs, qui va sûrement aider dans votre  développement.</p>
<p class="info">Note : Pour plus d&#8217;information, je vous invite à consulter le livre blanc &laquo;&nbsp;<strong>frameworks php pour  l’entreprise</strong>&nbsp;&raquo; que vous pourrez découvrir à l&#8217;adresse suivante : <a title="Livre blanc : Frameworks PHP pour l'entreprise" href="http://www.clever-age.com/veille/publications/developpement-specifique/livre-blanc-frameworks-php-pour-l-entreprise.html" target="_blank">http://www.clever-age.com/veille/publications/developpement-specifique/livre-blanc-frameworks-php-pour-l-entreprise.html</a> (envoi après demande par mail).</p>
<h2>II &#8211; Présentation de CodeIgniter</h2>
<h3>1°) Sur le site de l&#8217;éditeur :</h3>
<blockquote><p>CodeIgniter  est un framework PHP puissant avec un très faible encombrement,  construit pour les codeurs PHP qui ont besoin d&#8217;une boîte à outils  simple et élégante pour créer des applications web complet. Si vous êtes un développeur qui vit dans le monde  réel de l&#8217;hébergement mutualisé et des comptes clients avec des délais,  et si vous êtes fatigué de cadres de grandes lourdement et de manière  approfondie sans-papiers</p></blockquote>
<p>J&#8217;ai choisi de diffuser cette définition car elle représente assez bien ce qu&#8217;est CodeIgniter. Si vous avez déjà testé Zend Framework ou encore Symphonie, vous allez rapidement vous rendre compte de ces petites différences qui font de CodeIgniter un Framework Simple, Intuitif et rapide à mettre en oeuvre.</p>
<h3>2°) Quelques références</h3>
<p>Vous trouverez une liste plus complète d&#8217;applications et de sites réalisés avec CodeIgniter mais si vous voulez voir tout de suite ce qu&#8217;il est possible de faire avec ce Framework, voici quelques ressources :</p>
<ul>
<li><a title="Exemple CodeIgniter - Club 3D" href="http://www.club-3d.com/" target="_blank">http://www.club-3d.com/</a></li>
<li><a title="Application Bamboo réalisée avec CodeIgniter" href="http://www.bambooinvoice.org/" target="_blank">http://www.bambooinvoice.org/</a></li>
<li><a title="CMS réalisé avec CodeIgniter" href="http://ionizecms.com/" target="_blank">http://ionizecms.com/</a></li>
</ul>
<h3>3°) Resources</h3>
<p>Une des forces de CodeIgniter (comme tout bon framework) est représenté par sa communauté et plus particulièrement sa communauté Française. Vous pouvez consulter les ressources &laquo;&nbsp;Françaises&nbsp;&raquo; à l&#8217;adresse suivante :<a title="Site Internet CodeIgniter France" href="http://codeigniter.fr/" target="_blank"> http://codeigniter.fr/</a>. Vous y trouverez la documentation, des tutoriels, ScreenCasts et un forum.</p>
<p>Si vous souhaitez plus de ressource, le site principal de CodeIgniter accessible à l&#8217;adresse suivante : <a title="Site principal CodeIgniter" href="http://codeigniter.com/" target="_blank">http://codeigniter.com/</a></p>
<h2>II &#8211; Introduction à CodeIgniter</h2>
<div class="info">
<p>Note : Les sections qui suivent requiers certains prérequis pour le bon suivi de ce didacticiel.</p>
<ul>
<li>Un éditeur de codes PHP &#8211; HTML &#8211; CSS &#8211; Javascript</li>
<li>Des connaissances dans les langages de programmation WEB &#8211; PHP &#8211; HTML &#8211; CSS &#8211; Javascript</li>
<li>Un serveur WAMP ou LAMP ou MAMP (selon votre OS)</li>
</ul>
<p><span style="text-decoration: underline;">Note de versions et outils :</span></p>
<ul>
<li>Version CodeIgniter : 1.7.2</li>
<li>Version PHP : 5</li>
<li>Editeur HTML &#8211; PHP : Aptana IDE</li>
<li>Framework jQuery et jQuery UI</li>
<li>Nom du projet :  crmIgniter &#8211; Un dossier portant ce nom est créé à la racine du serveur Apache &#8216;www/crmIgniter/&#8217;</li>
</ul>
<p><em>PS. Si vous ne comprenez pas un seul mot de ce qui est ci-dessus, passez votre chemin</em> <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
</div>
<h3>1°) Préparation du projet</h3>
<p>Lancer votre IDE puis créez un nouveau projet à la racine de votre serveur WEB &laquo;&nbsp;crmIgniter&nbsp;&raquo; (j&#8217;utilise AptanaIDE)</p>
<h3>2°) Téléchargement &amp; installation</h3>
<p>La première chose à faire, consiste à télécharger le Framework qui est matérialiser par une archive téléchargeable à l&#8217;adresse suivante : <a title="Lien de téléchargement dernière version CodeIgniter" href="http://codeigniter.com/download.php" target="_blank">http://codeigniter.com/download.php</a></p>
<p>Une fois téléchargé cette archive, vous pouvez l&#8217;extraire. Après extraction, vous découvrirez deux dossiers :</p>
<ul>
<li>Un dossier system</li>
<li>Un dossier user_guide</li>
</ul>
<p>Déplacez l&#8217;ensemble de son contenu dans votre répertoire &laquo;&nbsp;crmIgniter&nbsp;&raquo; de sorte que votre fichier &laquo;&nbsp;index.php&nbsp;&raquo; soit à la racine de votre projet (figure 2.1.1).</p>
<div id="attachment_582" class="wp-caption alignnone" style="width: 501px"><img class="size-full wp-image-582" title="2.2.1-ci-structure-projet" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/2.2.1-ci-structure-projet.jpg" alt="Contenu du repertoire crmIgniter" width="491" height="207" /><p class="wp-caption-text">Figure 2.2.1 - Contenu du repertoire crmIgniter</p></div>
<p>Regardons d&#8217;un peu plus prêt la structure du Framework et plus particulièrement le dossier &laquo;&nbsp;system&nbsp;&raquo; qui contient entre autre :</p>
<ul>
<li>Le dossier &laquo;&nbsp;codeigniter&nbsp;&raquo; correspond au Framework lui-même</li>
<li>Le dossier &laquo;&nbsp;application&nbsp;&raquo; dans lequel sera stocké notre application</li>
<li>Le dossier &laquo;&nbsp;helpers&nbsp;&raquo; regroupant des outils de manipulation PHP</li>
<li>Le dossier &laquo;&nbsp;librarie&nbsp;&raquo; regroupant des bibliothèques de fonctions PHP</li>
</ul>
<p>CodeIgniter est un Framework développé selon  le principe du MVC &#8211; Model View Controller. Je vous renvoie à l&#8217;adresse suivante pour la définition complète de ce qu&#8217;est le MVC : <a title="Définition MVC" href="http://dico.developpez.com/html/3020-Conception-MVC-Model-View-Controller.php" target="_blank">http://dico.developpez.com/html/3020-Conception-MVC-Model-View-Controller.php</a></p>
<p>Ouvrons maintenant notre dossier &laquo;&nbsp;application&nbsp;&raquo; et détaillons son contenu :</p>
<ul>
<li>Le dossier &laquo;&nbsp;config&nbsp;&raquo; qui contient nos données de configuration</li>
<li>Le dossier &laquo;&nbsp;controllers&nbsp;&raquo; contenant des fichiers de class qui sont liés à nos URL</li>
<li>Le dossier &laquo;&nbsp;view&nbsp;&raquo; correspondant aux vues</li>
</ul>
<p>Comme un exemple vaut mieux qu&#8217;un grand discourt, tapez l&#8217;adresse suivant dans votre navigateur &laquo;&nbsp;http://localhost/crmIgniter/index.php/welcome/&nbsp;&raquo;. Après avoir validé l&#8217;URL, vous devriez voir s&#8217;afficher la page de bienvenue (figure 2.2.2)</p>
<div id="attachment_583" class="wp-caption alignnone" style="width: 747px"><img class="size-full wp-image-583" title="2.2.2-ci-welcome-page" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/2.2.2-ci-welcome-page.jpg" alt="Page de bienvenue CodeIgniter" width="737" height="303" /><p class="wp-caption-text">Figure 2.2.2 - Page de bienvenue CodeIgniter</p></div>
<p>Essayons de comprendre&#8230; nous avons une URL dont le trigger est &laquo;&nbsp;welcome&nbsp;&raquo;, le contrôleur portant le même nom va s&#8217;executer. Regardons de plus prêt le contenu du fichier &laquo;&nbsp;/controllers/welcome.php&nbsp;&raquo; :</p>
<p>Code PHP :</p>
<pre class="brush:php">&lt;?php

class Welcome extends Controller {

 function Welcome()
 {
 parent::Controller();
 }

 function index()
 {
 $this-&gt;load-&gt;view('welcome_message');
 }
}

/* End of file welcome.php */
/* Location: ./system/application/controllers/welcome.php */</pre>
<p>Ce fichier est une class et la fonction principale &laquo;&nbsp;index()&nbsp;&raquo; execute l&#8217;action &laquo;&nbsp;load-&gt;view&nbsp;&raquo;. Nous somme donc dans un contexte POO. Le &laquo;&nbsp;$this&nbsp;&raquo; définie notre application, en somme, nous pourrions traduire celas par &laquo;&nbsp;Mon application charge la vue &#8216;welcome_message&#8217;.</p>
<p>Si nous regardons à l&#8217;intérieur de notre dossier &laquo;&nbsp;view&nbsp;&raquo;, nous devrions trouver un fichier &laquo;&nbsp;welcome_message.php&nbsp;&raquo;. En ouvrant ce fichier, nous pouvons consulter le code HTML qui le compose.</p>
<h2>III &#8211; Notions de bases</h2>
<h3>1°) Modèle MVC</h3>
<p>Le <strong>Modèle-Vue-Contrôleur</strong> (en abrégé <strong>MVC</strong>, de l&#8217;anglais <em>Model-View-Controller</em>)  est une architecture et une méthode de conception qui  organise l&#8217;interface homme-machine (IHM) d&#8217;une  application logicielle. Ce paradigme divise l&#8217;IHM en un modèle (modèle de données), une vue (présentation, interface  utilisateur) et un contrôleur (logique de contrôle, gestion des  événements, synchronisation), chacun ayant un rôle précis dans  l&#8217;interface. Cette méthode a été mise au point en 1979 par Trygve Reenskaug, qui travaillait alors sur Smalltalk dans les laboratoires de recherche Xerox  PARC.</p>
<p>Pour faire plus simple, il s&#8217;agit simplement d&#8217;un model qui sépare la présentation du code.</p>
<div id="attachment_640" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-640" title="MVC en image" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/mvc-php-codeigniter-300x283.png" alt="Schéma MVC" width="300" height="283" /><p class="wp-caption-text">Figure 3.1.1 - Organisation MVC</p></div>
<h3>2°) Chargement des vues et URL</h3>
<p>Le schéma de fonctionnement dans CodeIgniter est le suivant :</p>
<p>Le contrôleur principal analyse l&#8217;URL et va charger une vue, cette vue étant exécutée par une fonction</p>
<h2>IV &#8211; Tutoriel Projet crmIgniter &#8211; Réalisation d&#8217;un CRM avec CodeIgniter</h2>
<p>Introduction et notes : La réalisation de cette application se fait dans le cadre d&#8217;un tutoriel et n&#8217;a pas pour vocation à être mis en production. Le code est à vocation didacticiel et n&#8217;est pas optimisé ni sécurisé. Ce tutoriel évoluera au fil de l&#8217;application et servira de base à d&#8217;autres articles.</p>
<h3>1°) Configuration</h3>
<p>Nous allons commencer à configurer notre projet. Pour cela, ouvrez le dossier &#8216;application/config/&#8217; dans votre éditeur.  ce dossier contient l&#8217;ensemble des fichiers de configuration. Nous allons commencer par éditer notre fichier &#8216;config.php&#8217;. Vous devez simplement renseigner / modifier les élements de ce fichier. J&#8217;ai simplement modifier l&#8217;URL de base :</p>
<pre class="brush:php">$config['base_url']    = "http://localhost/crmIgniter/";</pre>
<p>Configurons maintenant notre base de données. Dans un premier temps, créez une base de données MySql &laquo;&nbsp;crmIgniter&nbsp;&raquo;, ne créz pas de table pour le moment, nous verrons cela ultérieurement.</p>
<p>Ouvrez votre fichier &laquo;&nbsp;application/config/database.php&nbsp;&raquo; puis  renseignez les éléments de ce fichier.</p>
<pre class="brush:php;first-line:37;">$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "crmIgniter";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

/* End of file database.php */
/* Location: ./system/application/config/database.php */</pre>
<p>Nous reviendrons ultérieurement sur ces fichiers de configuration.</p>
<h3>2°) Les contrôleur CodeIgniter</h3>
<p>Un contrôleur est simplement une class qui est nommée dans le but d&#8217;être chargée en fonction d&#8217;une URL.</p>
<p>L&#8217;exemple suivant : &laquo;&nbsp;http://www.monsite.com/articles/</p>
<p>chargera la class &laquo;&nbsp;articles&nbsp;&raquo;. Ce contrôleur devra contenir des fonctions permettant de charger des vues. Par défaut, la fonction &laquo;&nbsp;index()&nbsp;&raquo; chargera la vue par défaut</p>
<pre class="brush:php">class articles{
    function index(){
    //Code à executer
    }
}</pre>
<p>Il est possible de charger un contrôleur par défaut, cette opération peut se faire en éditant le fichier &laquo;&nbsp;<dfn>application/config/routes.php&nbsp;&raquo;</dfn></p>
<pre class="brush:php">$route['default_controller'] = '<var>articles</var>';
</pre>
<p>Il vous est possible de passer des segments d&#8217;URL dans vos fonctions :</p>
<pre class="brush:php">example.com/index.php/products/shoes/sandals/123</pre>
<pre class="brush:php">&lt;?php
class Products extends Controller {

function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
?&gt;</pre>
<h3>3°) Les vues CodeIgniter</h3>
<p>Une vue est simplement une page WEB ou un fragment de page WEB. Cette vue est chargée par le contrôleur en relation avec L&#8217;URL</p>
<p>Code HTML &#8211; Exemple du contenu d&#8217;une vue</p>
<pre class="brush:php">code
</pre>
<p>Nous l&#8217;avons vu précédemment, cette vue est chargée par le contrôleur et la fonction qui permet de charger une vue est la suivante :</p>
<pre class="brush:php">&lt;?php
class Blog extends Controller {

 function index()
 {
 $this-&gt;load-&gt;view('blogview');
 }
}
?&gt;</pre>
<p>Il vous est possible de charger plusieurs vues si nécessaire.</p>
<p>Vous pouvez également transférer des données à votre vue depuis votre contrôleur.</p>
<pre class="brush:php"><code>$data = array(
 'title' =&gt; 'My Title',
 'heading' =&gt; 'My Heading',
 'message' =&gt; 'My Message'
 );

 $this-&gt;load-&gt;view('blogview', <var>$data</var>);</code></pre>
<p>ou encore :</p>
<pre class="brush:php">&lt;?php
class Blog extends Controller {

 function index()
 {
 $data['title'] = "My Real Title";
 $data['heading'] = "My Real Heading";

 $this-&gt;load-&gt;view('blogview', $data);
 }
}
?&gt;</pre>
<p>Enfin, CodeIgniter utilise une façon particulière de boucler les données d&#8217;un tableau</p>
<pre class="brush:php">&lt;?php
class Blog extends Controller {

 function index()
 {
 $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

 $data['title'] = "My Real Title";
 $data['heading'] = "My Real Heading";

 $this-&gt;load-&gt;view('blogview', $data);
 }
}
?&gt;</pre>
<p>Code HTML</p>
<pre class="brush:html">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;&lt;?php echo $title;?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;&lt;?php echo $heading;?&gt;&lt;/h1&gt;

&lt;h3&gt;My Todo List&lt;/h3&gt;    

&lt;ul&gt;
&lt;?php foreach($todo_list as $item):?&gt;

&lt;li&gt;&lt;?php echo $item;?&gt;&lt;/li&gt;

&lt;?php endforeach;?&gt;
&lt;/ul&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Vous pouvez si vous le souhaiter utiliser une syntaxe classique.</p>
<h3>4°) Les helpers</h3>
<p>Les helpers sont des bibliothèques de fonctions qui permettent de manipuler des données ; il en existe plusieurs sortes, on peut citer entre autre le helper &laquo;&nbsp;url&nbsp;&raquo; permettant de manipuler les chaines d&#8217;URL ou encore l&#8217;helper &laquo;&nbsp;email&nbsp;&raquo; permettant de manipuler les chaines d&#8217;email.</p>
<p>Il existe différentes façon de charger ces helpers, soit un par un ou via un tableau si vous devez en charger plusieurs. Cette opération est exécutée dans le constructeur de vos models.</p>
<pre class="brush:php">
<pre>class maClass extends Controller{
    function maClass(){
        parent::Controller();
        $this-&gt;load-&gt;helper('url');
        $this-&gt;load-&gt;helper('email');
    }
}</pre>
</pre>
<p>est équivalent à</p>
<pre class="brush:php">class maClass extends Controller{
    function maClass(){
        parent::Controller();
        $this-&gt;load-&gt;helpers(aray('url','email'));
    }
}</pre>
<p>Dans le cadre de mon application, je vais avoir besoin de manipuler différents types de données, voici les helpers que je vais charger :</p>
<pre class="brush:php">function home(){

 //Constructeur
 parent::Controller();

 //Chargement des helpers
 $this-&gt;load-&gt;helpers(
 array(
 'url',
 'email',
 'array',
 'html',
 'date',
 'form'
 ));

 }</pre>
<p>La documentation CodeIgniter étant très bien réalisé, n&#8217;hésitez pas à consulter cette dernière pour en savoir plus sur les helpers.</p>
<h3>5°) URL Rewriting ou comment modifier les URL CodeIgniter</h3>
<p class="info">Note : Cette section impose que votre serveur Apache soit configuré pour accépter &laquo;&nbsp;l&#8217;URL Rewriting&nbsp;&raquo;, si ce n&#8217;est pas le cas, vous devez activer le module d&#8217;URL Rewriting. Si vous souhaitez en savoir plus sur l&#8217;URL Rewriting, voici quelques ressources :</p>
<p class="info"><a title="Site d'informations et de ressources sur l'URL Rewriting" href="http://www.urlrewriting.fr/" target="_blank">http://www.urlrewriting.fr/</a></p>
<p class="info"><a title="Documentation sur les URL CodeIgniter" href="http://codeigniter.com/user_guide/general/urls.html" target="_blank">http://codeigniter.com/user_guide/general/urls.html</a></p>
<p>Comme vous avez pu le remarquer, pour accéder à notre page &laquo;&nbsp;home&nbsp;&raquo;, nous avons une URL de ce type :  http://localhost/crmIgniter/index.php/home/. Nous allons voir comment modifier l&#8217;URL d&#8217;accès et avoir une URL plus propre. Ceci peut être réalisé en utilisant une règle simple,  qui est stocké dans un fichier nommé &laquo;&nbsp;.Htaccess&nbsp;&raquo; .</p>
<p>Ce que  le. Htaccess nous permet de faire, c&#8217;est créer une série de règles. Alors tout  d&#8217;abord, vous devez créer un fichier nommé. Htaccess à la racine de votre application WEB (ou dans le répertoire où vous avez index.php).</p>
<p>Saisissez le code ci-dessous dans votre fichier &laquo;&nbsp;.htaccess&nbsp;&raquo; :</p>
<p>Code du fichier htaccess :</p>
<pre class="brush:plain">DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</pre>
<p>Quelques explications :</p>
<ul>
<li>On défini l&#8217;index</li>
<li>Activation du moteur de réécriture</li>
<li>Défini les conditions de réécriture</li>
<li>Active les régles de réécriture</li>
</ul>
<p>Vous pouvez tester et entrer l&#8217;URL &laquo;&nbsp;http://localhost/crmIgniter/home/&nbsp;&raquo; dans votre navigateur.</p>
<p>La dernière étape cosniste à modifier notre fichier de configuration et plus particulièrement la section &laquo;&nbsp;$config['index_page'] = &laquo;&nbsp;index.php&nbsp;&raquo;; &#8211; il suffit d&#8217;effacer &laquo;&nbsp;index.pp&nbsp;&raquo; afin de laisser vide la valeur de notre &laquo;&nbsp;index_page&nbsp;&raquo;. Ceci aura pour effet de retirer les &laquo;&nbsp;index.php/&nbsp;&raquo; dans nos liens.</p>
<h3>6°) Création d&#8217;un template CodeIgniter.</h3>
<p>A ce stade, nous devons à chaque chargement de fichier répéter nos en-tête, nos footer&#8230; Ceci n&#8217;est pas très pratique l&#8217;orsque l&#8217;on a l&#8217;habitude d&#8217;utiliser un système de pseudo Frame ou de charger des templates. Nous allons donc créer un système de template.</p>
<p>Etape 1 &#8211; Création du contrôleur principal</p>
<p>Créez un fichier application.php dans votre répertoire contrôleur, ce fichier nous servira de contrôleur principal :</p>
<p>Code du contrôleur principal :</p>
<pre class="brush:php">&lt;?php
class application extends Controller{

//Constructeur
function application(){
parent::Controller();
}

//Function index
function index(){
$this-&gt;load-&gt;view('template');
}
}
</pre>
<p>Vous pouvez ensuite créer la vue principale relative à notre contrôleur, dans notre exemple il s&#8217;agit du fichier template.php :</p>
<p>Code du fichier template.php</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
$this-&gt;load-&gt;view('crmContent');
$this-&gt;load-&gt;view('crmFooter');
?&gt;
</pre>
<p>Dernière étape, créer les différents blocs qui composent notre template :</p>
<ul>
<li>crmHeader</li>
<li>crmNav</li>
<li>crmContent</li>
<li>crmFooter</li>
</ul>
<p>Code du fichier crmHeader :</p>
<pre class="brush:php">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;crmIgniter - CodeIgniter CRM Application&lt;/title&gt;
&lt;meta name="description"
 content="crmIgniter - un CRM réalisé avec le Framework PHP CodeIgniter" /&gt;
 &lt;base href="http://localhost/crmIgniter/" /&gt;
&lt;link href="design/style.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="js/jQuery/css/ui-lightness/jquery-ui-1.8.2.custom.css"/&gt;
&lt;script type="text/javascript" src="js/jQuery/js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/jQuery/js/jquery-ui-1.8.2.custom.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="header"&gt;
&lt;h1&gt;crmIgniter&lt;/h1&gt;
&lt;h2&gt;CodeIgniter CRM&lt;/h2&gt;
&lt;/div&gt;</pre>
<p>Code du fichier crmNav</p>
<pre class="brush:php">&lt;div id="crmNav"&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="users" title="Gestion des utilisateurs"&gt;Utilisateurs&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="accounts" title="Gestion des comptes"&gt;Comptes&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="business" title="Gestion des affaires"&gt;Affaires&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</pre>
<p>Code du fichier crmContent</p>
<pre class="brush:php">&lt;div id="content"&gt;
&lt;h3&gt;Contenu de l'application...&lt;/h3&gt;
&lt;/div&gt;</pre>
<p>Code du fichier crmFooter</p>
<pre class="brush:php">&lt;div id="footer"&gt;
&lt;p&gt;&amp;copy; - openWab &amp;amp; CodeIgniter - crmIgniter 2010 - &lt;a href="mailto:#"&gt;Contact&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Vous l&#8217;aurez compris, il n&#8217;y aura plus qu&#8217;à modifier les fichier de contenu (matérialisé ici par le fichier crmContent.php).</p>
<p class="info">Note : Il existe d&#8217;autres méthodes mais j&#8217;ai souhaité vous présenter celle là dans un premier temps afin de vous expliquer la structure du projet. Si vous le souhaitez, il existe une librairie réalisée par un utilisateur de CodeIgniter permettant l&#8217;intégration de vues partielles. Vous pouvez consulter les informations relatives à cette librairie sur le Forum de CodeIgniter : <a title="Librairie CodeIgniter partial view - Forum CodeIgniter" href="http://codeigniter.com/forums/viewthread/62366/" target="_blank">http://codeigniter.com/forums/viewthread/62366/</a></p>
<p>Voici le résultat en image (figure 4.6.1):</p>
<div id="attachment_646" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-646" title="4.6.1-ci-Interface principale crmIgniter" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.6.1-ci-main-users-interface-300x176.jpg" alt="Interface principale crmIgniter" width="300" height="176" /><p class="wp-caption-text">Figure 4.6.1 - Interface principale crmIgniter</p></div>
<h3>7°) Syntaxe alternative des vues</h3>
<p>CodeIgniter vous permet d&#8217;utiliser une syntaxe alternative dans vos vues en lieu et place du &laquo;&nbsp;&lt;?php echo [variable ou fonction]; ?&gt;</p>
<p>Vous pouvez utiliser la syntaxe suivante :</p>
<pre class="brush:php">&lt;?=$variable?&gt;
</pre>
<p class="info">Note : Avant de pouvoir utiliser cette fonction, il est nécessaire d&#8217;activer les &laquo;&nbsp;Short tag&nbsp;&raquo; dans le php.ini.</p>
<pre class="brush:php">&lt;?=$variable?&gt;
</pre>
<p>D&#8217;autres syntaxes sont disponibles notamment en ce qui concerne les structures de contrôle</p>
<pre class="brush:php"><code>&lt;ul&gt;

 <var>&lt;?php foreach($todo as $item): ?&gt;</var>

 &lt;li&gt;<var>&lt;?=$item?&gt;</var>&lt;/li&gt;

 <var>&lt;?php endforeach; ?&gt;</var>

 &lt;/ul&gt;</code></pre>
<p>Reportez-vous à la documentation si vous souhaitez utiliser les syntaxes courtes : <a title="Documentation des syntaxes alternatives CodeIgniter" href="http://codeigniter.com/user_guide/general/alternative_php.html" target="_blank">http://codeigniter.com/user_guide/general/alternative_php.html</a></p>
<h3>8°) Notre module Utilisateurs</h3>
<p>Nous allons dans cette section créer notre premier module. Nous nous intéresserons au module utilisateurs qui permet entre autre de lister, créer ou modifier les utilisateurs.</p>
<h4>Étape 1 &#8211; Création du contrôleur et des vues</h4>
<p>Dans votre dossier contrôleur, créez un fichier &laquo;&nbsp;users.php&nbsp;&raquo;, ce sera notre contrôleur principal dont voici le code :</p>
<pre class="brush:php">&lt;?php
class users extends Controller{

 function users(){
 parent::Controller();

 }

 function index(){
 $this-&gt;load-&gt;view('users_module');
 }
}</pre>
<p>Rien de spécifique, ce module va simplement charger la vue &laquo;&nbsp;users_module&nbsp;&raquo; que nous allons créer. Cette vue va simplement lister les actions pouvant être executées.</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;div id="content"&gt;
&lt;a href="users/add_user/" title="nouvel utilisateur"&gt;Nouvel utilisateur&lt;/a&gt;
&lt;a href="users/list_users/" title="Liste des utilisateurs"&gt;Liste des utilisateurs&lt;/a&gt;
&lt;/div&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p>Nous allons maintenant modifier notre contrôleur en y ajoutant une fonction &laquo;&nbsp;add_user&nbsp;&raquo; :</p>
<pre class="brush:php">&lt;?php
class users extends Controller{

 function users(){
 parent::Controller();

 }

 function index(){
 $this-&gt;load-&gt;view('users_module');
 }

 function add_user(){
 $this-&gt;load-&gt;view('user_add_new');
 }
}</pre>
<p>Créez maintenant la vue &laquo;&nbsp;user_add_new&nbsp;&raquo;</p>
<p>Code du fichier user_add_new.php :</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Nouvel utilisateur::&lt;/h3&gt;
&lt;p&gt;Cette interface vous permet d'ajouter un nouvel utilisateur&lt;/p&gt;
&lt;p&gt;&lt;a href="users/"&gt;retour&lt;/a&gt;&lt;/p&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p>Cliquez sur le lien &laquo;&nbsp;Nouvel utilisateur&nbsp;&raquo; et vous devriez voir notre nouvelle vue.</p>
<p>Vous pouvez réaliser les mêmes opération pour la vue &laquo;&nbsp;list_users&nbsp;&raquo; ; vous trouverez ci-dessous les différents codes dont notre contrôleur complet.</p>
<pre class="brush:php">&lt;?php
class users extends Controller{

 function users(){
 parent::Controller();

 }

 //Fonction index chargeant la vue par défaut
 function index(){
 $this-&gt;load-&gt;view('users_module');
 }

 //Fonction add_user permettant d'ajouter un utilisateur
 function add_user(){
 $this-&gt;load-&gt;view('user_add_new');
 }

 //Fonction list_user listant les utilisateurs
 function list_users(){
 $this-&gt;load-&gt;view('users_list');
 }

 //Fonction update_user pour modifier un utilisateur
 function update_user(){
 $this-&gt;load-&gt;view('user_update');
 }

 //Fonction user_delete supression d'un utilisateur
 function delete_user(){
 $this-&gt;load-&gt;view('user_delete');
 }
}</pre>
<h4>Etape 2 &#8211; Création du formulaire d&#8217;ajout d&#8217;utilisateur</h4>
<p>Ouvrez votre fichier user_add_new.php, nous allons réaliser notre formulaire d&#8217;ajout de données puis réaliser l&#8217;enregistrement dans notre base de données :</p>
<p>Avant toute chose, veillez à charger les helper &laquo;&nbsp;Form&nbsp;&raquo; ; ce helper permet la manipulation de formulaires.Ce helper vous permet entre autre de générer des formulaires et des champs de formulaires. Vous trouverez ci-dessous le code de notre fichier &laquo;&nbsp;user_add_new&nbsp;&raquo; :</p>
<pre class="brush:php;first-line:7">&lt;?php
//Initialisation des attributs du formulaire
$formAtt = array('id'=&gt;'add_user','class'=&gt;'standardForm');

//Overture du formulaire
echo form_open("",$formAtt);

//Ajout d'un champ hidden
echo form_hidden("id",'');

//Labels + Champs de type texte
echo form_label("Nom d'utilisateur : ");
echo form_input('username');
echo form_label("Mot de passe : ");
echo form_input('password');

//Initialisation des valeurs d'un dropdown (select)
$titles = array(
 'Madame'=&gt;'Madame',
 'Mademoiselle'=&gt;'Mademoiselle',
 'Monsieur'=&gt;'Monsieur'
);
echo form_label("Civilité : ");
echo form_dropdown("title",$titles);

echo form_label("Nom : ");
echo form_input('name');
echo form_label("Prénom : ");
echo form_input('subname');
echo form_label("Email : ");
echo form_input('mail');
echo form_label("Fonction : ");
echo form_input('role');

//Génération du bouton submit
echo form_submit("add_user","Enregistrer");

//Fermeture du formulaire
echo form_close()
?&gt;</pre>
<p>Voici le code HTML généré par l&#8217;utilisation du helper et des fonctions qui y sont liées :</p>
<p>Code HTLM généré :</p>
<pre class="brush:html">&lt;form action="http://localhost/crmIgniter/" method="post" id="add_user"
 class="standardForm"&gt;
&lt;input type="hidden" name="id" value="" /&gt;
&lt;label&gt;Nom d'utilisateur : &lt;/label&gt;
&lt;input type="text" name="username" value="" /&gt;
&lt;label&gt;Mot de passe : &lt;/label&gt;&lt;input type="text" name="password" value="" /&gt;
&lt;label&gt;Civilité: &lt;/label&gt;
&lt;select name="title"&gt;
 &lt;option value="Madame"&gt;Madame&lt;/option&gt;
 &lt;option value="Mademoiselle"&gt;Mademoiselle&lt;/option&gt;
 &lt;option value="Monsieur"&gt;Monsieur&lt;/option&gt;
&lt;/select&gt;
&lt;label&gt;Nom : &lt;/label&gt;
&lt;input type="text" name="name" value="" /&gt;
&lt;label&gt;Prénom: &lt;/label&gt;
&lt;input type="text" name="subname" value="" /&gt;
&lt;label&gt;Email : &lt;/label&gt;&lt;input type="text" name="mail" value="" /&gt;
&lt;label&gt;Fonction : &lt;/label&gt;
&lt;input type="text" name="role" value="" /&gt;
&lt;input type="submit" name="add_user" value="Enregistrer" /&gt;
&lt;/form&gt;</pre>
<p class="info">Note : Je n&#8217;ai pas testé l&#8217;efficacité de ce helper en terme de performance mais son utilisation peut faire gagner un peu de temps en terme de développement.</p>
<p>Voici le résultat en image (Figure 4.8.1) :</p>
<div id="attachment_647" class="wp-caption alignnone" style="width: 205px"><img class="size-medium wp-image-647" title="CodeIgniter - Formulaire ajout d'un utilisateur" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.1-ci-formulaire-add-new-user-195x300.jpg" alt="CodeIgniter - Formulaire ajout d'un utilisateur" width="195" height="300" /><p class="wp-caption-text">Figure 4.8.1 - Formulaire ajout d&#39;un utilisateur </p></div>
<h4>Étape 3 &#8211; Traitement du formulaire</h4>
<p>Reste à récupérer les données et à les insérer dans notre formulaire. Pour cela, nous allons utilise la class &laquo;&nbsp;database&nbsp;&raquo;, il est don cnecessaire de l&#8217;initialiser dans notre contrôleur :</p>
<pre class="brush:php">//Chargement de la class database
$this-&gt;load-&gt;database();
</pre>
<p>Ensuite, nous pouvons l&#8217;utiliser simplement en stockant les données de notre formulaire dans un tableau :</p>
<pre class="brush:php;first-line:47">&lt;?php
//Traitement des données du formulaire

//Récupération des variables post
if(isset($_POST['add_user'])){
 $newUser = array(
 'id'=&gt;$_POST['id'],
 'username'=&gt;$_POST['username'],
 'password'=&gt;sha1($_POST['password']),
 'title'=&gt;$_POST['title'],
 'name'=&gt;$_POST['name'],
 'subname'=&gt;$_POST['subname'],
 'mail'=&gt;$_POST['mail'],
 'role'=&gt;$_POST['role']
 );
 //Insert
 $this-&gt;db-&gt;insert('users', $newUser); 

 echo '&lt;p&gt;Enregistrement inséré&lt;/p&gt;';
}

?&gt;</pre>
<h4>Etape 4 &#8211; Lister des données</h4>
<p>Comme vous avez pu le voir, les opérations sur les bases de données sont facilité avec l&#8217;utilisation de cette class. Nous allons voir comment lister des données provenant de notre base de données. Pour cela, nous utiliserons la class &laquo;&nbsp;pagination&nbsp;&raquo;, cette class permet de générer facilement des pages de résultats et une navigation entre ses pages.</p>
<p>La première étape consiste à initialiser nos bibliothèque. Voici le code du Contrôleur &laquo;&nbsp;users&nbsp;&raquo; dans lequel j&#8217;ai initialiser deux librairies. La librairie &laquo;&nbsp;pagination&nbsp;&raquo; pour naviguer entre les pages et la librairie &laquo;&nbsp;table&nbsp;&raquo; qui va nous permettre d&#8217;afficher nos résultats dans un tableau.</p>
<pre class="brush:php;first-line:21;">//Chargement de la librairie pagination
 $this-&gt;load-&gt;library('pagination');

 //Chargement de la librairie table
 $this-&gt;load-&gt;library('table');</pre>
<p>Une fois ses paramètres initialisés, nous pouvons les utiliser à travers différentes méthodes et options. Vous trouverez ci-dessous le code de notre fonction &laquo;&nbsp;users_list()&nbsp;&raquo; de notre contrôleur &laquo;&nbsp;users&nbsp;&raquo;.</p>
<pre class="brush:php;first-line:33;">//Fonction list_user listant les utilisateurs
 function list_users(){

 //Chargement de la librairie table
 $this-&gt;load-&gt;library('table');

 //Chargement de la librairie pagination
 $this-&gt;load-&gt;library('pagination');

 //Défini l'URL de base
 $config['base_url'] = 'http://localhost/crmIgniter/users/list_users/';

 //Initialise le nombre total d'enregistrements
 $config['total_rows'] = $this-&gt;db-&gt;get('users')-&gt;num_rows();

 //Initialise le nombre d'enregistrements à afficher par page
 $config['per_page'] = '10';
 $config['num_links'] = '10';
 $config['full_tag_open'] = '&lt;p&gt;';
 $config['full_tag_close'] = '&lt;/p&gt;';

 //Initialisation de notre pagination
 $this-&gt;pagination-&gt;initialize($config);        

 //Execution de la requête - Voir documentation http://codeigniter.com/user_guide/database/active_record.html
 $this-&gt;db-&gt;select('id,title,name,subname,mail');
 $data['records'] = $this-&gt;db-&gt;get('users',$config['per_page'],$this-&gt;uri-&gt;segment(3));

 //Chargement de la vue et transfert des données à notre vue
 $this-&gt;load-&gt;view('users_list',$data);

 }</pre>
<p><span style="text-decoration: underline;"><strong>Quelques explication :</strong></span></p>
<ol>
<li><strong>Chargement de nos librairies.</strong>
<ol>
<li>L&#8217;url sert à indiquer au script après quels éléments il devra insérer le numéro d&#8217;enregistrement</li>
<li>On récupére le nombre total d&#8217;enregistrement afin de calculer le nombre de page</li>
<li>On configure le nombre d&#8217;enregistrement par page</li>
<li>On  configure le nombre maximum de liens à afficher</li>
<li>On configure les balises qui engloberons nos liens de pagination</li>
<li>Initialisation globale de notre pagination</li>
</ol>
</li>
<li><strong>Exécution de la requête</strong></li>
<li><strong>Chargement de la vue</strong></li>
</ol>
<p>Il ne reste plus qu&#8217;à exécuter cela dans notre vue, ouvrez votre vue &laquo;&nbsp;users_list.php&nbsp;&raquo; et éditez le code comme ci-dessous</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Liste des utilisateurs::&lt;/h3&gt;
&lt;div&gt;
&lt;?php

//Initialisation des en-tête de notre tableau
echo $this-&gt;table-&gt;set_heading('ID','Titre','Nom','Prénom','Email');

//Initialisation de notre tableau
echo $this-&gt;table-&gt;generate($records);//Données récupérées de $data['records'] du contrôleur

//Initialisation de la pagination
echo $this-&gt;pagination-&gt;create_links();

?&gt;
&lt;/div&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p><span style="text-decoration: underline;"><strong>Quelques explications : </strong></span></p>
<ol>
<li>Chargement de notre template</li>
<li>Initialisation des en-têtes de notre tableau set_heading()</li>
<li>Initialisation du tableau</li>
<li>Initialisation de la pagination</li>
<li>Chargement du footer</li>
</ol>
<p>Nous pouvons maintenant afficher nos résultats. Le tableau n&#8217;est pas  mis en forme mais vous pouvez déjà naviguer dans votre tableau. Reste à  appliquer un beau CSS à notre table.</p>
<p>Vous trouverez en figure 4.8.2 le résultat obtenu :</p>
<div id="attachment_648" class="wp-caption alignnone" style="width: 588px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.2-ci-pagination-resultat-1.jpg"><img class="size-full wp-image-648" title="Table et pagination CodeIgniter" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.2-ci-pagination-resultat-1.jpg" alt="Tableau et pagination générés avec la class HTML Table et pagination de CodeIgniter" width="578" height="365" /></a><p class="wp-caption-text">Figure 4.8.2 - Tableau et pagination générés avec la class HTML Table et pagination de CodeIgniter</p></div>
<h4>Etape 5 &#8211; Modification  d&#8217;enregistrement</h4>
<p>Nous allons voir ici comment modifier un  enregistrement mais avant cela, nous allons voir comment récupérer nos résultats sans l&#8217;utilisation de la Class &laquo;&nbsp;htm_table&nbsp;&raquo;.</p>
<p>Dans notre contrôleur &laquo;&nbsp;users.php&nbsp;&raquo;, nous avons une fonction permettant de récupérer les résultats de notre et nous les passons dans notre vue à l&#8217;aide de la variable $data['records']. Nous allons utiliser ces données pour créer un tableau.</p>
<pre class="brush:php;first-line:53">//Execution de la requête - Voir documentation http://codeigniter.com/user_guide/database/active_record.html
$this-&gt;db-&gt;select('id,title,name,subname,mail');
$data['records'] = $this-&gt;db-&gt;get('users',$config['per_page'],$this-&gt;uri-&gt;segment(3));
</pre>
<p>Dans un premier temps, nous allons initialiser les données dans notre vue puis boucler les résultats.</p>
<p>Voici le code de notre vue users_list.php:</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Liste des utilisateurs::&lt;/h3&gt;
&lt;div&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ID&lt;/th&gt;
 &lt;th&gt;Titre&lt;/th&gt;
 &lt;th&gt;Nom&lt;/th&gt;
 &lt;th&gt;Prénom&lt;/th&gt;
 &lt;th&gt;Mail&lt;/th&gt;
 &lt;th&gt;Options&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;?php
 //Récupération des enregitrements sous forme de tableau
 $rows = $records-&gt;result_array();

 //Boucle les enregistrements et création du lien de modification
 foreach($rows as $k =&gt; $v){
 echo "&lt;tr&gt;
 &lt;td&gt;$v[id]&lt;/td&gt;
 &lt;td&gt;$v[title]&lt;/td&gt;
 &lt;td&gt;$v[name]&lt;/td&gt;
 &lt;td&gt;$v[subname]&lt;/td&gt;
 &lt;td&gt;$v[mail]&lt;/td&gt;
 &lt;td&gt;&lt;a id=\"$v[id]\" class=\"updateRecord\" href=\"users/update_user/$v[id]\" title=\"Modifier l'enregistrement\"&gt;Modifier&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;";
 }
 ?&gt;
 &lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;td colspan="6"&gt;&lt;?php
 echo $this-&gt;pagination-&gt;create_links();
 ?&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
&lt;/table&gt;
&lt;/div&gt;
 &lt;?php

 $this-&gt;load-&gt;view('crmFooter');
 ?&gt;

&lt;script type="text/javascript"&gt;
$("tr:odd").css('background','#f5f5f5');
&lt;/script&gt;</pre>
<p>Notre tableau est maintenant créé et nous pouvons naviguer entre les différentes pages. J&#8217;ai ajouté une nouvelle colonne &laquo;&nbsp;Options&nbsp;&raquo; qui me permet d&#8217;effectuer des actions en cliquant sur un lien. Ici, c&#8217;est un lien qui déclenchera ma fonction &#8216;update_user&#8217; et qui est suivi de l&#8217;identifiant (figure 4.8.3).</p>
<div id="attachment_649" class="wp-caption alignnone" style="width: 590px"><img class="size-full wp-image-649" title="CodeIgniter - Figure 4.8.3 - Table de mise à jour de données" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.3-ci-new-table-update-user.jpg" alt="Table de mise à jour de données" width="580" height="568" /><p class="wp-caption-text">Figure 4.8.3 - Table de mise à jour de données</p></div>
<p>La structure d&#8217;une URL CodeIgniter est la suivante :</p>
<p>&laquo;&nbsp;example.com/class/function/ID&nbsp;&raquo;</p>
<p>Créez une nouvelle vue &laquo;&nbsp;user_update.php&nbsp;&raquo; et placez y le code suivant :</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Mise à jour d'un utilisateur&lt;/h3&gt;

&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p>En cliquant sur le lien vous devriez lancer la vue &laquo;&nbsp;user_update.php&nbsp;&raquo;.</p>
<p>Il ne reste plus qu&#8217;à créer notre formulaire de modification, pour cela, nous allons utiliser la class &laquo;&nbsp;database&nbsp;&raquo;. Voici étape par étape les opérations à réaliser :</p>
<p>Récupéré l&#8217;ID de notre enregistrement à modifier</p>
<p>Exécuter la requête nous permettant de récupérer l&#8217;enregistrement souhaité</p>
<p>Générer le formulaire</p>
<p>Envoyer et traiter le formulaire pour mise à jour de la base de données</p>
<p>Commençons&#8230;</p>
<p>Nous devons récupérer l&#8217;ID de l&#8217;enregistrement ; rappelez-vous, dans le script précédent, celui qui affiche la liste des utilisateurs, nous avons généré des liens qui passent l&#8217;ID de l&#8217;utilisateur dans l&#8217;URL :</p>
<pre class="brush:html">&lt;a id=\$v[id]\" class=\"updateRecord\" href=\"users/update_user/$v[id]\" title=\"Modifier l'enregistrement\"&gt;Modifier&lt;/a&gt;</pre>
<p>Notre URL après avoir cliqué sur un lien ressemblera donc à cela :</p>
<pre class="brush:text">http://localhost/crmIgniter/users/update_user/10
</pre>
<p>Rappelons nous la structure de notre URL :</p>
<pre class="brush:text">http://localhost/crmIgniter/[Class]/[Fonction]/[ID]</pre>
<p>Pour récupérer notre ID, nous allons utiliser la class &laquo;&nbsp;URI Class&nbsp;&raquo; qui permet de manipuler nos chaines d&#8217;URL et ce que nous pouvons appeler des &laquo;&nbsp;Segments&nbsp;&raquo;. Cette class met à notre disposition une fonction &laquo;&nbsp;uri-&gt;segment()&nbsp;&raquo; ; Cette fonction attend en paramètre le N° de segment que vous souhaitez récupérer.</p>
<p>Que se passe t&#8217;il si dans mon fichier &laquo;&nbsp;user_update.php&nbsp;&raquo; je met le code suivant ?</p>
<pre class="brush:php">code//Récupération de l'ID
$id = $this-&gt;uri-&gt;segment(3);
echo $id;</pre>
<p>Et bien j&#8217;affiche le Segment correspondant à mon ID soit l&#8217;ID à récupérer <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Maintenant que nous avons récupérer notre ID, il ne nous reste plus qu&#8217;à récupérer les données de notre table. Pour cela nous utiliserons Activ_record.  CodeIgniter utilise une version modifiée de la class &laquo;&nbsp;activ_record&nbsp;&raquo;. activ_record est un model d&#8217;accès et de traitement des bases de données permettant de manipuler les données.</p>
<p>Pour modifier un enregistrement la fonction est la suivant &laquo;&nbsp;$this-&gt;db-&gt;update([table],[données]);</p>
<p>Vous trouverez ci-dessous le code commenté de notre fichier user_update.php.</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Mise à jour d'un utilisateur&lt;/h3&gt;
&lt;div&gt;&lt;?php
//Récupération de l'ID
$id = $this-&gt;uri-&gt;segment(3);
echo "Id actif : $id&lt;br/&gt;";
$query = $this-&gt;db-&gt;get_where('users', array('id' =&gt; $id));
$activUser = $query-&gt;result_array();
$activUser = $activUser[0];
echo '&lt;pre&gt;'."\n";
print_r($activUser);
echo '&lt;/pre&gt;'."\n";

/**
 * Ici commence le formulaire
 * On utilise le form helper pour générer le formulaire +
 * les inputs
 */
echo form_open('users/update_user/'.$id);
echo form_label('Nom d\'utilisateur : ');
echo form_input('username',$activUser['username']);
echo form_label('Civilié : ');
$options = array();
echo form_dropdown('title',array('Madame'=&gt;'Madame','Mademoiselle'=&gt;'Mademoiselle','Monsieur'=&gt;'Monsieur'),$activUser['title']);
echo form_label('Nom : ');
echo form_input('name',$activUser['name']);
echo form_label('Prénom : ');
echo form_input('subname',$activUser['subname']);
echo form_label('Email : ');
//Un tableau permettant de passer des attributs à notre input
$mailData = array(
 'name'        =&gt; 'mail',
 'id'          =&gt; 'mail',
 'value'       =&gt; $activUser['mail'],
 'maxlength'   =&gt; '200',
 'size'        =&gt; '50',
 'style'       =&gt; 'width:300px'
);
echo form_input($mailData);
echo form_submit('update_user','Enregistrer les modifications');
echo form_close();

/**
 * Récupération des données - Traitement du formulaire
 */
if(isset($_POST['update_user'])){
 echo "Formulaire soumis :: Traitement de la mise à jour...&lt;br/&gt;";
 //Passage des données récupérées dans un tableau
 $data = array(
 'username' =&gt; $_POST['username'],
 'title' =&gt; $_POST['title'],
 'name' =&gt; $_POST['name'],
 'subname' =&gt; $_POST['subname'],
 'mail' =&gt; $_POST['mail']
 );
 //Sélection de l'enregistrement à modifier
 $this-&gt;db-&gt;where('id',$id);
 //Modification de l'enregistrement
 $this-&gt;db-&gt;update('users',$data);
}
?&gt;
&lt;/div&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;
</pre>
<p>Les figures ci-dessous vous montre en image les actions réalisées (Figures 4.8.4, 4.8.5, 4.6).</p>
<div id="attachment_651" class="wp-caption alignnone" style="width: 366px"><img class="size-full wp-image-651" title="CodeIgniter - Formulaire de mise à jour utilisateur" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.4-ci-update-form.jpg" alt="Formulaire de mise à jour utilisateur" width="356" height="475" /><p class="wp-caption-text">Figure 4.8.4 - Formulaire de mise à jour utilisateur</p></div>
<div id="attachment_652" class="wp-caption alignnone" style="width: 603px"><img class="size-full wp-image-652" title="CodeIgniter - Base de données avant la mise à jour" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.5-ci-db-before-update.jpg" alt="Base de données avant la mise à jour" width="593" height="287" /><p class="wp-caption-text">Figure 4.8.5 - Base de données avant la mise à jour</p></div>
<div id="attachment_653" class="wp-caption alignnone" style="width: 627px"><img class="size-full wp-image-653 " title="CodeIgniter - Base de données après la mise à jour" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.6-ci-db-after-update.jpg" alt="Base de données après la mise à jour" width="617" height="294" /><p class="wp-caption-text">Figure 4.8.7 - Base de données après la mise à jour</p></div>
<h4>Étape 6 &#8211; Suppression d&#8217;un enregistrement</h4>
<p>La suppression d&#8217;un enregistrement suivra le même chemin à la différence prêt que nous utiliserons la fonction &laquo;&nbsp;<code>$this-&gt;db-&gt;delete('mytable', array('id' =&gt; $id));" de la class activ_record.</code></p>
<p>Il suffit pour cela d&#8217;ajouter un lien de suppression à notre liste d&#8217;utilisateurs et d&#8217;y lier encore une fois l&#8217;ID de l&#8217;utilisateur. Le lien pointera sur la fontion &laquo;&nbsp;delete_user()&nbsp;&raquo; de notre contrôleur.</p>
<pre class="brush:php">&lt;a id=\$v[id]\" class=\"deleteRecord\" href=\"users/delete_user/$v[id]\" title=\"Supprimer l'enregistrement\"&gt;Supprimer&lt;/a&gt;</pre>
<p>Notre vue contiendra simplement notre fonction de suppression :</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Supression d'un utilisateur : &lt;/h3&gt;
&lt;?php
$id = $this-&gt;uri-&gt;segment(3);
if(isset($_POST['confirm_delete'])){
 $this-&gt;db-&gt;delete('users', array('id' =&gt; $id));
 echo "&lt;p class=\"confirm\"&gt;L'enregsitrement N° $id a bien été supprimé ! &lt;/p&gt;\n";
}else{
 ?&gt;
 &lt;!-- Formulaire --&gt;
 &lt;form action="" method="post"&gt;
 &lt;p&gt;Etes vous sur de vouloir supprimer l'enregistrement N° &lt;?=$id?&gt; de la table utilisateurs ?&lt;/p&gt;
 &lt;input type="submit" name="confirm_delete" value="Confirmer"/&gt;
 &lt;/form&gt;
 &lt;?php
}
?&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<h2>V &#8211; Conclusion</h2>
<p>Vous venez de voir comment utiliser dans les grandes lignes le Framework CodeIgniter. En conclusion on peut remarquer différents points forts :</p>
<ul>
<li>L&#8217;utilisation du model MVC</li>
<li>Des class et des helpers facilitant grandement le développement d&#8217;application WEB</li>
<li>Une documentation riche</li>
<li>La facilité d&#8217;intégrer ses propres librairies et extensions</li>
</ul>
<p>CodeIgniter est donc un Framework très intéressant ne demandant pas un trop long apprentissage.</p>
<h2>VI &#8211; Ressources</h2>
<h3>Applications développées avec CodeIgniter</h3>
<p><a title="Site du script 68KB" href="http://68kb.com/" target="_blank">68KB &#8211; Script de base de données de connaissances</a></p>
<p><a title="Site de BackendPro Control Panel" href="http://www.kaydoo.co.uk/projects/backendpro" target="_blank">BackendPro Control Panel </a>: Application permettant de gérer la partie administration d&#8217;un site ou d&#8217;une application</p>
<p><a title="Site internet de Blogmer" href="http://speedovation.org/home" target="_blank">Blogmer</a> : Blog script qui se veut simple d&#8217;utilisation et convivial et dont les fonctions sont essentielles</p>
<p><a title="Site De Ionize CMS" href="http://www.ionize-cms.com/" target="_blank">Ionize CMS</a> : Un puissant gestionnaire de contenu réalisé avec CodeIgniter</p>
<h3>Sites développés avec CodeIgniter</h3>
<p>Vous trouverez la liste des sites réalisés avec CodeIgniter à l&#8217;adresse suivante : <a title="Liste des site développés sous CodeIgniter" href="http://codeigniter.com/projects/" target="_blank">http://codeigniter.com/projects/</a></p>
<h3>Documentation &amp; Tutoriels</h3>
<p>Documentation principale : <a title="Guide d'utilisation CodeIgniter" href="http://codeigniter.com/user_guide/" target="_blank">http://codeigniter.com/user_guide/</a></p>
<p>Tutoriels Vidéo : <a title="Tutoriaux CodeIgniter" href="http://codeigniter.com/tutorials/" target="_blank">http://codeigniter.com/tutorials/</a></p>
<p>Wiki : <a title="Wiki CodeIgniter" href="http://codeigniter.com/wiki/" target="_blank">http://codeigniter.com/wiki/</a></p>
<p>Ressource CodeIgniter : <a title="Base de connaissance et resoources CodeIgniter" href="http://codeigniterdirectory.com/" target="_blank">http://codeigniterdirectory.com/</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/07/20/codeigniter-tutorial-introduction-et-premiere-application/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

