<?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>Le Blog de Nukleo &#187; Développement</title>
	<atom:link href="https://www.nukleo.fr/blog/rubriques/developpement/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.nukleo.fr/blog</link>
	<description>Un blog de webdesign et développement</description>
	<lastBuildDate>Tue, 04 Mar 2014 15:50:19 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>CodeIgniter : Séparer le back-office du front-office, ou comment gérer plusieurs applications</title>
		<link>https://www.nukleo.fr/blog/codeigniter-separer-back-office-front-office-plusieurs-applications/</link>
		<comments>https://www.nukleo.fr/blog/codeigniter-separer-back-office-front-office-plusieurs-applications/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 14:21:13 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Astuces]]></category>
		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=46</guid>
		<description><![CDATA[Il peut être intéressant de séparer une application web en plusieurs sous-applications pour plus de clarté : notamment dans le cas d&#8217;un site avec un back-office. Cela peut aussi être très utile dans le cas où certaines rubriques d&#8217;un site nécessitent beaucoup de fichiers (controlleurs, vues, etc&#8230;). Voici une méthode qui permet de le faire<br /><a href="https://www.nukleo.fr/blog/codeigniter-separer-back-office-front-office-plusieurs-applications/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Il peut être intéressant de séparer une application web en plusieurs sous-applications pour plus de clarté : notamment dans le cas d&rsquo;un site avec un back-office. Cela peut aussi être très utile dans le cas où certaines rubriques d&rsquo;un site nécessitent beaucoup de fichiers (controlleurs, vues, etc&#8230;). Voici une méthode qui permet de le faire assez simplement et de manière efficace, quelle que soit la version de CodeIgniter.<span id="more-46"></span></p>
<h3>Le problème</h3>
<p>La <a href="http://codeigniter.com/user_guide/general/managing_apps.html" target="_blank">documentation de CodeIgniter</a> propose de faire cette séparation en créant autant de sous-dossiers qu&rsquo;il y a d&rsquo;applications dans le répertoire &laquo;&nbsp;application&nbsp;&raquo; et d&rsquo;y dupliquer tous les répertoires nécessaires. Le problème avec cette approche vient du fait qu&rsquo;il y a un risque de duplication de code puisque chaque application est totalement indépendente. Par exemple il faudra plusieurs fichiers de configuration, plusieurs fichiers de routes&#8230; Pire encore : si vous souhaitez partager des librairies, helpers, models, etc&#8230; ça ne sera pas possible et il faudra également les dupliquer.<br />
Sur ce dernier point, depuis la version 2 de CodeIgniter ce n&rsquo;est plus tout à fait exact : on peut utiliser le dossier &laquo;&nbsp;third_party&nbsp;&raquo; pour y partager configurations, helpers, models et librairies &#8211; mais il n&rsquo;y a toujours pas de séparation des applications et l&rsquo;on ne peut pas interagir avec le router.</p>
<h3>Une solution</h3>
<p>En effet il n&rsquo;y a pas une seule et unique solution au problème mais je vous une présente une que je trouve assez astucieuse, relativement simple à mettre en place et qui ne nécessite aucune librairie ni overload de classes. Elle se résume en deux mots : liens symboliques.</p>
<h3>Mise en œuvre</h3>
<p>Pour cette article nous partirons du postulat que nous voulons créer un site web en local (pour le développer bien sûr^^) et séparant le front-office (ce que voit le visiteur) du back-office (ce qu&rsquo;utilise le(s) gestionnaire(s) du site).</p>
<p>Pour commencer il faut choisir une stratégie de différenciation des applications : adresse IP, sous-domaine, URI, session&#8230; ou, vraisemblablement, une combinaison de ces possibilités. Pour l&rsquo;example nous utiliserons un sous-domaine &laquo;&nbsp;admin&nbsp;&raquo; pour le back-office, le front-office étant sur &laquo;&nbsp;www&nbsp;&raquo;.</p>
<h4>Configuration hosts</h4>
<p>En développement local j&rsquo;utilise toujours des hôtes virtuels et comme je travaille sur un Mac utilisant <a href="http://www.mamp.info/" target="_blank">MAMP</a>, j&rsquo;explicite les réglages pour cette plateforme &#8211; mais c&rsquo;est à peu de choses près la même chose sous Windows et Linux. Bref :<br />
On édite le fichier <strong>/private/etc/hosts</strong> en y ajoutant à la fin deux lignes :</p>
<pre class="brush: php; title: ; notranslate">
127.0.0.1 www.montest.local
127.0.0.1 admin.montest.local
</pre>
<p>Sous Lion faites bien attention à ce qu&rsquo;il y ait une ligne vierge à la fin du fichier, comme je l&rsquo;explique <a href="http://www.nukleo.fr/blog/macosx-10-7-lion-et-le-fichier-hosts" title="MacOSX 10.7 Lion et le fichier Hosts">dans cet article</a>.</p>
<h4>Configuration Apache</h4>
<p>Les serveurs de MAMP doivent être arrêtés et l&rsquo;on édite le fichier <strong>/Applications/MAMP/conf/apache/httpd.conf</strong> en y ajoutant les deux serveurs virtuels correspondants à ce que nous avons ajouté dans le fichier hosts :</p>
<pre class="brush: php; title: ; notranslate">
&lt;VirtualHost *:80&gt;
DocumentRoot /Applications/MAMP/htdocs/montest/www/
ServerName www.montest.local
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
DocumentRoot /Applications/MAMP/htdocs/montest/www/
ServerName admin.montest.local
&lt;/VirtualHost&gt;
</pre>
<p>Vous noterez que le document root est &laquo;&nbsp;www&nbsp;&raquo; et non la racine du site, ceci pour des raisons de sécurité : le serveur apache ne permettra que d&rsquo;accéder aux fichiers nécessaires à l&rsquo;application : le bootstrap (index.php) et les ressources (javascript, images, css).</p>
<h4>Arborescence du projet CodeIgniter</h4>
<p>Nous allons modifier l&rsquo;arborescence de base de CodeIgniter pour prendre en compte la séparation d&rsquo;applications et le déplacement des fichiers d&rsquo;application et du framework :<br />
<img src="http://www.nukleo.fr/blog/wp-content/uploads/2011/10/ci-arbo.png" alt="Arborescence de CodeIgniter" width="620" height="392" class="alignnone size-full wp-image-47" /></p>
<p>Les modifs sont les suivantes :</p>
<ul>
<li>Le répertoire &laquo;&nbsp;application&nbsp;&raquo; à été renommé &laquo;&nbsp;applications&nbsp;&raquo;</li>
<li>Les répertoires &laquo;&nbsp;bo&nbsp;&raquo; et &laquo;&nbsp;fo&nbsp;&raquo; ont été créés</li>
<li>Le contenu originel du répertoire &laquo;&nbsp;application&nbsp;&raquo; a été déplacé dans &laquo;&nbsp;bo&nbsp;&raquo;</li>
<li>Un répertoire &laquo;&nbsp;www&nbsp;&raquo; a été créé au même niveau que &laquo;&nbsp;applications&nbsp;&raquo; et index.php y a été déplacé</li>
</ul>
<p>Dans le répertoire &laquo;&nbsp;fo&nbsp;&raquo; nous rajouterons les répertoires &laquo;&nbsp;controllers&nbsp;&raquo; et &laquo;&nbsp;views&nbsp;&raquo; et c&rsquo;est là que la séparation aura effectivement lieu : le front-office aura ses propres controlleurs et vues. Tout le reste proviendra du répertoire &laquo;&nbsp;bo&nbsp;&raquo;.</p>
<h4>L&rsquo;astuce pour que ça marche</h4>
<p>Comment le framework va-t&rsquo;il trouver les modèles, librairies, etc&#8230; dans la partie front alors qu&rsquo;il n&rsquo;y sont pas ? Tout simplement en utilisant des <a href="http://fr.wikipedia.org/wiki/Lien_symbolique" target="_blank">liens symboliques</a> de Linux. Pour les créer, un petit tour dans le Terminal, en se plaçant dans le répertoire &laquo;&nbsp;fo&nbsp;&raquo; il n&rsquo;y plus qu&rsquo;a tapper les lignes suivantes (en validant ligne par ligne) :</p>
<pre class="brush: php; title: ; notranslate">
ln -s ../bo/cache cache
ln -s ../bo/config config
ln -s ../bo/core core
ln -s ../bo/errors errors
ln -s ../bo/helpers helpers
ln -s ../bo/hooks hooks
ln -s ../bo/language language
ln -s ../bo/librairies librairies
ln -s ../bo/logs logs
ln -s ../bo/models models
ln -s ../bo/third_party third_party
</pre>
<p>Et le tour est joué ! Ou presque&#8230;</p>
<h4>Configurer index.php</h4>
<p>Comme nous avons modifié l&rsquo;arborescence du framework il faut lui indiquer où trouver ses fichiers, mais aussi lui indiquer quelle application utiliser. Nous modifions donc /www/index.php :</p>
<pre class="brush: php; title: ; notranslate">
[...]
$system_path = '../system'; // on a sorti le framework du webroot (sécurité)
[...]
// changement application en fonction du sous-domaine
// a modifier en fonction de la stratégie de différenciation choisie
if( preg_match('/admin\.*/', $_SERVER['SERVER_NAME']) ) {
	$app_folder = '/bo';
} else {
	$app_folder = '/fo';
}

$application_folder = '../applications' . $app_folder; // les applications sont également en dehors du webroot (sécurité)
</pre>
<p>A noter qu&rsquo;il s&rsquo;agit là d&rsquo;une partie du fichier index.php de la version 2.0.3 du framework &#8211; le reste n&rsquo;étant pas intéressant pour cet article. Pour les versions précédentes du framework, ce fichier est similaire.</p>
<p>Dorénavant tous les models, librairies, configs etc&#8230; seront stockés dans un lieu commun (le répertoire &laquo;&nbsp;bo&nbsp;&raquo;) et seront disponibles pour toutes les applications.</p>
<h3>Conclusion</h3>
<p>Cette technique permet de simuler un système de modules qui manque à CodeIgniter (bien qu&rsquo;il existe des librairies le permettant, par exemple <a href="https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home" target="_blank">HMVC</a>). Elle a l&rsquo;avantage de fonctionner sur les versions antérieures à la 2.X du framework, alors qu&rsquo;à partir de la version 2 on pourrait utiliser le système de &laquo;&nbsp;third_party&nbsp;&raquo; bien qu&rsquo;il faille encore les charger &laquo;&nbsp;à la main&nbsp;&raquo;.</p>
<p>Happy coding !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/codeigniter-separer-back-office-front-office-plusieurs-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacOSX 10.7 Lion et le fichier Hosts</title>
		<link>https://www.nukleo.fr/blog/macosx-10-7-lion-et-le-fichier-hosts/</link>
		<comments>https://www.nukleo.fr/blog/macosx-10-7-lion-et-le-fichier-hosts/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 10:00:18 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Astuces]]></category>
		<category><![CDATA[MacOSX]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=43</guid>
		<description><![CDATA[Avec chaque nouvelle mouture d&#8217;un OS il y a toujours quelques ratés et Apple n&#8217;est pas dispensé de cette réalité. Hormis le problème du WiFi qui ne cesse de se déconnecter tout seul, il y a un petit problème avec le fichiers hosts : la dernière entrée n&#8217;est pas prise en compte. Voici comment résoudre<br /><a href="https://www.nukleo.fr/blog/macosx-10-7-lion-et-le-fichier-hosts/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Avec chaque nouvelle mouture d&rsquo;un OS il y a toujours quelques ratés et Apple n&rsquo;est pas dispensé de cette réalité. Hormis le <a href="http://www.fredzone.org/regler-les-problemes-de-wifi-sur-mac-os-x-lion">problème du WiFi</a> qui ne cesse de se déconnecter tout seul, il y a un petit problème avec le fichiers hosts : la dernière entrée n&rsquo;est pas prise en compte. Voici comment résoudre le problème. <span id="more-43"></span></p>
<h3>Le problème</h3>
<p>Si vous êtes webdesigner ou développeur il y a de fortes chances que vous utilisiez des hôtes virtuels (virtual hosts) configurés dans Apache et, par conséquent, que vous routiez vos noms d&rsquo;hôtes virtuels par le biais du <strong>fichier hosts</strong> de MacOS.</p>
<p>Vous aurez certainement remarqué que la dernière entrée de ce fichier ne fonctionne pas, à savoir : page blanche :(</p>
<h3>La solution</h3>
<p>C&rsquo;est bête comme choux mais il fallait le savoir : <strong>il suffit d&rsquo;ajouter une ligne vide</strong> à la suite de votre dernière entrée et tout rentre dans l&rsquo;ordre !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/macosx-10-7-lion-et-le-fichier-hosts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upload des fichiers zip avec CodeIgniter</title>
		<link>https://www.nukleo.fr/blog/upload-fichiers-zip-codeigniter/</link>
		<comments>https://www.nukleo.fr/blog/upload-fichiers-zip-codeigniter/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 06:56:42 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=32</guid>
		<description><![CDATA[Grâce à la librairie file_upload, CodeIgniter permet de facilement gérer l&#8217;upload de fichiers mais dans le cas de fichiers ZIP il y a un petit bug qui n&#8217;est pas encore corrigé et qui peut faire échouer l&#8217;upload. Voici comment le corriger rapidement. Le problème Pour pouvoir faire de l&#8217;upload il faut déclarer les types de<br /><a href="https://www.nukleo.fr/blog/upload-fichiers-zip-codeigniter/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Grâce à la librairie file_upload, CodeIgniter permet de facilement gérer l&rsquo;upload de fichiers mais dans le cas de fichiers ZIP il y a un petit bug qui n&rsquo;est pas encore corrigé et qui peut faire échouer l&rsquo;upload. Voici comment le corriger rapidement.<span id="more-32"></span></p>
<h3>Le problème</h3>
<p>Pour pouvoir faire de l&rsquo;upload il faut déclarer les types de fichiers acceptés dans son controlleur (ou dans un fichier de config) à l&rsquo;aide de la déclaration</p>
<pre class="brush: php; title: ; notranslate">$config['allowed_types'] = 'gif|jpg|png|zip';</pre>
<p>Lors de la soumission du formulaire contenant le fichier a envoyer, le navigateur envoi un mime type au serveur correspondant au type de fichier que l&rsquo;on souhaite uploader. CodeIgniter va ensuite confronter ce mime type avec ceux qui sont autorisés et agir en conséquence.</p>
<p>Le problème vient du fait que les navigateurs n&rsquo;envoyent pas tous le même mime type pour les fichiers ZIP et, après recherche, il s&rsquo;avère qu&rsquo;il en existe 7 différents. Hors CodeIgniter n&rsquo;en prend en charge que 3. Donc si votre navigateur envoi l&rsquo;un des 4 types non répertoriés, l&rsquo;upload échoue avec un magnifique message d&rsquo;erreur : &laquo;&nbsp;The filetype you are attempting to upload is not allowed.&nbsp;&raquo;</p>
<h3>La solution</h3>
<p>Il suffit d&rsquo;éditer le fichier <strong>application/config/mimes.php</strong> en ajoutant les mime types manquants à la ligne correspondant à votre type de fichier. Dans le cas d&rsquo;un fichier ZIP il s&rsquo;agit de la ligne 54 :</p>
<pre class="brush: php; title: ; notranslate">'zip'	=&gt;  array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),</pre>
<p>qu&rsquo;il faut changer en</p>
<pre class="brush: php; title: ; notranslate">'zip'	=&gt;  array('application/x-zip', 'application/zip', 'application/x-zip-compressed','application/octet-stream','application/x-compress','application/x-compressed','multipart/x-zip'),</pre>
<p>Et tout rentre dans l&rsquo;ordre :)</p>
<h3>Ajouter d&rsquo;autre mime types</h3>
<p>Si vous deviez ajouter de nouveaux types de fichiers à la liste des fichiers autorisés ou qu&rsquo;un type existant posait le même problème que pour les ZIP, il suffit de faire un simple</p>
<pre class="brush: php; title: ; notranslate">var_dump($_FILES)</pre>
<p>et de repérer le résultat de <strong>["file_type"]</strong> dans l&rsquo;array retourné. C&rsquo;est cette information qu&rsquo;il faudra ajouter au fichier <strong>application/config/mimes.php.</strong></p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/upload-fichiers-zip-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#8217;importance de commenter son code</title>
		<link>https://www.nukleo.fr/blog/importance-de-commenter-son-code/</link>
		<comments>https://www.nukleo.fr/blog/importance-de-commenter-son-code/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 06:29:16 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=30</guid>
		<description><![CDATA[On ne le dira jamais assez, il est important &#8211; voir crucial &#8211; de correctement commenter le code qu&#8217;on écrit. Dans certains cas le bénéfice sera immédiat, dans tous les cas c&#8217;est sur le moyen/long terme que le bénéfice se fera ressentir… Pourquoi commenter ? Les intérêts sont multiples et variés allant du simple &#171;&#160;j&#8217;en<br /><a href="https://www.nukleo.fr/blog/importance-de-commenter-son-code/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>On ne le dira jamais assez, il est important &#8211; voir crucial &#8211; de correctement commenter le code qu&rsquo;on écrit. Dans certains cas le bénéfice sera immédiat, dans tous les cas c&rsquo;est sur le moyen/long terme que le bénéfice se fera ressentir…<span id="more-30"></span></p>
<h3>Pourquoi commenter ?</h3>
<p>Les intérêts sont multiples et variés allant du simple &laquo;&nbsp;j&rsquo;en suis là&nbsp;&raquo; à la fin de la journée jusqu&rsquo;à la documentation d&rsquo;une application.</p>
<h4>Commenter pour comprendre ce qu&rsquo;on a fait</h4>
<p>Lors d&rsquo;une session de développement on est souvent confronté à un problème nouveau à gérer et la solution n&rsquo;est pas forcément toujours évidente. On fait quelques recherches, on trouve une solution ou l&rsquo;inspiration pour la créer et on l&rsquo;intègre. Tout fonctionne, c&rsquo;est parfait, on est content.<br />
3 mois plus tard on doit revenir dessus car il faut améliorer la fonction en y intégrant de nouveaux paramètres ou s&rsquo;en resservir pour un autre projet, et là c&rsquo;est le drame : on ne comprend plus comment ça fonctionne, voire même à quoi sert ladite fonction… Les 30 secondes nécessaires à écrire les quelques commentaires salutaires nous auraient permises d&rsquo;éviter une décapilarisation crânienne subite et la perte de pas mal de temps.</p>
<h4>Commenter pour expliquer aux autres</h4>
<p>On peut travailler en équipe sur un projet et d&rsquo;autres développeurs risquent d&rsquo;avoir à intervenir sur votre code pendant que vous faites autre chose. Autre cas de figure : vous développez seul un projet puis un peu plus tard c&rsquo;est un autre développeur qui le reprend ou qui vous rejoin dessus. Vous pouvez également être en train de développer un script/module/librairie/application destiné(e) à être partagé(e) avec d&rsquo;autres (dans le cadre d&rsquo;open source par exemple).<br />
Encore une fois, le temps passé à commenter le code évitera aux autres d&rsquo;être complètement perdus à la lecture de votre chef d&rsquo;oeuvre. Ceci est d&rsquo;autant plus vrai que chaque développeur a son style et sa manière de coder et qui, bien souvent, n&rsquo;est limpide que pour lui-même…</p>
<h4>Commenter pour se faciliter la tâche</h4>
<p>Les IDE de qualité sont capable de lire les commentaires <a href="http://en.wikipedia.org/wiki/PHPDoc">DocBlock</a> et de s&rsquo;en servir pour afficher, lors de la saisie, les informations d&rsquo;utilisation que vous avez pris le soin d&rsquo;entrer. Dans le cadre du développement d&rsquo;une application répartie en plusieurs fichiers (souvent le cas en POO ou en utilisant un framework), les commentaires révèlent toute leur puissance en vous évitant de replonger dans le code d&rsquo;une fonction pour retrouver quels arguments lui passer ou encore ce qu&rsquo;elle retourne.<br />
Ce type de commentaire peut aussi être utilisé pour l&rsquo;écriture automatique de la documentation d&rsquo;une API, par exemple, à l&rsquo;aide d&rsquo;un générateur de documentation tel que <a href="http://www.phpdoc.org/">PHPdocumentor</a> ou <a href="http://en.wikipedia.org/wiki/Doxygen">Doxygen</a></p>
<h3>Les différents types de commentaires</h3>
<p>Il existe 3 types de commentaires : ligne simple, multiligne et DocBlock. Les 2 premiers ne servent qu&rsquo;à indiquer des informations courtes au sein même du code alors que le DocBlock permettra aux IDE et générateurs de documentation d&rsquo;en faire bien plus.</p>
<p>Les commentaires simples et multilignes se présentent de la manière suivante :</p>
<pre class="brush: php; title: ; notranslate">
// je suis un commentaire sur une seule ligne
/* je suis
un commentaire
sur plusieurs lignes */
</pre>
<p>Le commentaire DocBlock se présente ainsi :</p>
<pre class="brush: php; title: ; notranslate">
/**
 * Cette fonction sert à faire ceci...
 * un commentaire
 * sur plusieurs lignes
 *
 * @param string $text Description du paramètre
 * @param int $id Description du paramètre
 * @return bool Description de ce que retourne (ou non) la fonction
*/
</pre>
<p>Notez l&rsquo;utilisation de certains mots clés (@param, @return) dont vous trouverez <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html">la liste complète ici</a>. C&rsquo;est précisément ces mots-clés qui permettrons à l&rsquo;IDE et au générateur de documentation de travailler.</p>
<h4>Un exemple d&rsquo;utilisation</h4>
<p>Voici un petit exemple d&rsquo;utilisation des 3 types de commentaires dans un modèle du framework <a href="http://codeigniter.com/">CodeIgniter</a> :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

class Blog_model extends CI_Model {

	// constructeur
	function __construct() {
		parent::__construct();
	}

	/**
	 * Recupération des derniers posts de wordpress
	 *
	 * @param	int $count	Le nombre de posts que l'on veut afficher (optionnel)
	 * @return	object		Les posts à afficher
	 */
	function get_latest_posts($count = 5) {
		// requete mysql à l'aide d'ActiveRecord
		$this-&gt;db-&gt;select('post_title, post_name');
		$this-&gt;db-&gt;where('post_status', 'publish');
		$this-&gt;db-&gt;where('post_type', 'post');
		$this-&gt;db-&gt;limit($count);
		$this-&gt;db-&gt;order_by('ID', 'desc');

		$query = $this-&gt;db-&gt;get('wp_posts');
		
		/* on récupère les posts
		sous forme d'objet */
		$data = $query-&gt;result();

		//var_dump($data); exit; // test des résultats obtenus
		
		// renvoi des résultats au controlleur
		return $data;
	}

}
</pre>
<p>J&rsquo;ai eu la main un peu lourde ici mais en même temps il vaut mieux trop de commentaires que pas assez !</p>
<h3>Conclusion</h3>
<p>Il y a peu de temps j&rsquo;ai eu l&rsquo;occasion d&rsquo;intervenir sur un gros projet de CRM/ERP qui était quasiment abouti et dont le développeur a du se retirer. Malheureusement il n&rsquo;avait pas jugé utile de commenter son code et la conséquence directe à été une grosse perte de temps pour moi (le temps de comprendre le fonctionnement) et une grosse perte de temps et d&rsquo;argent pour le client car il a du supporter le coût de &laquo;&nbsp;temps de compréhension&nbsp;&raquo; du code existant en plus du temps de développement nécessaire au résultat demandé&#8230;<br />
Pour faire bref, <strong>passez un peu de temps à commenter votre code</strong> &#8211; votre client, les utilisateurs de votre code et vous-même ne vous remercieront jamais assez !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/importance-de-commenter-son-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Supprimer index.php des urls de CodeIgniter</title>
		<link>https://www.nukleo.fr/blog/supprimer-index-php-url-codeigniter/</link>
		<comments>https://www.nukleo.fr/blog/supprimer-index-php-url-codeigniter/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 07:07:07 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[HTaccess]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=21</guid>
		<description><![CDATA[Lors d&#8217;une installation de base du framework CodeIgniter, les urls des pages se présentent sous la forme de &#171;&#160;http://mon-site.com/index.php/controlleur&#160;&#187;. Pour plusieurs raisons (urls plus &#171;&#160;esthétiques&#160;&#187;, référencement&#8230;) on pourrait souhaiter supprimer le vilain index.php. Voici comment. HTaccess à la rescousse ! La première étape consiste à créer un fichier .htaccess que l&#8217;on placera à la racine<br /><a href="https://www.nukleo.fr/blog/supprimer-index-php-url-codeigniter/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Lors d&rsquo;une installation de base du framework CodeIgniter, les urls des pages se présentent sous la forme de &laquo;&nbsp;http://mon-site.com/index.php/controlleur&nbsp;&raquo;. Pour plusieurs raisons (urls plus &laquo;&nbsp;esthétiques&nbsp;&raquo;, référencement&#8230;) on pourrait souhaiter supprimer le vilain <strong>index.php.</strong> Voici comment.</p>
<p><span id="more-21"></span></p>
<h3>HTaccess à la rescousse !</h3>
<p>La première étape consiste à créer un fichier <strong>.htaccess</strong> que l&rsquo;on placera à la racine du site. Il faut noter que dans le monde unixien les fichiers commençants par un point sont invisibles. Si cela pose un problème il suffira de nommer le fichier htaccess.txt puis de le renommer une fois transféré sur le serveur.</p>
<p>Contenu du fichier .htaccess :</p>
<pre class="brush: plain; title: ; notranslate">
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
</pre>
<p>Ces directives indiquent au serveur Apache de rediriger toute requete qui ne cible pas un dossier ou un fichier spécifique vers le fichier index.php et de lui passer en argument tout ce qui suit le nom de domaine. En clair, une url du type <strong>&laquo;&nbsp;http://mon-site.com/contact&nbsp;&raquo;</strong> sera redirigée vers <strong>&laquo;&nbsp;http://mon-site.com/index.php/contact.</strong></p>
<p>Bien sûr on peut intégrer des directives plus élaborées mais ce n&rsquo;est pas nécessaire si l&rsquo;on ne cherche qu&rsquo;à supprimer l&rsquo;infâme index.php</p>
<h3>Modification du fichier de configuration</h3>
<p>Il faut ensuite modifier le fichier <strong>/system/application/config/config.php</strong> en changeant la ligne</p>
<pre class="brush: php; title: ; notranslate">
$config['index_page'] = &quot;index.php&quot;;
</pre>
<p>en :</p>
<pre class="brush: php; title: ; notranslate">
$config['index_page'] = &quot;&quot;;
</pre>
<p>Et voila, plus d&rsquo;index.php !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/supprimer-index-php-url-codeigniter/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Autocomplete (remplissage auto) de CodeIgniter dans Netbeans</title>
		<link>https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/</link>
		<comments>https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 08:00:42 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Netbeans]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=16</guid>
		<description><![CDATA[L&#8217;éditeur de code Netbeans implémente par défaut le remplissage automatique (autocomplete) pour les frameworks Zend et Symfony depuis peu. Pour les autres, et notamment CodeIgniter, niet. Qu&#8217;à cela ne tienne voici comment ajouter l&#8217;autocomplete pour CodeIgniter ! J&#8217;ai trouvé cette astuce, en cherchant un peu partout une solution à ce problème, sur ce blog. Je<br /><a href="https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>L&rsquo;éditeur de code <a href="http://netbeans.org/" target="_blank">Netbeans</a> implémente par défaut le remplissage automatique (autocomplete) pour les frameworks Zend et Symfony depuis peu. Pour les autres, et notamment CodeIgniter, niet. Qu&rsquo;à cela ne tienne voici comment ajouter l&rsquo;autocomplete pour CodeIgniter !<br />
<span id="more-16"></span></p>
<p>J&rsquo;ai trouvé cette astuce, en cherchant un peu partout une solution à ce problème, sur <a href="http://rhasan.com/blog/2009/09/codeigniter-auto-complete-with-netbeans/" target="_blank">ce blog</a>. Je me suis simplement permis de traduire en partie sa mise en place.</p>
<h3>Autocomplete de base</h3>
<p>Pour accéder à l&rsquo;autocomplete des <strong>fonctions de base de CodeIgniter,</strong> il suffit simplement de créer un fichier &laquo;&nbsp;nom_du_fichier.php&nbsp;&raquo; dans le dossier de projet de Netbeans <strong>(nbproject)</strong> de votre application et d&rsquo;y coller le contenu ci-dessous. Après cela, relancez Netbeans. Pour ce tutorial nous supposerons que ce fichier sera nommé &laquo;&nbsp;ci_autocomplete.php&nbsp;&raquo;.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

/**
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
* @property CI_Benchmark $benchmark
* @property CI_Calendar $calendar
* @property CI_Cart $cart
* @property CI_Config $config
* @property CI_Controller $controller
* @property CI_Email $email
* @property CI_Encrypt $encrypt
* @property CI_Exceptions $exceptions
* @property CI_Form_validation $form_validation
* @property CI_Ftp $ftp
* @property CI_Hooks $hooks
* @property CI_Image_lib $image_lib
* @property CI_Input $input
* @property CI_Language $language
* @property CI_Loader $load
* @property CI_Log $log
* @property CI_Model $model
* @property CI_Output $output
* @property CI_Pagination $pagination
* @property CI_Parser $parser
* @property CI_Profiler $profiler
* @property CI_Router $router
* @property CI_Session $session
* @property CI_Sha1 $sha1
* @property CI_Table $table
* @property CI_Trackback $trackback
* @property CI_Typography $typography
* @property CI_Unit_test $unit_test
* @property CI_Upload $upload
* @property CI_URI $uri
* @property CI_User_agent $user_agent
* @property CI_Validation $validation
* @property CI_Xmlrpc $xmlrpc
* @property CI_Xmlrpcs $xmlrpcs
* @property CI_Zip $zip
*/

class Controller {};

/**
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
* @property CI_Config $config
* @property CI_Loader $load
* @property CI_Session $session
*/

class Model {};

?&gt;
</pre>
<h3>Comment ça fonctionne ?</h3>
<p>Au lancement de Netbeans, celui-ci lit les fichiers contenus dans le répertoire <strong>nbproject</strong> (notamment project.xml et project.properties) afin de préparer l&rsquo;environnement de développement.<br />
En &laquo;&nbsp;lisant&nbsp;&raquo; le fichier <strong>ci_autocomplete.php</strong> il repère les <strong>propriétés définies dans le <a href="http://en.wikipedia.org/wiki/PHPDoc" target="_blank" title="Explication des commentaires DocBlock sur WikiPedia (anglais)">DocBlock</a></strong> pour les classes Controller et Model.<br />
C&rsquo;est cela qui lui permettra de fournir l&rsquo;autocomplete lors de l&rsquo;édition d&rsquo;un controlleur ou d&rsquo;un modèle. En parcourant le contenu du fichier on remarquera que l&rsquo;on liste simplement les classes mises à disposition par CodeIgniter.</p>
<p><img src="http://www.nukleo.fr/blog/wp-content/uploads/2010/12/CI-netbeans-autocomplete.png" alt="Remplissage auto de CodeIgniter dans Netbeans" width="620" height="369" class="alignnone size-full wp-image-18" title="autocomplete des fonctions de base de CodeIgniter" /></p>
<h3>Ajoutez vos propres classes</h3>
<p>Le but de la manoeuvre étant aussi d&rsquo;accéder à l&rsquo;autocomplete sur vos modèles et librairies, il suffit d&rsquo;éditer le fichier <strong>ci_autocomplete.php</strong> que vous venez de créer pour les y incorporer :</p>
<pre class="brush: php; title: ; notranslate">* @property Nom_de_votre_classe $nom_de_votre_objet</pre>
<p>Par exemple, en ajoutant</p>
<pre class="brush: php; title: ; notranslate">* @property Portfolio_model $portfolio_model</pre>
<p>dans le DocBlock Controller, vous aurez accès aux méthodes du modèle Portfolio_model lors de l&rsquo;édition d&rsquo;un controlleur :</p>
<p><img src="http://www.nukleo.fr/blog/wp-content/uploads/2011/01/CI-netbeans-autocomplete2.png" alt="Autocomplete de CodeIgniter dans Netbeans" title="Autocomplete sur vos modèles" width="620" height="288" class="alignnone size-full wp-image-20" /></p>
<p><strong>Note :</strong> pour que toutes les fonctions de vos modèles soient également disponibles pendant l&rsquo;édition d&rsquo;un modèle, il faudra également ajouter les modèles dans le DocBlock du modèle.</p>
<h3>Conclusion</h3>
<p>Il est dommage que, par défaut, on ne puisse pas accéder à l&rsquo;autocomplete des fonctions de CodeIgniter — ceci étant apparemment dû à la manière dont le code est commenté — mais grâce à cette petite astuce tout rentre dans l&rsquo;ordre.<br />
Dernier petit conseil : utilisez également les commentaires DocBlock avec vos méthodes de modèles pour facilement en afficher l&rsquo;utilisation lors de l&rsquo;édition de controlleurs et modèles.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Créer simplement un template de page dans CodeIgniter</title>
		<link>https://www.nukleo.fr/blog/template-page-codeigniter/</link>
		<comments>https://www.nukleo.fr/blog/template-page-codeigniter/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 19:24:38 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=19</guid>
		<description><![CDATA[Voici une manière simple et efficace de créer un (ou plusieurs) template(s) de page pour un site sous CodeIgniter, sans librairie ni plugin. Préambule Nous partirons du principe que nous voulons isoler le (ou les) template(s) du reste des views. Nous partirons également du principe que nous voulons isoler le header et le footer du<br /><a href="https://www.nukleo.fr/blog/template-page-codeigniter/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Voici une manière simple et efficace de créer un (ou plusieurs) template(s) de page pour un site sous CodeIgniter, sans librairie ni plugin.<br />
<span id="more-19"></span></p>
<h3>Préambule</h3>
<p>Nous partirons du principe que nous voulons isoler le (ou les) template(s) du reste des views. Nous partirons également du principe que nous voulons isoler le header et le footer du template pour plus de flexibilité, et notamment pouvoir créer plusieurs templates dont le corps principal est différent (avec ou sans sidebar par exemple).</p>
<h3>Le template HTML</h3>
<p>Dans le répertoire <strong>/application/views</strong> créez un dossier nommé &laquo;&nbsp;<strong>templates</strong>&laquo;&nbsp;. C&rsquo;est dans celui-ci que nous placerons les fichiers de notre template. Il y aura 3 fichiers : <strong>&laquo;&nbsp;template.php&nbsp;&raquo;, &laquo;&nbsp;header.php&nbsp;&raquo; et &laquo;&nbsp;footer.php&nbsp;&raquo;.</strong></p>
<h4>template.php</h4>
<p>Le fichier le plus simple dont le contenu peut se résumer à ceci : </p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$this-&gt;load-&gt;view(&quot;templates/header&quot;); 
$this-&gt;load-&gt;view($contents);
$this-&gt;load-&gt;view(&quot;templates/footer&quot;); 
?&gt;
</pre>
<p><strong>Vous remarquerez 3 choses :</strong></p>
<ul>
<li><strong>&laquo;&nbsp;templates/&nbsp;&raquo;</strong> correspond au dossier que nous avons créé dans le répertoire &laquo;&nbsp;application/views&nbsp;&raquo;.</li>
<li>Nous <strong>omettons l&rsquo;extension</strong> des fichiers &laquo;&nbsp;header.php&nbsp;&raquo; et &laquo;&nbsp;footer.php&nbsp;&raquo;,  car c&rsquo;est CodeIgniter qui l&rsquo;ajoutera.</li>
<li><strong>$contents</strong> est une variable (dont le nom importe peu) qui sera définie dans le controlleur et correspondra à la view qui remplira le corps de la page.</li>
</ul>
<h4>header.php</h4>
<p>Ce fichier contiendra la partie haute du site — traditionnellement nommée &laquo;&nbsp;header&nbsp;&raquo; — avec notamment l&rsquo;en-tête de la page (déclarations html, section head) et la navigation du site (ce qui est à peu près la norme actuelle). Voici un exemple de ce que pourrait contenir ce fichier :</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;title&gt;&lt;?php echo $title; ?&gt;&lt;/title&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;meta name=&quot;description&quot; content=&quot;&lt;?php echo $description; ?&gt;&quot; /&gt;
	&lt;meta name=&quot;keywords&quot; content=&quot;&lt;?php echo $keywords; ?&gt;&quot; /&gt;
	&lt;link href=&quot;/css/styles.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div class=&quot;wrap&quot;&gt;
	&lt;div id=&quot;header&quot;&gt;
 		&lt;a href=&quot;/&quot;&gt;&lt;img src=&quot;/css/img/logo.png&quot; alt=&quot;logo&quot; /&gt;&lt;/a&gt;
		&lt;ul id=&quot;navigation&quot;&gt;
 			&lt;li&gt;&lt;?php echo anchor(base_url(), 'Accueil'); ?&gt;&lt;/li&gt;
			&lt;li&gt;&lt;?php echo anchor('services', 'Services'); ?&gt;&lt;/li&gt;
			&lt;li&gt;&lt;?php echo anchor('about', 'A propos'); ?&gt;&lt;/li&gt;
			&lt;li&gt;&lt;?php echo anchor('contact', 'Contact'); ?&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/div&gt;&lt;!-- end header --&gt;
</pre>
<p>Là encore rien de compliqué, la seule subtilité tenant dans les variables <strong>$title, $description et $keywords</strong> qui permettrons simplement de définir ces données dans le controlleur&#8230;</p>
<h4>footer.php</h4>
<p>Ce fichier contiendra, vous l&rsquo;aurez deviné, le pied de page ainsi que les balises de fermeture de page. Voici un exemple de contenu :</p>
<pre class="brush: xml; title: ; notranslate">
	&lt;div id=&quot;footer&quot;&gt;
		&lt;p&gt;Informations de copyright&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;&lt;!-- end wrap --&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>Le controlleur</h3>
<p>Récoltons les fruits de notre (dur) labeur ! Dans notre controlleur au lieu d&rsquo;appeler directement une view, nous chargerons celle-ci dans une variable que nous transmettrons à notre template (qui est lui-même une view). par exemple :</p>
<pre class="brush: php; title: ; notranslate">
function about()
{
	// définition des données variables du template
	$data['title'] = 'Le titre de la page';
	$data['description'] = 'La description de la page pour les moteurs de recherche';
	$data['keywords'] = 'les, mots, clés, de, la, page';
	
	// on charge la view qui contient le corps de la page
	$data['contents'] = 'page_contenu_view';

	// on charge la page dans le template
	$this-&gt;load-&gt;view('template', $data);
}
</pre>
<h3>Conclusion</h3>
<p>Et voilà, vous pouvez maintenant créer très rapidement un ou plusieurs templates de pages !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/template-page-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeIgniter + WordPress : afficher les derniers posts</title>
		<link>https://www.nukleo.fr/blog/codeigniter-wordpress-afficher-derniers-posts/</link>
		<comments>https://www.nukleo.fr/blog/codeigniter-wordpress-afficher-derniers-posts/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 08:06:04 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=7</guid>
		<description><![CDATA[Ajouter un blog WordPress à un site conçu avec CodeIgniter est très simple. Récupérer les derniers posts de WordPress pour les afficher dans CodeIgniter l&#8217;est aussi, voici comment. Préambule Nous utiliserons une structure de permaliens assez classique sous la forme de &#171;&#160;monsite.com/blog/le-nom-du-post&#160;&#187;. Si ce n&#8217;est pas le cas, il faudra adapter la requete mysql dans<br /><a href="https://www.nukleo.fr/blog/codeigniter-wordpress-afficher-derniers-posts/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Ajouter un blog WordPress à un site conçu avec CodeIgniter est très simple. Récupérer les derniers posts de WordPress pour les afficher dans CodeIgniter l&rsquo;est aussi, voici comment.<br />
<span id="more-7"></span></p>
<h3>Préambule</h3>
<p>Nous utiliserons une structure de permaliens assez classique sous la forme de &laquo;&nbsp;monsite.com/blog/le-nom-du-post&nbsp;&raquo;. Si ce n&rsquo;est pas le cas, il faudra adapter la requete mysql dans le model de Codeigniter. Un petit tour dans le gestionnaire de base de données permettra aisément de repérer les colonnes à utiliser.</p>
<h3>Le model</h3>
<p>Comme souvent dans Codeigniter, le gros du travail se situe dans le model. Nous allons créer le fichier &lsquo;application/models/blog_model.php&rsquo; qui contiendra ce qui suit (à noter que le code est lourdement commenté pour plus de précision) : </p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class Blog_model extends Model {
  function __construct() {
    parent::Model();
  }

  /**
   * Recupération des derniers posts de wordpress
   *
   * @param $count Le nombre de posts (par defaut : 5)
   */
  function get_latest_posts($count = 5) {
    // les colonnes à récupérer : à adapter à la structure des permaliens de WordPress
    $this-&gt;db-&gt;select('post_title, post_name');
    // on ne récupère que les posts qui sont publiés
    $this-&gt;db-&gt;where('post_status', 'publish');
    // on ne récupère que les posts
    $this-&gt;db-&gt;where('post_type', 'post');
    // nombre de posts à récupérer
    $this-&gt;db-&gt;limit($count);
    // ordre décroissant pour avoir les derniers posts en premier
    $this-&gt;db-&gt;order_by('ID', 'desc');

    // wp_posts = la table par défaut contenant les posts de WordPress : à adapter à votre configuration
    $query = $this-&gt;db-&gt;get('wp_posts');
    // on effectue la requete dont le résultat sera un objet. Si l'on veut un tableau on utilisera la fonction result_array()
    $data = $query-&gt;result();

    // renvoi des données au controller
    return $data;
  }
}
</pre>
<h3>Le controlleur</h3>
<p>Dans notre controller il suffira d&rsquo;appeler la fonction &lsquo;get_latest_posts()&rsquo; en attribuant sa valeur de retour à une entrée du tableau (array) des valeur transmises à la vue.</p>
<pre class="brush: php; title: ; notranslate">
// si le model n'est pas en autoload, il faut le charger dans le controlleur
$this-&gt;load-&gt;model('blog_model');
// $data est le tableau de données transmis à la vue, $blog_posts sera la variable disponible dans la vue
// get_latest_posts(10) indique que nous voulons récupérer les 10 derniers posts
$data['blog_posts'] = $this-&gt;blog_model-&gt;get_latest_posts(10);
// on charge la vue et transmet les données à celle-ci
$this-&gt;load-&gt;view('ma_view', $data);
</pre>
<h3>La vue</h3>
<p>Finalement dans la vue il suffit de faire une boucle sur la variable $blog_posts pour afficher les X derniers posts de WordPress.</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div&gt;
  &lt;h2&gt;Derniers articles du blog&lt;/h2&gt;
    &lt;ul&gt;
      &lt;?php foreach($blog_posts as $post) : ?&gt;
      &lt;li&gt;&lt;a href=&quot;blog/&lt;?php echo $post-&gt;post_name; ?&gt;&quot;&gt;&lt;?php echo $post-&gt;post_title; ?&gt;&lt;/a&gt;&lt;/li&gt;
     &lt;?php endforeach; ?&gt;
   &lt;/ul&gt;
&lt;/div&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/codeigniter-wordpress-afficher-derniers-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
