<?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; Astuces</title>
	<atom:link href="https://www.nukleo.fr/blog/tag/astuces/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>WordPress : Créer un plugin pour rendre functions.php indépendant du thème</title>
		<link>https://www.nukleo.fr/blog/wordpress-creer-plugin-pour-rendre-functions-independant-theme/</link>
		<comments>https://www.nukleo.fr/blog/wordpress-creer-plugin-pour-rendre-functions-independant-theme/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 11:11:40 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Astuces]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=41</guid>
		<description><![CDATA[Le fichier functions.php permet de modifier et/ou ajouter des fonctionnalités à WordPress mais si vous changez de thème, vous perdez ces modifications. On pourrait se contenter de copier/coller ces changements dans le nouveau thème, ou on pourrait les transférer dans un plugin afin de les conserver quel que soit le thème. Faut-il tout transférer ?<br /><a href="https://www.nukleo.fr/blog/wordpress-creer-plugin-pour-rendre-functions-independant-theme/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Le fichier <a href="http://codex.wordpress.org/Theme_Development#Functions_File" title="Codex WordPress (anglais)" target="_blank">functions.php</a> permet de modifier et/ou ajouter des fonctionnalités à WordPress mais si vous changez de thème, vous perdez ces modifications. On pourrait se contenter de copier/coller ces changements dans le nouveau thème, ou on pourrait les transférer dans un plugin afin de les conserver quel que soit le thème.<span id="more-41"></span></p>
<h3>Faut-il tout transférer ?</h3>
<p>La réponse à cette question simple l&rsquo;est tout aussi : non. Pour savoir ce qu&rsquo;il faut transférer il faut faire une distinction entre les fonctions qui impactent le <strong>contenu</strong> et celles qui impactent le <strong>design.</strong> Celles qui ont un impact sur le contenu ont tout intérêt à être déplacées dans un (ou plusieurs) plugins alors que les autres servent uniquement le design ou layout du site et doivent rester dans le fichier functions.php du thème.</p>
<h4>Que faut-il (ou peut-on) transférer ?</h4>
<p>Dès l&rsquo;instant où le fait de ne plus avoir une fonction va poser un problème il serait judicieux qu&rsquo;elle se retrouve dans le plugin, par exemple :</p>
<ul>
<li>Les shortcodes</li>
<li>Les filtrages de contenu</li>
<li>Les custom post types</li>
<li>Les custom taxonomies</li>
<li>Les ajouts à l&rsquo;admin de WordPress</li>
</ul>
<h4>Que faut-il conserver dans functions.php ?</h4>
<p>Si une fonction n&rsquo;a qu&rsquo;un impact visuel, notamment sur le design et la structure du site, dans ce cas il appartient directement au thème et doit par conséquent rester dans functions.php &#8211; par exemple :</p>
<ul>
<li>Les menus</li>
<li>Les sidebars</li>
<li>La pagination</li>
</ul>
<h3>Créer le plugin de fonctionnalités</h3>
<p>La création d&rsquo;un plugin est très simple et si vous savez ajouter des fonctions à functions.php alors vous pouvez créer votre plugin !</p>
<h4>Première étape</h4>
<p>Créez un repertoire qui porte le <strong>nom de votre plugin</strong> en n&rsquo;utilisant que des lettres non accentuées, des chiffres et des tirets. Pour cette article on partira du principe que le nom du plugin est monsite-fonctions.</p>
<p>Dans ce répertoire créez un fichier PHP qui porte exactement le même nom : monsite-fonctions.php.</p>
<h4>Deuxième étape</h4>
<p>Ajoutez les commentaires en début de fichier qui permettront à WordPress de voir qu&rsquo;il s&rsquo;agit bien d&rsquo;un plugin :</p>
<pre class="brush: php; title: ; notranslate">
/*
Plugin Name: Fonctions de monsite
Plugin URI: http://www.monsite.com/
Description: Déplace les fonctionnalités qui impactent le contenu dans un plugin
Author: Nom Prénom
Version: 0.1
Author URI: http://www.monsite.com/
*/
</pre>
<h4>Troisième étape</h4>
<p>Il n&rsquo;y a plus qu&rsquo;a insérer les fonctions dans ce fichier, puis activer le plugin dans l&rsquo;administration de WordPress et le tour est joué !</p>
<h3>Conclusion</h3>
<p>Comme vous l&rsquo;avez vu il est très simple de créer un plugin rendant les fonctions clés d&rsquo;un site sous WordPress indépendantes de son thème. Cela peut être également très utile dans le cas où votre client veut pouvoir changer de thème sans pour autant perdre ses fonctions. Vous pouvez également vous constituer une bibliothèque de plugins réutilisables dans d&rsquo;autres thèmes.</p>
<p>Pour en savoir plus sur la création de plugins, je vous invite à consulter le codex de WordPress (en anglais) : <a href="http://codex.wordpress.org/Writing_a_Plugin" target="_blank">writing a plugin</a></p>
<p>Happy coding !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/wordpress-creer-plugin-pour-rendre-functions-independant-theme/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>WordPress : limiter la recherche à certains types de posts</title>
		<link>https://www.nukleo.fr/blog/wordpress-limiter-recherche-certains-type-posts/</link>
		<comments>https://www.nukleo.fr/blog/wordpress-limiter-recherche-certains-type-posts/#comments</comments>
		<pubDate>Mon, 09 May 2011 04:23:29 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Astuces]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=40</guid>
		<description><![CDATA[Par défaut, le moteur de recherche de WordPress cherche les termes demandés dans tous les types de posts publiés du site, à savoir : les articles (posts), les pages (post-type page), les custom posts etc&#8230; Dans certains cas de figure on pourrait souhaiter limiter la recherche à un seul type de post, ou la restreindre<br /><a href="https://www.nukleo.fr/blog/wordpress-limiter-recherche-certains-type-posts/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>Par défaut, le moteur de recherche de WordPress cherche les termes demandés dans tous les types de posts publiés du site, à savoir : les articles (posts), les pages (post-type page), les custom posts etc&#8230; Dans certains cas de figure on pourrait souhaiter <strong>limiter la recherche</strong> à un seul type de post, ou la restreindre à certains types. Voici comment.<span id="more-40"></span></p>
<h3>Functions.php</h3>
<p>Il suffit d&rsquo;ajout un tout petit bloc de code dans le fichiers <strong>functions.php</strong> :</p>
<pre class="brush: php; title: ; notranslate">
// filtrage des recherches -&gt; limite aux articles publiés
function filtre_recherche( $query ) {
	if ( $query-&gt;is_search &amp;&amp; !is_admin() ) {
		$query-&gt;set( 'post_type', 'post' );
	}
	return $query;
}
// ajout du filtrage sur le hook 'pre_get_post'
add_filter( 'pre_get_posts', 'filtre_recherche' );
</pre>
<p>Ce bout de code restreindra la recherche aux seuls articles (posts) publiés. Si l&rsquo;on souhaite étendre la recherche à plusieurs types, il suffit de modifier légèrement la fonction :</p>
<pre class="brush: php; title: ; notranslate">
// filtrage des recherches -&gt; limite aux articles publiés, aux pages et à un custom post type
function filtre_recherche( $query ) {
	if ( $query-&gt;is_search &amp;&amp; !is_admin() ) {
		$query-&gt;set(  'post_type', array( 'post', 'page', 'custom-post-type' ) );
	}
	return $query;
}
// ajout du filtrage sur le hook 'pre_get_post'
add_filter( 'pre_get_posts', 'filtre_recherche' );
</pre>
<p>Vous l&rsquo;aurez remarqué, seule la partie <strong><code>$query->set()</code></strong> change : on lui passe un array des types de posts que l&rsquo;on souhaite voir apparaître dans les résultats de recherche.</p>
<h3>Pour en savoir plus</h3>
<p>Rendez-vous sur le <a href="http://codex.wordpress.org/">Codex de WordPress</a> : la class <a href="http://codex.wordpress.org/Function_Reference/WP_Query">WP_query</a> (qui contient la propriété <code>$query</code>) et le <a href="http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts">hook pre_get_posts</a></p>
<p>Happy coding !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/wordpress-limiter-recherche-certains-type-posts/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
