<?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>Ressources développement web</title>
	<atom:link href="http://blog.dev-net.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dev-net.fr</link>
	<description>Des informations utiles à ceux qui les cherchent</description>
	<lastBuildDate>Sun, 19 Feb 2012 21:42:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Fier de développer et d&#8217;accomplir les objectifs</title>
		<link>http://blog.dev-net.fr/2012/02/fier-de-developper-et-daccomplir-les-objectifs/</link>
		<comments>http://blog.dev-net.fr/2012/02/fier-de-developper-et-daccomplir-les-objectifs/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 20:03:05 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[algorithme]]></category>
		<category><![CDATA[citation]]></category>
		<category><![CDATA[codes sources]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[méthode]]></category>
		<category><![CDATA[métier]]></category>
		<category><![CDATA[philosphie]]></category>
		<category><![CDATA[raisonnement]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=359</guid>
		<description><![CDATA[Demandez à un développeur d&#8217;expliquer ce qui lui passe par la tête pour arriver à ses fins ! Je ne crois pas qu&#8217;il soit en mesure de vous répondre. Sa logique et son raisonnement sont des composantes personnelles. Si celles-ci respectent les notions fondamentales de la programmation, le résultat de cette logique devient universelle, et [...]]]></description>
			<content:encoded><![CDATA[<p>Demandez à un <strong>développeur</strong> d&#8217;expliquer ce qui lui passe par la tête pour arriver à ses fins ! Je ne crois pas qu&#8217;il soit en mesure de vous répondre. Sa <strong>logique</strong> et son <strong>raisonnement</strong> sont des composantes personnelles. Si celles-ci respectent les notions fondamentales de la <strong>programmation</strong>, le résultat de cette logique devient <strong>universelle</strong>, et réutilisable à l&#8217;infinie.</p>
<p>Quelque soit le <strong>raisonnement</strong> et le <strong>code source</strong> déployé, <span style="text-decoration: underline;"><strong>si petit soit-il</strong></span>, le traitement doit s&#8217;exécuter à la perfection.<br />
<span id="more-359"></span><br />
J&#8217;en envie de vous rapporter deux citations qui me tiennent à cœur, et que je garde en tête comme une <strong>philosophie fondamentale</strong> pour avancer :</p>
<blockquote><p>Beaucoup de choses motivent les développeurs :</p>
<ul>
<li>la fierté artistique</li>
<li>la satisfaction du travail bien fait proche de l&#8217;artisanat</li>
<li>le sentiment idéaliste de faire partie de quelque chose de plus important que vous, quelque chose qui vous dépasse</li>
<li>le désir d&#8217;aider le monde et de trouver des solutions aux problèmes</li>
</ul>
<p>En l&#8217;absence de rémunération, dans la plupart des cas, les gens cherchent surtout à se forger une réputation auprès de leurs pères.</p>
<p style="text-align: right;"><a href="http://fr.wikipedia.org/wiki/Eric_Raymond" target="_blank">Eric Raymond</a> (Programmeur et inventeur du terme Open Source)</p>
</blockquote>
<p>&nbsp;</p>
<blockquote><p>Pour moi le code présente beaucoup de similitudes avec la poésie ou certains genres d&#8217;écritures. Sa beauté réside dans sa structure et dans le fait de classer les idées une par une de façon claire.</p>
<p>Si le code est bon, vous pouvez le lire, sans commentaires. Vous comprendrez immédiatement pourquoi il a été écrit et combien il est élégant.</p>
<p>Vous recherchez un code à la fois élégant et clair, mais qui ne repose pas sur des astuces de programmation, qui ne fasse pas d&#8217;hypothèses qui risqueraient de s&#8217;avérer fausses à l&#8217;avenir, parce-que la dernière chose que vous voulez, c&#8217;est avoir trop de code dans le noyau final.</p>
<p>Le but n&#8217;étant pas de programmer et de reprogrammer à l&#8217;infinie.</p>
<p style="text-align: right;"><a href="http://fr.wikipedia.org/wiki/Alan_Cox" target="_blank">Alan Cox</a> (Programmeur et bras droit de Linus Torvalds)</p>
</blockquote>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2012/02/fier-de-developper-et-daccomplir-les-objectifs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Messages d&#8217;erreurs sur PrestaShop et sécurité</title>
		<link>http://blog.dev-net.fr/2012/01/messages-erreurs-securite-prestashop-debug-debogage/</link>
		<comments>http://blog.dev-net.fr/2012/01/messages-erreurs-securite-prestashop-debug-debogage/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 14:16:30 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[PrestaShop 1.3]]></category>
		<category><![CDATA[PrestaShop 1.4]]></category>
		<category><![CDATA[PrestaShop 1.5]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[debogage]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[développeur]]></category>
		<category><![CDATA[erreur]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[mode]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=330</guid>
		<description><![CDATA[La sécurité du contenu est primordiale dans la publication d&#8217;un site web. Il n&#8217;en est pas moins pour PrestaShop. La politique sécuritaire est alors de n&#8217;afficher par défaut aucun message d&#8217;erreur, ou de retour d&#8217;un quelconque débogage de code, ou même de configuration de serveurs / services liés à l&#8217;hébergement web. Afficher des erreurs éventuelles, [...]]]></description>
			<content:encoded><![CDATA[<p>La <strong>sécurité</strong> du contenu est primordiale dans la <strong>publication</strong> d&#8217;un site <strong>web</strong>. Il n&#8217;en est pas moins pour PrestaShop. La <strong>politique sécuritaire</strong> est alors de n&#8217;afficher <span style="text-decoration: underline;"><strong>par défaut</strong></span> <strong>aucun message d&#8217;erreur</strong>, ou de retour d&#8217;un quelconque <strong>débogage</strong> de <strong>code</strong>, ou même de configuration de <strong>serveurs</strong> / services liés à l&#8217;<strong>hébergement web</strong>. Afficher des <strong>erreurs</strong> éventuelles, ou plutôt laisser la possibilité de les afficher expose votre site web à la divulgation d&#8217;informations qui pourraient servir mal-intentionnellement à votre égard.<br />
<span id="more-330"></span>En <strong>mode production</strong>, contrairement au mode <strong>développement</strong>, et / ou en pré-production, il est impératif de laisser cet option par défaut, afin de ne rien afficher, même si votre page est en erreur. De cette manière, toute tentative mal-seine de provocation volontaire d&#8217;erreur ne mènera son auteur qu&#8217;à un résultat nul qui pourrait l&#8217;informer d&#8217;une faille éventuelle dans votre boutique PrestaShop.</p>
<h2>2 options sont donc envisageables pour PrestaShop</h2>
<p>Si vous êtes un développeur / intégrateur, si vous avez besoin d&#8217;une assistance ponctuelle pour résoudre un problème de comportement anormal sur votre boutique ou si vous avez une page blanche et que vous ne comprenez pas pourquoi, etc., alors éditez votre fichier <strong>./config/config.inc.php</strong>, et modifier les variables telles qu&#8217;elles sont présentées ci-dessous :</p>
<pre class="brush: php; gutter: true">/* Debug only */
@ini_set(&#039;display_errors&#039;, &#039;on&#039;);
define(&#039;_PS_DEBUG_SQL_&#039;, true);

$start_time = microtime(true);

/* Compatibility warning */
define(&#039;_PS_DISPLAY_COMPATIBILITY_WARNING_&#039;, true);</pre>
<p>Si vous ne constatez rien d&#8217;anormal, si votre boutique est en <strong>production</strong>, ou si vous n&#8217;êtes pas en phase de <strong>développement</strong> ou de <strong>débug</strong>, alors éditez votre fichier <strong>./config/config.inc.php</strong>, et modifier les variables telles qu&#8217;elles sont présentées ci-dessous :</p>
<pre class="brush: php; gutter: true">/* Debug only */
@ini_set(&#039;display_errors&#039;, &#039;off&#039;);
define(&#039;_PS_DEBUG_SQL_&#039;, false);

$start_time = microtime(true);

/* Compatibility warning */
define(&#039;_PS_DISPLAY_COMPATIBILITY_WARNING_&#039;, false);</pre>
<h2>Le debug de smarty peut vous aider</h2>
<p>Il existe aussi la possibilité d&#8217;activer la résultante complète du <strong>template</strong> <strong>Smarty</strong> en cours d’exécution. Ce <strong>mode débug</strong> n&#8217;est pas un résultat d&#8217;<strong>erreurs</strong>, mais un contenu permettant de visualiser si les démarches du <strong>développeur</strong> sont bien prises en compte pour l&#8217;<strong>intégration</strong> des <strong>traitements</strong> et des valeurs dans le template de la boutique <strong>PrestaShop</strong>. Vous pouvez alors l&#8217;activer ponctuellement en éditant votre fichier <strong>./config/smarty.config.inc.php</strong>, et en autorisant la valeur ci-dessous :</p>
<pre class="brush: php; gutter: true">$smarty-&gt;debugging = true;</pre>
<p>Pensez à remettre cette valeur à <strong>false</strong> par défaut, une fois vos démarches terminées.</p>
<h2>Vous souhaitez sécuriser un peu plus votre hébergement web</h2>
<p>Ce qui suit ne s&#8217;arrête pas simplement à l&#8217;usage de PrestaShop dans votre hébergement web, mais ceci est une partie des <strong>optimisations</strong> web qui font la différence au quotidien et sur Internet en terme de <strong>sécurité</strong> et de garantie d&#8217;avoir un site web qui dure dans le temps.</p>
<p>Si votre hébergement web fait partie d&#8217;un <strong>service web</strong> que vous gérez, et si les <strong>publications</strong> web mises à disposition sont vouées à l&#8217;utilisateur final et non à un mode de <strong>développement</strong> ou de <strong>pré-production</strong>, alors je vous conseille vivement de modifier un élément important dans votre fichier <strong>php.ini</strong>, et de le désactiver comme ceci :</p>
<pre class="brush: bash; gutter: true">display_errors = Off</pre>
<p>Cette option est associée à la variable <strong>error_reporting</strong> de ce même <strong>php.ini</strong>. Elle permet de donner le niveau d&#8217;<strong>alertes</strong> à afficher si des <strong>erreurs</strong> et/ou <strong>warnings</strong> failliraient le traitement. En mode de développement pure, il convient de passer cette valeur comme ceci :</p>
<pre class="brush: bash; gutter: true">error_reporting = E_ALL | E_STRICT</pre>
<p>Ce niveau permet au <strong>développeur</strong> d&#8217;afficher l&#8217;ensemble des <strong>erreurs</strong> et <strong>warnings</strong>, même de bas niveaux, ce qui assure pendant toute la phase de <strong>développement</strong> la création d&#8217;un code propre et fonctionnel. Mais le rapport d&#8217;erreur ne s&#8217;affichera que si sa dépendance <strong>display_errors</strong> est activée. C&#8217;est pour cela qu&#8217;il convient de passer l&#8217;option <strong>display_errors</strong> à <strong>false</strong> par défaut sur votre serveur web en production, ce qui n&#8217;est pas le cas par défaut habituellement.</p>
<p>Dans le cas où vous n&#8217;avez pas l&#8217;accès à ce fichier de configuration <strong>php.ini</strong>, vous pouvez essayer de contrôler cette option par le biais du <strong>.htaccess</strong> (de préférence celui à la racine du votre dossier web), ou par code <strong>php</strong> (de préférence avant tous les traitements).</p>
<h2>Désactiver l&#8217;affichage des erreurs depuis le fichier .htaccess</h2>
<p>Si vous en avez les autorisations dans les options de votre hébergement, la ligne suivante fera l&#8217;affaire en haut de votre fichier .htaccess :</p>
<pre class="brush: bash; gutter: true">php_flag display_errors off</pre>
<h2>Désactiver l&#8217;affichage des erreurs depuis le code</h2>
<p>Si vous en avez les autorisations dans les <strong>options</strong> de votre hébergement, la ligne suivante en début des <strong>traitements</strong> <strong>php</strong> pourra annuler l&#8217;affichage des messages d&#8217;<strong>erreurs</strong> php :</p>
<pre class="brush: php; gutter: true">error_reporting(0);</pre>
<p>De même pour les templates Smarty, <span style="text-decoration: underline;"><strong>propre à PrestaShop</strong></span>, et à spécifier après le chargement du <strong>framework</strong> Smarty Template :</p>
<pre class="brush: php; gutter: true">$smarty-&gt;error_reporting = 0;</pre>
<p>Pour <strong>php</strong>, vous avez aussi la possibilité de contrôler les <strong>niveaux d&#8217;alertes</strong> :</p>
<pre class="brush: php; gutter: true">// Rapporte les erreurs d&#039;exécution de script
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Rapporter les E_NOTICE peut vous aider à améliorer vos scripts
// (variables non initialisées, variables mal orthographiées..)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Rapporte toutes les erreurs à part les E_NOTICE
// C&#039;est la configuration par défaut de php.ini
error_reporting(E_ALL ^ E_NOTICE);

// Reporte toutes les erreurs PHP (Voir l&#039;historique des modifications)
error_reporting(E_ALL);

// Reporte toutes les erreurs PHP
error_reporting(-1);

// Même chose que error_reporting(E_ALL);
ini_set(&#039;error_reporting&#039;, E_ALL);</pre>
<h2>Parano, non, mais prévoyant</h2>
<p>Je pense que cet article peut inviter les développeurs web, les agences web, ou même monsieur tout le monde qui s&#8217;initie au développement, a considérer que les publications <strong>dynamiques</strong> sur le web sont des proies permanentes sur Internet. Si vous autorisez l&#8217;affichage d&#8217;erreurs, et que vous-même pensez que 99% de votre site est bien conçu, les 1% restant générant des erreurs sur des pages introuvables, de code, ou pire, des erreurs SQL, peuvent être indexés par les moteurs de recherches. Si vous utilisez un framework connu, un CMS en vogue, votre site web peut sortir dans les résultats de recherches liés à des erreurs engendrant des tentatives d&#8217;intrusions, ou des injections SQL ou de codes.</p>
<p>En conclusion, soyez prévoyant sur cet aspect parfois délesté.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2012/01/messages-erreurs-securite-prestashop-debug-debogage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajoutez vos propres fonctions à Smarty depuis un module prestashop</title>
		<link>http://blog.dev-net.fr/2012/01/ajoutez-vos-propres-fonctions-a-smarty-depuis-un-module-prestashop/</link>
		<comments>http://blog.dev-net.fr/2012/01/ajoutez-vos-propres-fonctions-a-smarty-depuis-un-module-prestashop/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 11:39:44 +0000</pubDate>
		<dc:creator>Broceliande</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Modules]]></category>
		<category><![CDATA[PrestaShop]]></category>
		<category><![CDATA[PrestaShop 1.3]]></category>
		<category><![CDATA[PrestaShop 1.4]]></category>
		<category><![CDATA[PrestaShop 1.5]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[contrôleur]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[exemple]]></category>
		<category><![CDATA[forum]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[méthode]]></category>
		<category><![CDATA[registerPlugin]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[smartyRegisterFunction]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[tpl]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=298</guid>
		<description><![CDATA[Une des questions qui revient très souvent sur le forum communautaire concerne smarty. Beaucoup souhaitent ajouter/afficher des données que tel ou tel contrôleur n&#8217;a pas forcément assigné à smarty et qui sont donc inaccessibles dans les fichiers .tpl . Quand un contrôleur donné ne fourni pas ces éléments , il faut alors soit modifier le [...]]]></description>
			<content:encoded><![CDATA[<p>Une des questions qui revient très souvent sur le forum communautaire concerne <strong>smarty</strong>.</p>
<p>Beaucoup souhaitent ajouter/afficher des données que tel ou tel contrôleur n&#8217;a pas forcément assigné à smarty et qui sont donc inaccessibles dans les fichiers <strong>.tpl</strong> .</p>
<p>Quand un <strong>contrôleur</strong> donné ne fourni pas ces éléments , il faut alors soit modifier le contrôleur (ou le surcharger bien sûr), soit disposer d&#8217;une fonction <strong>smarty</strong> qui permet, depuis un élément à notre disposition , d&#8217;en obtenir un ou plusieurs autres.</p>
<p>Il y a une foultitude d&#8217;applications de la <strong>méthode</strong> présentée ici, que je vous laisse apprécier vous même&#8230;</p>
<p><span id="more-298"></span></p>
<p>J&#8217;aborde donc deux notions ici , celle de la création d&#8217;un module absolument basique , mais suffisant à l&#8217; &laquo;&nbsp;exercice&nbsp;&raquo; , ainsi qu&#8217;une <strong>fonction native</strong> de smarty absolument essentielle à son extension et très largement utilisée par <strong>PrestaShop</strong>.</p>
<p>Pour commencer , mais sans m&#8217;étendre , car il existe d&#8217;excellents tutoriels déjà sur la création d&#8217;un module je vais définir mon module de base , que je nommerais &laquo;&nbsp;<strong>mysmarty</strong>&laquo;&nbsp;.</p>
<p>Pour éviter toute frustration je commente malgré tout les lignes liées à cette étape , rien de sorcier mais si ça peut aider &#8230;</p>
<p>A noter que devant l&#8217;imminence de la sortie de la 1.5 , le <strong>code</strong> fourni n&#8217;est pas compatible avec la 1.3 , mais peut être adapté bien sûr &#8230; tout comme il devra l&#8217;être pour la 1.5 .</p>
<p>Si besoin je m&#8217;étendrais un peu sur les différences et raisons qui font que ce code ne tournera ni sur la 1.3 ni sur la 1.5 , mais pour l&#8217;heure je me borne au présent tutoriel.</p>
<p>Dans smarty , on peut donc enregistrer deux types de codes personnalisés , à savoir le type <strong>plugin</strong>, qui sont des fonctions classiques pouvant retourner à peu près n&#8217;importe quoi , et le type <strong>modifiers</strong>, qui eux appliquent une modification à la chaine qui le précède .</p>
<p>Un exemple de plugin dans smarty est par exemple <strong>Convertprice</strong> .</p>
<p>Un exemple de modifier est le modifier <strong>Truncate</strong> , qui permet de tronquer une chaine.</p>
<p>Dans l&#8217;exemple présent je m&#8217;intéresse au type plugin. Il faut savoir qu&#8217;il y a deux façons d&#8217;enregistrer un plugin , et c&#8217;est là où je souhaite en venir avec cette article. Nombre de fonctions enregistrées sont des méthodes statiques, qui ont leur intérêt mais aussi leurs limites.</p>
<p>Mais il est également possible comme on va le voir ici d&#8217;enregistrer des méthodes d&#8217;instance, et pouvoir donc utiliser les méthodes héritées de l&#8217;instance d&#8217;objet , comme une , relativement intéressante , la fonction l héritée de Module.</p>
<p>On y va, nous créons donc un dossier mysmarty , dans le dossier modules, dans lequel on crée un fichier mysmarty.php :</p>
<p>Bien sûr on commence par déclarer la classe (le module donc):</p>
<pre class="brush: php; gutter: true">&lt;?php
// déclaration de la classe : tout module étend la classe Module
class MySmarty extends Module
{</pre>
<p>Ensuite un constructeur :</p>
<pre class="brush: php; gutter: true">    // le constructeur , indispensable pour que le module soit géré et affiché en back office notamment
    public function __construct()
    {
	// NB : la propriété name doit impérativement correspondre au nom de classe , en minuscule
	$this-&gt;name = &#039;mysmarty&#039;;
	// la section dans laquelle sera classé le module , ici fonctionnalités front office...
	$this-&gt;tab = &#039;front_office_features&#039;;
	$this-&gt;version = &quot;1.0&quot;; // no comment , n&#039;est-ce pas ?
	// mine de rien, à défaut de vouloir réécrire une tonne de code déjà géré par la classe parente, on doit tout de même appeler son constructeur
	parent::__construct();
	$this-&gt;author = &#039;Broceliande&#039;; // besoin de commentaire là dessus ?
	$this-&gt;displayName = $this-&gt;l(&#039;Smarty Funcs&#039;); // nom affiché dans le BO , l&#039;utilisation de la fonction l héritée de Module permet de rendre ceci multilingue
	$this-&gt;description = $this-&gt;l(&#039;Adds smarty usefull funcs&#039;); // idem pour la description
    }</pre>
<p>Vient le tour de l&#8217; &laquo;&nbsp;installeur&nbsp;&raquo; du module. On souhaite que la fonction smarty soit définie le plus tôt possible pour y avoir accès partout dans les tpl . Pour cela le <strong>hook header</strong> est idéal , car à ce stade aucun tpl n&#8217;est encore chargé.</p>
<pre class="brush: php; gutter: true">    public function install()
    {
	// on souhaite que la fonction soit disponible partout , alors on greffe le module sur le hook header
	if  (!$this-&gt;registerHook(&#039;header&#039;)) return false;
	// on laisse la classe parente faire son job
	if (!parent::install())	return false;
	return true;
    }</pre>
<p>enfin puisque le module est greffé sur le <strong>hook header</strong> , il convient d&#8217;implémenter la méthode qui sera automatiquement appelée par <strong>presta</strong>. C&#8217;est ici que nous allons enregistrer notre (ou nos) fonction(s) dans smarty :</p>
<pre class="brush: php; gutter: true">    public function hookHeader($params)
    {
	// ceci changera dans la 1.5 avec la disparition des globales et l&#039;apparition du contexte...
	global $smarty;
	// c&#039;est la seule ligne un peu particulière de ce module
	// on définit un callback vers une instance du module:  $this est bien sûr le module , &amp; devant permet de le passer par référence
	$callback = array(&amp;$this,&#039;maFonctionSMarty&#039;);
	$type =
	// l&#039;enregistrement proprement dit dans smarty
	// methode implémentée dans prestashop (smarty.config.inc.php)
	// cette methode fonctionne aussi bien pour smarty 2 que pour smarty 3
	smartyRegisterFunction($smarty, &#039;function&#039;, &#039;maFonctionSMarty&#039;, $callback);
	// une alternative , appeler la methode native de l&#039;objet smarty , mais il y a une syntaxe différente selon la version de smarty : ici la syntaxe smarty 3
	//$smarty-&gt;registerPlugin(&#039;function&#039;, &#039;maFonctionSMarty&#039;, $callback);
    }</pre>
<p>C&#8217;est fait , on a enregistré notre méthode maFonctionSmarty , mais évidemment il faut également définir cette méthode (on préfère dire implémenter):</p>
<pre class="brush: php; gutter: true">    public function maFonctionSMarty($params)
    {
	return $this-&gt;l(&#039;mon texte traduit&#039;);
    }</pre>
<p>Voilà qui est fait.</p>
<p>On ferme tout de même la classe ainsi crée :</p>
<pre class="brush: actionscript3; gutter: true">}</pre>
<p>L&#8217;<strong>exemple</strong> est on ne peut plus basique, mais la chose intéressante est que la chaîne affichée sera administrable avec les traductions du présent module.</p>
<p>Vous pouvez donc dans la méthode <strong>maFonctionSmarty</strong> intégrer tout appel type <strong>$this-&gt;method()</strong> , etc, ce qui représente un avantage certain dans beaucoup de cas , et dont je vous laisse apprécier l&#8217;intérêt.</p>
<p>Il reste à voir comment sera appelée cette méthode fraîchement enregistrée dans vos <strong>tpl</strong> :</p>
<p>Selon les besoins , on peut ou non passer des paramètres à la fonction .</p>
<p>Sans paramètre , on appellera la fonction de cette manière dans le tpl :</p>
<pre class="brush: php; gutter: true">{maFonctionSmarty}</pre>
<p>Avec paramètres</p>
<pre class="brush: php; gutter: true">{maFonctionSmarty monParametre=&quot;toto&quot; monParametre2=3}</pre>
<p>A noter que ces paramètres sont transmis sous forme de tableau.</p>
<p>On accédera donc à ces derniers de cette manière :</p>
<pre class="brush: actionscript3; gutter: true">    public function maFonctionSMarty($params)
    {
	$monParametre = $params[&#039;monParametre&#039;];
	$monParametre1 = $params[&#039;monParametre1&#039;];
	return $this-&gt;l(&#039;parametres: &#039;).$monParametre.&quot;, &quot;.$monParametre1;
    }</pre>
<p>C&#8217;est tout pour cette fois mais je considère que cet article n&#8217;est qu&#8217;une introduction et devra probablement être approfondi et complété selon vos questions/commentaires tant les possibilités sont vastes.</p>
<p>Merci de votre lecture</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2012/01/ajoutez-vos-propres-fonctions-a-smarty-depuis-un-module-prestashop/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Laissez-vous guider pour vos développements PrestaShop</title>
		<link>http://blog.dev-net.fr/2011/12/guide-tutorial-tutoriel-developpeur-integrateur-designer-prestashop/</link>
		<comments>http://blog.dev-net.fr/2011/12/guide-tutorial-tutoriel-developpeur-integrateur-designer-prestashop/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 10:52:12 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[PrestaShop 1.4]]></category>
		<category><![CDATA[PrestaShop 1.5]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[ressources]]></category>
		<category><![CDATA[thème]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=266</guid>
		<description><![CDATA[Si vous cherchez une documentation pour débuter dans le développement des modules, d&#8217;override ou de modification de votre thème, la team PrestaShop a mis en place un dashboard régulièrement mis à jour. Voici les différents guides qui pourraient vous être très utiles : Le guide du développeur Le guide du designer / intégrateur Contenu du [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous cherchez une <strong>documentation</strong> pour débuter dans le développement des <strong>modules</strong>, d&#8217;<strong>override</strong> ou de modification de votre <strong>thème</strong>, la team PrestaShop a mis en place un <strong>dashboard</strong> régulièrement mis à jour. Voici les différents guides qui pourraient vous être très utiles :</p>
<ul>
<li><a href="http://doc.prestashop.com/pages/viewpage.action?pageId=3801201" target="_blank">Le guide du développeur</a></li>
<li><a href="http://doc.prestashop.com/display/PS14/Guide+du+designer" target="_blank">Le guide du designer / intégrateur</a></li>
</ul>
<p><span id="more-266"></span></p>
<h2>Contenu du guide du développeur :</h2>
<ul>
<li>Créer un module PrestaShop</li>
<li>Tutoriels pour développeurs</li>
<ul>
<li>Tutoriel Webservice REST</li>
<ul>
<li>Chapitre 1 &#8211; Mise en place _ Création des accès dans le Back Office</li>
<li>Chapitre 2 &#8211; Découverte _ Tester l&#8217;accès au service web avec le navigateur</li>
<li>Chapitre 3 &#8211; Premiers pas _ Accéder au service web et lister les clients</li>
<ul>
<li>3.1 Accéder au service web</li>
<li>3.2 Gestion des erreurs</li>
<li>3.3 Lister les clients</li>
</ul>
<li>Chapitre 4 &#8211; Récuperer des données _ Récupérer un client</li>
<li>Chapitre 5 &#8211; Modification _ Mettre à jour un client</li>
<li>Chapitre 6 &#8211; Création _ Formulaire d&#8217;ajout à distance</li>
<li>Chapitre 7 &#8211; Suppression _ Retirer des comptes client de la base</li>
<li>Chapitre 8 – Utilisation avancée</li>
<li>Mémento _ Notions énoncées dans ce tutorial</li>
</ul>
<li>Modules, surcharge, web service</li>
<li>Mieux comprendre et utiliser les hooks</li>
<li>La synchronisation via les Hooks</li>
<li>Cours de sécurité accéléré no. 1 &#8211; Never trust foreign data</li>
<li>Cours de sécurité accéléré no. 2 &#8211; Injections SQL</li>
<li>Surcharge et override</li>
<li>Les bonnes pratiques de la classe Db sur Prestashop 1.4</li>
<li>Cours de sécurité accéléré no. 3 &#8211; XSS</li>
<li>Les modules transporteurs &#8211; fonctionnement, création, configuration</li>
<li>Cours de Sécurité accéléré no. 4 &#8211; CSRF</li>
</ul>
</ul>
<h2>Contenu du guide du designer / intégrateur :</h2>
<ul>
<li>Conseils de design</li>
<ul>
<li>Penser en amont</li>
<li>Recommandations techniques</li>
<li>Ergonomie</li>
</ul>
<li>Créer un thème</li>
<ul>
<li>Concepts et informations techniques</li>
<li>Personnaliser le thème par défaut</li>
<li>Créez votre propre thème</li>
<li>Intégration : où vont les points d&#8217;accroche et les modules</li>
</ul>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2011/12/guide-tutorial-tutoriel-developpeur-integrateur-designer-prestashop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend sur PrestaShop pour développer vos modules</title>
		<link>http://blog.dev-net.fr/2011/12/zend-sur-prestashop-pour-developper-vos-modules/</link>
		<comments>http://blog.dev-net.fr/2011/12/zend-sur-prestashop-pour-developper-vos-modules/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 14:48:42 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[PrestaShop 1.4]]></category>
		<category><![CDATA[PrestaShop 1.5]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[modules]]></category>
		<category><![CDATA[oops]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[portage]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=246</guid>
		<description><![CDATA[Toujours dans un soucis de créer mieux, plus et rapidement, une nouvelle issue semble voir le jour avec le projet Oops initié par Mexique1 membre du forum PrestaShop. Le projet est en fait un portage du célèbre framework Zend, sur la plateforme PrestaShop (qui elle même est son propre framework). Les avantages et inconvénients sont [...]]]></description>
			<content:encoded><![CDATA[<p>Toujours dans un soucis de créer mieux, plus et rapidement, une nouvelle issue semble voir le jour avec le projet <strong>Oops</strong> initié par <strong>Mexique1</strong> membre du forum PrestaShop.</p>
<p>Le projet est en fait un portage du célèbre <strong>framework</strong> <strong>Zend</strong>, sur la plateforme PrestaShop (qui elle même est son propre framework). Les avantages et inconvénients sont à débattre et dans tous les cas, cette initiative mène tout de même à plusieurs réflexions qui feront plus tard de PrestaShop un outil de plus en plus évolutif et ouvert.<span id="more-246"></span></p>
<p>On peut imaginer que des projets déjà en place avec Zend puissent s&#8217;intégrer facilement sur PrestaShop comme modules supplémentaires, par simples installations de ces derniers. Vous pouvez suivre la discussion à cette adresse : <a title="Sujet de discussion du lancement du projet" href="http://www.prestashop.com/forums/topic/145847-outils-oops-un-framework-pour-prestashop/" rel="nofollow external">http://www.prestashop.com/forums/topic/145847-outils-oops-un-framework-pour-prestashop</a>.</p>
<p>L&#8217;auteur met aussi à disposition ses sources et l&#8217;archive, en libre accès sur <a href="https://github.com/alexsegura/Oops" rel="nofollow external">https://github.com/alexsegura/Oops</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2011/12/zend-sur-prestashop-pour-developper-vos-modules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer des mails avec la gestion des langues depuis un module PrestaShop</title>
		<link>http://blog.dev-net.fr/2011/12/envoyer-de-mails-avec-la-gestion-des-langues-depuis-un-module-prestashop/</link>
		<comments>http://blog.dev-net.fr/2011/12/envoyer-de-mails-avec-la-gestion-des-langues-depuis-un-module-prestashop/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 20:05:19 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[PrestaShop 1.3]]></category>
		<category><![CDATA[PrestaShop 1.4]]></category>
		<category><![CDATA[PrestaShop 1.5]]></category>
		<category><![CDATA[Traduction]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[développement web]]></category>
		<category><![CDATA[langue]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[méthodes]]></category>
		<category><![CDATA[modulaire]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[noyau]]></category>
		<category><![CDATA[prestashop]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[traduction]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=128</guid>
		<description><![CDATA[Il est parfois utile que votre module puisse envoyer des mails dans la langue du visiteur. La technique proposée dans cet article respecte celle pratiquée par le noyau de PrestaShop, et s&#8217;étend à votre module. Dans ce tutoriel, je ne reviens pas sur les méthodes de mise en place d&#8217;une structure modulaire pour PrestaShop, et je [...]]]></description>
			<content:encoded><![CDATA[<p>Il est parfois utile que votre <strong>module</strong> puisse envoyer des <strong>mails</strong> dans la <strong>langue</strong> du visiteur. La technique proposée dans cet article respecte celle pratiquée par le noyau de PrestaShop, et s&#8217;étend à votre module. Dans ce <strong>tutoriel</strong>, je ne reviens pas sur les <strong>méthodes</strong> de mise en place d&#8217;une <strong>structure modulaire</strong> pour PrestaShop, et je pars du constat que la classe de votre module est déjà opérationnelle.<span id="more-128"></span></p>
<h2>Ce qu&#8217;il nous faut au préalable</h2>
<p>Pour notre exemple, nous allons travailler dans le répertoire du module nommé <strong>MonModule</strong>, soit <strong>/modules/monmodule/</strong>. Dans ce dossier, nous allons créer la structure de fichiers qui va permettre de tirer profit de la traduction linguistique du contenu des mails. Ainsi, il convient de créer la structure suivante (ceci est une proposition) : cf. Image 1.</p>
<div id="attachment_149" class="wp-caption alignleft" style="width: 100px"><a href="http://blog.dev-net.fr/wp-content/uploads/2011/11/fichiers-rep-mail-monmodule.jpg"><img class="size-full wp-image-149   " title="Arborescence module PrestaShop pour envoi de mail avec traduction" src="http://blog.dev-net.fr/wp-content/uploads/2011/11/fichiers-rep-mail-monmodule.jpg" alt="" width="90" height="236" /></a><p class="wp-caption-text">Image 1</p></div>
<p><span style="color: #808080;"><em>NB : Les fichiers <strong>index.php</strong> que l&#8217;on retrouve dans chaque répertoire ont leur utilité dans le redirection vers la page principale de la boutique, afin d&#8217;éviter l&#8217;accès, le listage, l&#8217;indexage ou l&#8217;archivage du contenu du dossier. Je vous mets à disposition en bas de page un éventuel contenu<strong>*</strong> pour ces fichiers index.php.</em></span></p>
<p>L&#8217;arborescence du module est entourée en rouge. On y retrouve le chemin de la classe du module <strong>/modules/monmodule/monmodule.php</strong> avec lequel vous savez déjà travailler. Les répertoires et les fichiers utiles aux traductions sont construits ainsi : <strong></strong></p>
<ul>
<li><strong>/modules/monmodule/mails/<span style="color: #ff6600;">[langue]</span>/monmessage.html</strong></li>
<li><strong>/modules/monmodule/mails/<span style="color: #ff6600;">[langue]</span>/monmessage.txt</strong></li>
</ul>
<p><strong><span style="color: #ff6600;">[langue]</span></strong> prend le code des langues que vous souhaitez utiliser dans vos traductions (en, fr, es, it, &#8230;), tout en sachant que les langues disponibles aux visiteurs sont celles que vous avez choisi. A défaut de traductions, la langue de fonctionnement est celle du noyau soit l&#8217;anglais (en).</p>
<h2><strong>le fichier monmessage.html</strong></h2>
<p>Ce fichier correspond à la version HTML de votre message. La grande majorité des clients de messagerie autorisent pas défaut l&#8217;affichage du contenu sous forme de &laquo;&nbsp;page web&nbsp;&raquo;. Ceci permet d&#8217;enrichir un peu plus les contenus, de créer des tableaux, d&#8217;intégrer des images, etc. La visualisation des contenus html est donc possible dans vos clients de messagerie, mais controversé en terme de sécurité.</p>
<p><span style="text-decoration: underline;">Voici un exemple de contenu en anglais pour le fichier <strong></strong><strong>/modules/monmodule/mails/en/monmessage.html</strong> :</span></p>
<pre class="brush: html; gutter: true">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;
	&lt;title&gt;Message from {shop_name}&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;p&gt;&lt;a href="{shop_url}" title="{shop_name}"&gt;&lt;img alt="{shop_name}" src="{shop_logo}" style="border:none;" &gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Date : {date}&lt;/p&gt;
	&lt;p&gt;Message :&lt;/p&gt;
	&lt;p&gt;{message}&lt;/p&gt;
	&lt;p&gt;-----------------&lt;/p&gt;
	&lt;p&gt;&lt;a href="{shop_url}"&gt;{shop_name}&lt;/a&gt; powered by &lt;a href="http://www.prestashop.com/"&gt;PrestaShop™&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h2>le fichier monmessage.txt</h2>
<p>Pour de raison de sécurité, la version HTML des mails peut-être en <strong>option</strong> sur le client de messagerie, il est important de garder le contrôle du contenu afin d&#8217;envoyer un texte cohérent au destinataire. Il faut donc créer ainsi une version texte de ce contenu. Il sera en revanche impossible de créer des tableaux, ni même d&#8217;afficher des images.</p>
<p><span style="text-decoration: underline;">Voici un exemple de contenu en anglais pour le fichier <strong>/modules/monmodule/mails/en/monmessage.txt</strong> :</span></p>
<pre class="brush: bash; gutter: true">Message from {shop_name}

Date : {date}
Message :
{message}

-----------------
{shop_url} powered by PrestaShop™</pre>
<h2>Les templatevars</h2>
<p>Sur les deux exemples précédents des fichiers <strong>monmessage.html</strong> et <strong>monmessage.txt</strong>, des variables à contenu &laquo;&nbsp;dynamique&nbsp;&raquo; y sont utilisées. Ces variables sont encadrées par des accolades :</p>
<ul>
<li><strong>{shop_name}</strong> : cette variable est déjà garnie et disponible par le noyau, elle contient le nom de la boutique web.</li>
<li><strong>{shop_url}</strong> : cette variable est elle aussi déjà garnie et disponible par le noyau, elle contient l&#8217;adresse principale de la boutique web.</li>
<li><strong>{date}</strong> : cette variable contiendra la date en cours, construite sur le format de la langue en cours.</li>
<li><strong>{message}</strong> : cette variable contiendra le message à faire passer, dans la langue du client.</li>
</ul>
<p>A la manière du moteur smarty template, et afin de pouvoir utiliser ces variables, du moins celles de notre cru : <strong>{date}</strong> et <strong>{message}</strong>, il convient de les mettre à contribution dans notre module au préalable.</p>
<h1>La fonction d&#8217;envoi de mail avec la gestion des langues</h1>
<p>Voici un exemple de la méthode <strong>EnvoyerMessage()</strong> de la classe <strong>MonModule</strong> à utiliser pour l&#8217;envoi des mails avec la gestion des langues.</p>
<pre class="brush: php; gutter: true">/*
 * Cette fonction peut être directement utilisée dans votre classe du module
 * Fonctions accessibles depuis la méthode de la classe MonModule :
 * $this-&gt;l()			: pour que le texte soit gérée par les langues de PrestaShop
 * Configuration::get()	: pour récupérer des valeurs de configuration
 * Tools::displayDate()	: pour récupérer la date lors de l'envoi du mail, au format de la langue en cours
 */
class MonModule extends Module {
	/*
	 * Ici se trouve normalement tout le contenu de votre classe MonModule :
	 * Méthodes, variables, etc.
	 */

	private function EnvoyerMessage() {
		global $cookie;
		$LangueAUtiliser = (int)$cookie-&gt;id_lang;	// id de la langue, vous pouvez aussi utiliser (int)Configuration::get('PS_LANG_DEFAULT'),
													// pour forcer les mails avec la langue par défaut de la boutique

		$Destinataires = array(
								"pierre@domaine.tld",
								"paul@domaine.tld"
								);

		if (sizeof($Destinataires)) { // seulement s'il existe au moins 1 destinataire
			foreach($Destinataires As $Destinataire) {
				Mail::Send(
					$LangueAUtiliser,				// langue
					'monmessage', 					// nom du fichier template SANS L'EXTENSION
					$this-&gt;l('Subject title'),		// sujet à traduire dans les langues du module
					array(							// templatevars personnelles
							'{date}'	=&gt; Tools::displayDate(date("Y-m-d H:i:s"), $LangueAUtiliser, true),
							'{message}'	=&gt; $this-&gt;l('Here is the message to be sent by mail.')
						),
					$Destinataire, 									// destinataire mail
					NULL, 											// destinataire nom
					strval(Configuration::get('PS_SHOP_EMAIL')),	// expéditeur
					strval(Configuration::get('PS_SHOP_NAME')),		// expéditeur nom
					NULL,											// fichier joint
					NULL,											// Choix SMTP, non traité par le coeur &lt; PS 1.4.6.1, donc inutile
					dirname(__FILE__).'/mails/'						// répertoire des mails templates
				);
			}
		}
	}
}</pre>
<p>Cette méthode est accessible depuis l&#8217;appel <strong>$this-&gt;EnvoyerMessage()</strong> à l&#8217;endroit que vous souhaitez dans votre classe du module. Des variantes sont aussi possibles avec le passage en paramètres des destinataires, de la langue, etc.</p>
<h1>A vous de jouer !</h1>
<p>Le concept étant posé, à vous d&#8217;ajouter toutes les <strong>templatevars</strong> dont vous avez besoin, avec les contenus que vous souhaitez.</p>
<p>&nbsp;</p>
<hr />
<p>* <span style="color: #808080;"><em>Contenu éventuel d&#8217;un fichier <strong>index.php</strong> afin de gérer la redirection vers la page d&#8217;accueil :</em></span></p>
<pre class="brush: php; gutter: true">&lt;?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

header("Location: ../");
exit;
?&gt;</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2011/12/envoyer-de-mails-avec-la-gestion-des-langues-depuis-un-module-prestashop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Page blanche sur PrestaShop, surement un problème de mémoire</title>
		<link>http://blog.dev-net.fr/2011/12/page-blanche-sur-prestashop-surement-un-probleme-de-memoire/</link>
		<comments>http://blog.dev-net.fr/2011/12/page-blanche-sur-prestashop-surement-un-probleme-de-memoire/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 19:48:17 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[PrestaShop 1.3]]></category>
		<category><![CDATA[PrestaShop 1.4]]></category>
		<category><![CDATA[PrestaShop 1.5]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[memoire]]></category>
		<category><![CDATA[memory size]]></category>
		<category><![CDATA[memory_limit]]></category>
		<category><![CDATA[page blanche]]></category>
		<category><![CDATA[php.ini]]></category>
		<category><![CDATA[prestashop]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=205</guid>
		<description><![CDATA[Le phénomène de la page blanche sous PrestaShop est bien connu. Elle résulte simplement d&#8217;une erreur de traitement. Mais comme ces erreurs ne sont activées par défaut dans la configuration de PrestaShop, la page web ne vous affiche aucun retour. Après avoir activé ces messages d&#8217;erreurs (attention, seulement pendant le temps de la résolution du [...]]]></description>
			<content:encoded><![CDATA[<p>Le phénomène de la page blanche sous PrestaShop est bien connu. Elle résulte simplement d&#8217;une erreur de traitement. Mais comme ces erreurs ne sont activées par défaut dans la configuration de PrestaShop, la page web ne vous affiche aucun retour.<br />
<span id="more-205"></span><br />
Après avoir activé ces messages d&#8217;erreurs (attention, seulement pendant le temps de la résolution du problème), vous pourrez constater les éventuelles erreurs. Pour l&#8217;activation, éditez le fichier <strong>/config/config.inc.php</strong>, et modifiez les variables comme ceci :</p>
<pre class="brush: php; gutter: true">/* Debug only */
@ini_set('display_errors', 'on');
define('_PS_DEBUG_SQL_', true);</pre>
<p>Pensez à repasser ces valeurs à <strong>off</strong> et <strong>false</strong> par la suite.</p>
<p>Si vous avez un beau message d&#8217;erreur du type <strong>Allow memory size&#8230;</strong>, ou <strong>Out of memory&#8230;</strong>, c&#8217;est que la configuration du serveur de votre hébergeur web ne vous permet pas de pousser les ressources un peu plus haut qu&#8217;à l&#8217;habitude. Malheureusement, si vous n&#8217;êtes pas votre propre hébergeur, vous n&#8217;avez certainement pas la possibilité de modifier l&#8217;option <strong>memory_limit</strong> dans le <strong>php.ini</strong>. Il faut donc dans votre fichier <strong>/config/config.inc.php</strong> ajouter la ligne suivante après les deux lignes vu précédemment :</p>
<pre class="brush: php; gutter: true">/* Debug only */
@ini_set('display_errors', 'off');
define('_PS_DEBUG_SQL_', false);
ini_set('memory_limit', '64M');</pre>
<p>La page blanche devrait ensuite disparaître pour un contenu plus attendu !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2011/12/page-blanche-sur-prestashop-surement-un-probleme-de-memoire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traitez vos POST et GET avec les outils de PrestaShop</title>
		<link>http://blog.dev-net.fr/2011/11/traitez-vos-post-et-get-avec-les-outils-de-prestashop/</link>
		<comments>http://blog.dev-net.fr/2011/11/traitez-vos-post-et-get-avec-les-outils-de-prestashop/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 19:02:49 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[PrestaShop 1.3]]></category>
		<category><![CDATA[PrestaShop 1.4]]></category>
		<category><![CDATA[PrestaShop 1.5]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[développement web]]></category>
		<category><![CDATA[méthode get]]></category>
		<category><![CDATA[méthode post]]></category>
		<category><![CDATA[prestashop]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=25</guid>
		<description><![CDATA[Injections SQL, injections de codes, etc. Tout ça n&#8217;est pas très rassurant. L&#8217;effort de la team PrestaShop a été portée sur la maîtrise des informations &#171;&#160;dynamiques&#160;&#187; utilisées par le noyau. Ainsi, par des méthodes prêtes à l&#8217;emploi dans votre code source, vous pouvez sécuriser cette aspect sans même vous en soucier. Encore faut-il utiliser les [...]]]></description>
			<content:encoded><![CDATA[<p>Injections SQL, injections de codes, etc. Tout ça n&#8217;est pas très rassurant. L&#8217;effort de la team PrestaShop a été portée sur la maîtrise des informations &laquo;&nbsp;dynamiques&nbsp;&raquo; utilisées par le noyau. Ainsi, par des méthodes prêtes à l&#8217;emploi dans votre code source, vous pouvez sécuriser cette aspect sans même vous en soucier. Encore faut-il utiliser les bonnes méthodes.</p>
<p>J&#8217;appelle &laquo;&nbsp;dynamiques&nbsp;&raquo; toutes les données passées en paramètres soit par des méthodes <strong><em>POST</em></strong> depuis un formulaire par exemple, soit par <strong><em>GET</em></strong> depuis une URL (l&#8217;adresse web complète avec comme attributs les fameux <strong><em>?beta=para[...]</em></strong>).<span id="more-25"></span></p>
<p>Quelque soit le fork que vous employez pour mener à bien votre développement personnel, vérifiez que des orientations sécuritaires du même genre que celles que je décris ici sont bien disponibles ou présentes dans votre code source. Sinon, il va falloir les créer.</p>
<h2>Quant à PrestaShop ?</h2>
<p>L&#8217;idée de départ serai de vouloir récupérer, soit par un code de module, soit dans une page tierce de votre confection (sur un nouveau <strong><em>controller</em></strong> de page, par exemple), des données passées en paramètres. Celles-ci sont envoyées grâce à un formulaire, et donc par défaut, à l&#8217;aide à la méthode <strong><em>POST</em></strong> (vérifiez que vous possédez bien <strong><em>method=post</em></strong> dans votre balise de formulaire). Nous pouvons imaginer la séquence <strong>html</strong> suivante :</p>
<pre class="brush: html; gutter: true">&lt;form action=&quot;#&quot; method=&quot;post&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;MonPara&quot; value=&quot;&quot; /&gt;
&lt;/form&gt;</pre>
<p lang="php">Une fois ce formulaire posté, <strong>il faut le traiter en toute sécurité</strong>. Contrairement à vos réflexes de développeur, vous n&#8217;allez pas directement accéder au contenu du tableau <em><strong>$_POST</strong></em>, qui réuni l&#8217;ensemble des données postées par le formulaire. <span style="text-decoration: underline;"><strong>L&#8217;erreur</strong></span> serai donc de lire le contenu ainsi :</p>
<pre class="brush: php; gutter: true">$MaValeur = $_POST[&quot;MonPara&quot;];</pre>
<p lang="php">En revanche, vous allez exploiter une méthode déjà travaillée par la team PrestaShop pour sécuriser la récupération des données. Celle-ci est disponible depuis le noyau de toutes les versions PrestaShop, grâce à la <strong>classe Tools</strong> (située dans <strong>/classes/Tools.php</strong>) :</p>
<pre class="brush: php; gutter: true">	/**
	* Get a value from $_POST / $_GET
	* if unavailable, take a default value
	*
	* @param string $key Value key
	* @param mixed $defaultValue (optional)
	* @return mixed Value
	*/
	public static function getValue($key, $defaultValue = false)
	{
	 	if (!isset($key) OR empty($key) OR !is_string($key))
			return false;
		$ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $defaultValue));

		if (is_string($ret) === true)
			$ret = urldecode(preg_replace(&#039;/((\%5C0+)|(\%00+))/i&#039;, &#039;&#039;, urlencode($ret)));
		return !is_string($ret)? $ret : stripslashes($ret);
	}</pre>
<h2 lang="php">Pourquoi cette méthode ?</h2>
<p>Elle garantie un retour de contenu sans aucune donnée &laquo;&nbsp;malsaine&nbsp;&raquo; tels que les double-quotes bien connus des tentatives d&#8217;injections SQL, ou bien des injections de code javascript.</p>
<p>Elle permet aussi de passer en revue soit la méthode <strong><em>POST</em></strong>, soit <strong><em>GET</em></strong>. Ainsi, quelque soit son usage, vous n&#8217;avez plus à les différencier.</p>
<h2>Comment dois-je m&#8217;en servir ?</h2>
<p>Il convient au préalable d&#8217;avoir inclue l&#8217;ensemble des librairies nécessaires du noyau PrestaShop. Si vous passez par un controller ou un module, vous n&#8217;aurez pas de problème. En revanche, si vous avez créés votre propre page de code, vérifiez que vous incluez bien au minimum :</p>
<pre class="brush: php; gutter: true">include(&#039;config/config.inc.php&#039;);</pre>
<p>Enfin, pour utiliser cette méthode plus sécuriser, il vous suffit simplement de procéder ainsi (dans le cas de l&#8217;exemple ci-dessous) :</p>
<pre class="brush: php; gutter: true">$MaValeur = Tools::getValue(&quot;MonPara&quot;);</pre>
<h2>Et c&#8217;est tout ?</h2>
<p>Malheureusement, il subsiste un petit problème tout de même, mais celui-ci reste très bénin et ne vous pénalisera pas pour 98% de votre code. Imaginons que sur une même page, la méthode GET et POST sont employées en même temps, car ceci est tout à fait possible à l&#8217;aide d&#8217;un formulaire, et que pour un même paramètre à passer, vous ayez deux valeurs différentes, il faudra contourner ce problème.</p>
<p>Je vous le présente plus en détails, par le formulaire ci-dessous :</p>
<pre class="brush: html; gutter: true">&lt;form action=&quot;mapage.php?MonPara=12&quot; method=&quot;post&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;MonPara&quot; value=&quot;14&quot; /&gt;
&lt;/form&gt;</pre>
<p>Vous comprendrez vite que le paramètre <strong>MonPara</strong> est envoyé par la méthode <em><strong>GET</strong></em> depuis l&#8217;<em><strong>action</strong></em> du formulaire, et par la méthode <em><strong>POST</strong></em> depuis l&#8217;<em><strong>input</strong></em>, et ne possède pas la même valeur. Ce qui serai bloquant pour vos traitements postérieurs. Il n&#8217;y a pas vraiment de recette miracle, même s&#8217;il l&#8217;emploi distinct dans votre code de <strong>$_GET["MonPara"]</strong> et de <strong>$_POST["MonPara"]</strong> serai tentant, je ne le vous conseille pas. Préférez simplement changer le nom de l&#8217;une ou l&#8217;autre variable afin d&#8217;éviter des problèmes plus graves :</p>
<pre class="brush: html; gutter: true">&lt;form action=&quot;mapage.php?MonPara1=12&quot; method=&quot;post&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;MonPara2&quot; value=&quot;14&quot; /&gt;
&lt;/form&gt;</pre>
<p>A vous de jouer !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2011/11/traitez-vos-post-et-get-avec-les-outils-de-prestashop/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ouverture du blog consacré au développement web</title>
		<link>http://blog.dev-net.fr/2011/11/ouverture-du-blog-consacre-au-developpement-web/</link>
		<comments>http://blog.dev-net.fr/2011/11/ouverture-du-blog-consacre-au-developpement-web/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 13:24:51 +0000</pubDate>
		<dc:creator>DevNet</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[développement web]]></category>
		<category><![CDATA[ressources techniques]]></category>
		<category><![CDATA[ressources web]]></category>

		<guid isPermaLink="false">http://blog.dev-net.fr/?p=6</guid>
		<description><![CDATA[Toutes les ressources présentent sur ce blog sont techniques. Elles ont pour but d&#8217;aider à un moment précis le développement web de l&#8217;auteur. Les codes sources proposés permettent à l&#8217;intéressé de mieux comprendre la logique et l&#8217;algorithmique d&#8217;un traitement, d&#8217;un script, d&#8217;une portion de script, ou d&#8217;une méthode particulière. L&#8217;éditeur de ces ressources (DevNet) ne [...]]]></description>
			<content:encoded><![CDATA[<p>Toutes les ressources présentent sur ce blog sont techniques. Elles ont pour but d&#8217;aider à un moment précis le développement web de l&#8217;auteur.</p>
<p>Les codes sources proposés permettent à l&#8217;intéressé de mieux comprendre la logique et l&#8217;algorithmique d&#8217;un traitement, d&#8217;un script, d&#8217;une portion de script, ou d&#8217;une méthode particulière. L&#8217;éditeur de ces ressources (<em>Dev</em>Net) ne pourra être tenu pour responsable des manipulations personnelles effectuées par l&#8217;intéressé suite à la récupération de ses informations.</p>
<p>Bonne lecture !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dev-net.fr/2011/11/ouverture-du-blog-consacre-au-developpement-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

