<?xml 
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel xml:lang="fr">
	<title>Minimalteck.fr</title>
	<link>http://minimalteck.fr/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>

	<image>
		<title>Minimalteck.fr</title>
		<url>http://minimalteck.fr/local/cache-vignettes/L48xH48/siteon0-e5814.png</url>
		<link>http://minimalteck.fr/</link>
		<height>48</height>
		<width>48</width>
	</image>



<item xml:lang="fr">
		<title>Un mail avec accus&#233; de reception en PHP</title>
		<link>http://minimalteck.fr/dev-web/un-mail-avec-accuse-de-reception</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/un-mail-avec-accuse-de-reception</guid>
		<dc:date>2010-01-28T11:45:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Code[s]</dc:subject>
		<dc:subject>PHP</dc:subject>

		<description>Vous connaissez certainement cette aga&#231;ante propention qu'ont certains utlisateurs &#224; vous envoyer des courriels - g&#233;n&#233;ralement sources de tracas - s'accompagnant d'une agression &#224; la pop-up au sein de votre client de messagerie&#8230; Rien de mieux pour mettre de f&#226;cheuse humeur&#8230; Oh ! Comble de l'horreur, on vous demande au cours d'un d&#233;v de g&#233;n&#233;rer des envois de mails avec accus&#233; de r&#233;ception&#8230; Rh&#226;aaaaaaa !!! Au cours du d&#233;bat anim&#233; qui s'en suit sur la question, un de vos coll&#232;gues, le sourire en coin, vous (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/code-s" rel="tag"&gt;Code[s]&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/php" rel="tag"&gt;PHP&lt;/a&gt;

		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; src=&quot;http://minimalteck.fr/local/cache-vignettes/L150xH150/arton55-70e89.png&quot; width='150' height='150' style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Vous connaissez certainement cette aga&#231;ante propention qu'ont certains utlisateurs &#224; vous envoyer des courriels - g&#233;n&#233;ralement sources de tracas - s'accompagnant d'une agression &#224; la pop-up au sein de votre client de messagerie&#8230;
&lt;br /&gt;Rien de mieux pour mettre de f&#226;cheuse humeur&#8230;
&lt;br /&gt;Oh ! Comble de l'horreur, on vous demande au cours d'un d&#233;v de g&#233;n&#233;rer des envois de mails avec accus&#233; de r&#233;ception&#8230; Rh&#226;aaaaaaa !!!&lt;/p&gt; &lt;p&gt;Au cours du d&#233;bat anim&#233; qui s'en suit sur la question, un de vos coll&#232;gues, le sourire en coin, vous pose THE probl&#233;matique :
&lt;br /&gt;&lt;img src=&quot;http://minimalteck.fr/squelettes-dist/puce.gif&quot; width=&quot;8&quot; height=&quot;11&quot; class=&quot;puce&quot; alt=&quot;-&quot; /&gt; &quot;Mais, sinon toi, tu saurais comment faire ?&quot;&lt;img alt=&quot;:-&gt;&quot; title=&quot;:-&gt;&quot; class=&quot;no_image_filtrer format_png&quot; src=&quot;http://www.minimalteck.fr/plugins/couteau_suisse/img/smileys/diable.png&quot; width=&quot;19&quot; height=&quot;19&quot;/&gt;
&lt;br /&gt;C'est l'objet m&#234;me de cet article ou comment claquer le bec de ce malotru qui a voulu vous prendre en d&#233;faut&#8230;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;En fait, c'est tout a fait trivial&#8230;
Il suffit d'ajouter des en-t&#234;tes appopri&#233;es &#224; votre mail : &quot;&lt;a href='http://en.wikipedia.org/wiki/Return_receipt' class='spip_out' hreflang='en' title=&quot;Wikip&#233;dia&quot; rel='external'&gt;Return-Receipt-To :&lt;/a&gt;&quot;, non d&#233;finie par quelque norme que ce soit, mais couramment admis et utilis&#233; et la seconde &quot;Disposition-Notification-To&quot; d&#233;finie quant &#224; elle par la &lt;a href='http://tools.ietf.org/html/rfc3798' class='spip_out' hreflang='en' title=&quot;RFC&quot; rel='external'&gt;RFC 3798&lt;/a&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;Disposition-Notification-To: courriel@emetteur.com&lt;br /&gt; Return-Receipt-To: courriel@emetteur.com&lt;/code&gt;&lt;/div&gt; &lt;p&gt;B&#234;te et m&#233;chant, il faut juste s'en rappeler.&lt;img class=&quot;no_image_filtrer&quot; alt=&quot;wink&quot; title=&quot;wink&quot; src=&quot;http://www.minimalteck.fr/plugins/couteau_suisse/img/chatons/wink.gif&quot; width=&quot;20&quot; height=&quot;20&quot;/&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Plugin SPIP : diaporama avec jQuery</title>
		<link>http://minimalteck.fr/dev-web/plugin-spip-diaporama-avec-jquery</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/plugin-spip-diaporama-avec-jquery</guid>
		<dc:date>2009-08-17T11:26:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Code[s]</dc:subject>
		<dc:subject>SPIP 2.x</dc:subject>
		<dc:subject>CMS</dc:subject>

		<description>Pr&#233;sentation du plugin Spip jQuery Cycle : &quot; sjcycle &quot; est un diaporama param&#233;trable pour Spip bas&#233; sur la librairie javascript jQuery et les plugins : jQuery Cycle Plugin ; FancyBox ; Tooltip. D&#233;velopp&#233; pour Spip [2.0.x] il utilise : les formulaires CVT ; le moteur de configuration CFG [1.10] ; les mod&#232;les pour une insertion ais&#233;e dans le texte des articles. Fonctionnalit&#233;s principales : Param&#233;trage des effets, de la vitesse de transition, de la taille du diaporama, etc. (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/code-s" rel="tag"&gt;Code[s]&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/spip-2-x" rel="tag"&gt;SPIP 2.x&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/cms" rel="tag"&gt;CMS&lt;/a&gt;

		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; src=&quot;http://minimalteck.fr/local/cache-vignettes/L75xH75/arton41-71df3.png&quot; width='75' height='75' style='height:75px;width:75px;' /&gt;
		&lt;div class='rss_texte'&gt;&lt;div class=&quot;cs_sommaire cs_sommaire_avec_fond&quot; id=&quot;outil_sommaire&quot;&gt; &lt;div class=&quot;cs_sommaire_inner&quot;&gt; &lt;div class=&quot;cs_sommaire_titre_avec_fond&quot;&gt; Sommaire &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;a title=&quot;Pr&#233;sentation du plugin Spip jQuery Cycle :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire_0&quot;&gt;Pr&#233;sentation du plugin Spip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;D&#233;cryptage de la syntaxe et param&#232;tres du raccourci typographique &quot;sjcycle&quot;&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire_1&quot;&gt;D&#233;cryptage de la syntaxe (&#8230;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Ce qu&amp;#39;il faudrait faire&#8230;&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire_2&quot;&gt;Ce qu'il faudrait faire&#8230;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Pour conclure&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire_3&quot;&gt;Pour conclure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;D&#233;monstration&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire_4&quot;&gt;D&#233;monstration&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_0&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Pr&#233;sentation du plugin Spip jQuery Cycle :&lt;/h3&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &quot;&lt;strong&gt; &lt;i&gt;sjcycle&lt;/i&gt; &lt;/strong&gt;&quot; est un diaporama param&#233;trable pour Spip bas&#233; sur la librairie javascript &lt;a href='http://jquery.com/' class='spip_out' hreflang='en' title=&quot;Site officiel de jQuery&quot; rel='external'&gt;jQuery&lt;/a&gt; et les plugins :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href='http://malsup.com/jquery/cycle/' class='spip_out' hreflang='en' title=&quot;Site officiel du jQuery Cycle Plugin&quot; rel='external'&gt;jQuery Cycle Plugin&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; &lt;a href='http://fancybox.net/' class='spip_out' hreflang='en' title=&quot;Site officiel du jQuery FancyBox Plugin&quot; rel='external'&gt;FancyBox&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; &lt;a href='http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/' class='spip_out' hreflang='en' title=&quot;Site officiel du jQuery Tooltip Plugin&quot; rel='external'&gt;Tooltip&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; D&#233;velopp&#233; pour &lt;strong&gt;Spip [2.0.x]&lt;/strong&gt; il utilise :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; les formulaires &lt;a href='http://www.spip.net/fr_article3800.html' class='spip_out' hreflang='fr' title=&quot;Les formulaires CVT de SPIP 2.0 sur Spip.net&quot; rel='external'&gt;CVT&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; le moteur de configuration &lt;a href='http://www.spip-contrib.net/Config-cfg' class='spip_out' hreflang='fr' title=&quot;CFG sur Spip-Contrib&quot; rel='external'&gt;CFG&lt;/a&gt; [1.10] ;&lt;/li&gt;&lt;li&gt; les &lt;a href='http://www.spip.net/fr_article3454.html' class='spip_out' hreflang='fr' title=&quot;Utiliser les mod&#232;les&quot; rel='external'&gt;mod&#232;les&lt;/a&gt; pour une insertion ais&#233;e dans le texte des articles.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;- Fonctionnalit&#233;s principales :&lt;/strong&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Param&#233;trage des effets, de la vitesse de transition, de la taille du diaporama, etc.&lt;/li&gt;&lt;li&gt; Possibilt&#233; d'afficher plusieurs diaporama au sein d'un m&#234;me article&lt;/li&gt;&lt;li&gt; Possibilt&#233; de s&#233;lectionner les images &#224; associer &#224; chaque diaporama&lt;/li&gt;&lt;/ul&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_1&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;D&#233;cryptage de la syntaxe et param&#232;tres du raccourci typographique &quot;sjcycle&quot;&lt;/h3&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Le raccourci typographique &quot;&lt;i&gt;sjcycle&lt;/i&gt;&quot; permet d'ins&#233;rer facilement &lt;strong&gt;un ou plusieurs diaporamas au sein d'un article&lt;/strong&gt; : il vous suffit de le recopier &#224; l'int&#233;rieur de la case &#171; Texte &#187; de l'article, l&#224; vous d&#233;sirez situer le diaporama.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Ce raccourci comporte jusqu'&#224; 3 param&#232;tres, ordonn&#233;s et s&#233;par&#233;s par le caract&#232;re &quot;|&quot;.&lt;/p&gt; &lt;ol class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;&lt;sjcycleN&gt;&lt;/strong&gt;
&lt;br /&gt;&lt;strong&gt;Premier param&#232;tre, &quot;N&quot;, obligatoire :&lt;/strong&gt;
&lt;br /&gt;Correspond au num&#233;ro de l'article en cours.
&lt;br /&gt;Il permet de cibler les images li&#233;es &#224; un unique article.
&lt;br /&gt;&lt;i&gt; &lt;strong&gt;Astuce :&lt;/strong&gt; Vous pouvez ainsi ins&#233;rer un diaporama avec les images d'un article dans un autre article.&lt;/i&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;sjcycleN|ALIGN&gt;&lt;/strong&gt;
&lt;br /&gt;&lt;strong&gt;Second param&#232;tre, &quot;|ALIGN&quot;, optionnel :&lt;/strong&gt;
&lt;br /&gt;Permet de sp&#233;cifier l'alignement du diaporama au sein du texte.
&lt;br /&gt;S'il n'est pas pr&#233;cis&#233;, l'alignement est &quot;center&quot;.
&lt;br /&gt;Les options de l'alignement :&lt;ol class=&quot;spip&quot;&gt;&lt;li&gt; &quot;&lt;i&gt;left&lt;/i&gt;&quot; : &#224; gauche du texte ;&lt;/li&gt;&lt;li&gt; &quot;&lt;i&gt;center&lt;/i&gt;&quot; : centrer dans le texte ;&lt;/li&gt;&lt;li&gt; &quot;&lt;i&gt;right&lt;/i&gt;&quot; : &#224; droite du texte.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt; &lt;sjcycleN|ALIGN|docs=n1,n2&gt;
&lt;br /&gt;Troisi&#232;me param&#232;tre, &quot;|docs=n1,n2,[&#8230;],nx&quot;, optionnel :
&lt;br /&gt;Permet de sp&#233;cifier la liste d'images &#224; afficher dans le diaporama.
&lt;br /&gt;Ainsi, on peut afficher plusieurs diaporamas dans au sein d'un m&#234;me texte, isoler des images.
&lt;br /&gt;S'il n'est pas pr&#233;cis&#233;, l'ensemble des images sont s&#233;lectionn&#233;es par d&#233;faut.
&lt;br /&gt;&lt;strong&gt;Les arguments de s&#233;lection &quot;n1,n2,[&#8230;],nx&quot; du param&#232;tre &quot;|docs=&quot; :&lt;/strong&gt;
&lt;br /&gt;Ils se composent d'une suite de num&#233;ros d'images s&#233;par&#233;es par des virgules sans espace.
&lt;br /&gt;Sous chaque image est indiqu&#233; un raccourci typographique du type &quot;&lt;i&gt;&lt;imgXX|left&gt;&lt;/i&gt;&quot;, &quot;&lt;i&gt;&lt;docXX|left&gt;&lt;/i&gt;&quot; ou &quot;&lt;i&gt;&lt;docXX&gt;&lt;/i&gt;&quot;, o&#249; &quot;XX&quot; d&#233;signe le num&#233;ro de l'image correspondante.
&lt;br /&gt;Ainsi le param&#232;tre &quot;|docs=1,3&quot;, s&#233;lectionne les images num&#233;ro 1 et 3 de l'article courant.
&lt;br /&gt;&lt;i&gt; &lt;strong&gt;Astuce :&lt;/strong&gt; Vous pouvez utiliser le raccourci en ne passant qu'un seul num&#233;ro d'image au param&#232;tre &quot;|docs=&quot; afin de b&#233;n&#233;ficier de l'effet &quot;FancyBox&quot; : un clic sur l'image redimensionn&#233;e du diaporama permet d'afficher l'image originale en superposition.&lt;/i&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_2&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Ce qu'il faudrait faire&#8230;&lt;/h3&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Int&#233;grer plus d'options du &lt;a href='http://malsup.com/jquery/cycle/options.html' class='spip_out' hreflang='en' title=&quot;jQuery Cycle Plugin - Option Reference&quot; rel='external'&gt;jQuery Cycle Plugin&lt;/a&gt; ;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Cr&#233;er la &lt;a href='http://doc.spip.org/@Plugin-xml#install' class='spip_out' rel='external'&gt;fonction d'install du plugin&lt;/a&gt; pour installer les param&#232;tres par d&#233;faut lors de l'activation du plugin et surtout nettoyer les &quot;metas&quot; lors de sa d&#233;sactivation&#8230; J'ai rencontr&#233; un probl&#232;me lors de cette mise en place :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; if (!defined(&quot;_ECRIRE_INC_VERSION&quot;)) return;&lt;br /&gt; function sjcycle_install($action){&lt;br /&gt; include_spip('sjcycle_fonctions');&lt;br /&gt; switch ($action){&lt;br /&gt; case 'test':&lt;br /&gt; //Contr&#244;le du plugin &#224; chaque chargement de la page d'administration&lt;br /&gt; // doit retourner true si le plugin est proprement install&#233; et &#224; jour, false sinon&lt;br /&gt; if(!lire_config('sjcycle')){&lt;br /&gt; return true;&lt;br /&gt; } else {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; break;&lt;br /&gt; case 'install':&lt;br /&gt; //Appel de la fonction d'installation. Lors du clic sur l'ic&#244;ne depuis le panel.&lt;br /&gt; //quand le plugin est activ&#233; et test retourne false&lt;br /&gt; if(!lire_config('sjcycle')){&lt;br /&gt; ecrire_config('sjcycle',serialize(init_sjcycle_default('default_value_list')));&lt;br /&gt; }&lt;br /&gt; break;&lt;br /&gt; case 'uninstall':&lt;br /&gt; //Appel de la fonction de suppression&lt;br /&gt; //quand l'utilisateur clique sur &quot;supprimer tout&quot; (disponible si test retourne true)&lt;br /&gt; effacer_config('sjcycle');&lt;br /&gt; return true;&lt;br /&gt; break;&lt;br /&gt; } &lt;br /&gt; }&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt; &lt;p&gt;le code me semblait pourtant correct, mais &#224; chaque fois que le cas 'test' (affichage de la gestion des plugin, le syst&#232;me &#233;crasait les valeur par celles par d&#233;faut&#8230; &lt;img class=&quot;no_image_filtrer&quot; alt=&quot;blink&quot; title=&quot;blink&quot; src=&quot;http://www.minimalteck.fr/plugins/couteau_suisse/img/chatons/blink.gif&quot; width=&quot;20&quot; height=&quot;20&quot;/&gt;
&lt;br /&gt;M&#234;me en passant par lire_meta() en lieu et place de la version fournie par CFG&#8230; je n'ai pas plus creus&#233; que &#231;a&#8230; c'est s&#251;rement tout b&#234;te ! &lt;img class=&quot;no_image_filtrer&quot; alt=&quot;blush&quot; title=&quot;blush&quot; src=&quot;http://www.minimalteck.fr/plugins/couteau_suisse/img/chatons/blush.gif&quot; width=&quot;20&quot; height=&quot;20&quot;/&gt;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; compacter les css ;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; etc.&lt;/p&gt; &lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_3&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Pour conclure&lt;/h3&gt; &lt;p&gt;Ce plugin s'adresse avant tout aux personnes d&#233;sireuses d'agr&#233;menter leur site SPIP de &lt;a href='http://malsup.com/jquery/cycle/' class='spip_out' hreflang='en' title=&quot;jQuery Cycle Plugin&quot; rel='external'&gt;diaporamas l&#233;gers mais performants&lt;/a&gt;, avec un &lt;a href='http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/' class='spip_out' hreflang='en' title=&quot;infos-bulles via Tooltip&quot; rel='external'&gt;descriptif de l'image en survol&lt;/a&gt;, un &lt;a href='http://fancybox.net/' class='spip_out' hreflang='en' title=&quot;FancyBox&quot; rel='external'&gt;affichage en superposition&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Actuellement tagg&#233; en &quot;&lt;i&gt;test&lt;/i&gt;&quot;, ce plugin est cependant totalement fonctionnel et est utilis&#233; sur des sites en production.&lt;/p&gt; &lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_4&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=7#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;D&#233;monstration&lt;/h3&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;sjcycle41|center|docs=9,10,11,12&gt;&lt;/p&gt; &lt;div class=&quot;base64javascript638169844c85b153e840c1.43457890&quot; title=&quot;PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJJCgiYS5rdWx1YXNybyIpLmZhbmN5Ym94KHsKCQkJJ2hpZGVPbkNvbnRlbnRDbGljayc6IGZhbHNlCgkJfSk7CgkJJCgnLmluZm9idWxsZScpLnRvb2x0aXAoeyAKCQkJCWJvZHlIYW5kbGVyOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gJCgkKHRoaXMpLmNoaWxkcmVuKCIudGV4dGluZm9idWxsZSIpKS5odG1sKCk7CgkJCQl9LAoJCQkJdHJhY2s6IHRydWUsIAoJCQkJZGVsYXk6IDAsIAoJCQkJc2hvd1VSTDogZmFsc2UsIAoJCQkJb3BhY2l0eTogMSwgCgkJCQlmaXhQTkc6IHRydWUsCgkJCQlleHRyYUNsYXNzOiAicHJldHR5IiwgCgkJCQl0b3A6IC0xNSwgCgkJCQlsZWZ0OiA1IAoJCX0pOwoJfSk7Cgk8L3NjcmlwdD4=&quot;&gt;&lt;/div&gt; &lt;div class=&quot;dsjcycle&quot; style=''&gt; &lt;div class=&quot;infobulle&quot; style=&quot;width:400px;height:300px;padding:0px;margin:0px;&quot;&gt; &lt;a href=&quot;http://minimalteck.fr/IMG/jpg/DSCF0127.jpg&quot; type=&quot;image/jpeg&quot; class=&quot;kuluasro&quot; rel=&quot;kuluasro&quot; title=&quot;&quot; style=&quot;display:block;padding:0px;margin:0px;&quot;&gt; &lt;img src='http://minimalteck.fr/local/cache-vignettes/L400xH300/12401e6cfdc0100e82cb1ad7d1e2ea09-4b9bd.jpg' width='400' height='300' style='height:300px;width:400px;display:block;' alt='' /&gt;&lt;/a&gt; &lt;div class=&quot;textinfobulle&quot; style=&quot;display:none;text-align:left;&quot;&gt;&lt;strong&gt;Original :&lt;/strong&gt; l. 540 x L. 434 pixels, 48.6 ko&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;infobulle&quot; style=&quot;width:400px;height:300px;padding:0px;margin:0px;&quot;&gt; &lt;a href=&quot;http://minimalteck.fr/IMG/jpg/DSCF0143.jpg&quot; type=&quot;image/jpeg&quot; class=&quot;kuluasro&quot; rel=&quot;kuluasro&quot; title=&quot;&quot; style=&quot;display:block;padding:0px;margin:0px;&quot;&gt; &lt;img src='http://minimalteck.fr/local/cache-vignettes/L400xH300/32b93215db247f6c894ff226925eff43-53774.jpg' width='400' height='300' style='height:300px;width:400px;display:block;' alt='' /&gt;&lt;/a&gt; &lt;div class=&quot;textinfobulle&quot; style=&quot;display:none;text-align:left;&quot;&gt;&lt;strong&gt;Original :&lt;/strong&gt; l. 540 x L. 434 pixels, 73.1 ko&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;infobulle&quot; style=&quot;width:400px;height:300px;padding:0px;margin:0px;&quot;&gt; &lt;a href=&quot;http://minimalteck.fr/IMG/jpg/DSCF0145.jpg&quot; type=&quot;image/jpeg&quot; class=&quot;kuluasro&quot; rel=&quot;kuluasro&quot; title=&quot;&quot; style=&quot;display:block;padding:0px;margin:0px;&quot;&gt; &lt;img src='http://minimalteck.fr/local/cache-vignettes/L400xH300/7b7effc21f241c25ea648dd809335860-51e40.jpg' width='400' height='300' style='height:300px;width:400px;display:block;' alt='' /&gt;&lt;/a&gt; &lt;div class=&quot;textinfobulle&quot; style=&quot;display:none;text-align:left;&quot;&gt;&lt;strong&gt;Original :&lt;/strong&gt; l. 540 x L. 434 pixels, 80.6 ko&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;infobulle&quot; style=&quot;width:400px;height:300px;padding:0px;margin:0px;&quot;&gt; &lt;a href=&quot;http://minimalteck.fr/IMG/jpg/DSCF0146.jpg&quot; type=&quot;image/jpeg&quot; class=&quot;kuluasro&quot; rel=&quot;kuluasro&quot; title=&quot;&quot; style=&quot;display:block;padding:0px;margin:0px;&quot;&gt; &lt;img src='http://minimalteck.fr/local/cache-vignettes/L400xH300/35a12f71d41c289659a91089261cc290-22a36.jpg' width='400' height='300' style='height:300px;width:400px;display:block;' alt='' /&gt;&lt;/a&gt; &lt;div class=&quot;textinfobulle&quot; style=&quot;display:none;text-align:left;&quot;&gt;&lt;strong&gt;Original :&lt;/strong&gt; l. 540 x L. 434 pixels, 67.2 ko&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;!--end of #sjcycle--&gt; &lt;p&gt;Une premi&#232;re s&#233;ries d'images&#8230;
&lt;br /&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;sjcycle41|center|docs=13,15,14&gt;&lt;/p&gt; &lt;div class=&quot;base64javascript638169844c85b153e840c1.43457890&quot; title=&quot;PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJJCgiYS5ib2lxaW9mciIpLmZhbmN5Ym94KHsKCQkJJ2hpZGVPbkNvbnRlbnRDbGljayc6IGZhbHNlCgkJfSk7CgkJJCgnLmluZm9idWxsZScpLnRvb2x0aXAoeyAKCQkJCWJvZHlIYW5kbGVyOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gJCgkKHRoaXMpLmNoaWxkcmVuKCIudGV4dGluZm9idWxsZSIpKS5odG1sKCk7CgkJCQl9LAoJCQkJdHJhY2s6IHRydWUsIAoJCQkJZGVsYXk6IDAsIAoJCQkJc2hvd1VSTDogZmFsc2UsIAoJCQkJb3BhY2l0eTogMSwgCgkJCQlmaXhQTkc6IHRydWUsCgkJCQlleHRyYUNsYXNzOiAicHJldHR5IiwgCgkJCQl0b3A6IC0xNSwgCgkJCQlsZWZ0OiA1IAoJCX0pOwoJfSk7Cgk8L3NjcmlwdD4=&quot;&gt;&lt;/div&gt; &lt;div class=&quot;dsjcycle&quot; style=''&gt; &lt;div class=&quot;infobulle&quot; style=&quot;width:400px;height:300px;padding:0px;margin:0px;&quot;&gt; &lt;a href=&quot;http://minimalteck.fr/IMG/jpg/frednico3.jpg&quot; type=&quot;image/jpeg&quot; class=&quot;boiqiofr&quot; rel=&quot;boiqiofr&quot; title=&quot;Roulage &#224; Carole&quot; style=&quot;display:block;padding:0px;margin:0px;&quot;&gt; &lt;img src='http://minimalteck.fr/local/cache-vignettes/L400xH300/61248e248eba8e82d1e29db0d90e9ed9-8effa.jpg' width='400' height='300' style='height:300px;width:400px;display:block;' alt='Roulage &#224; Carole' /&gt;&lt;/a&gt; &lt;div class=&quot;textinfobulle&quot; style=&quot;display:none;text-align:left;&quot;&gt;&lt;h4&gt;Roulage &#224; Carole&lt;/h4&gt;&lt;p&gt;'Fait chaud !&lt;/p&gt;&lt;br/ &gt;&lt;strong&gt;Original :&lt;/strong&gt; l. 500 x L. 375 pixels, 101.1 ko&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;infobulle&quot; style=&quot;width:400px;height:300px;padding:0px;margin:0px;&quot;&gt; &lt;a href=&quot;http://minimalteck.fr/IMG/jpg/zou1.jpg&quot; type=&quot;image/jpeg&quot; class=&quot;boiqiofr&quot; rel=&quot;boiqiofr&quot; title=&quot;D&#233;part...&quot; style=&quot;display:block;padding:0px;margin:0px;&quot;&gt; &lt;img src='http://minimalteck.fr/local/cache-vignettes/L400xH300/0b50249e372c771d74c4c5bc3d708d00-1102b.jpg' width='400' height='300' style='height:300px;width:400px;display:block;' alt='D&#233;part...' /&gt;&lt;/a&gt; &lt;div class=&quot;textinfobulle&quot; style=&quot;display:none;text-align:left;&quot;&gt;&lt;h4&gt;D&#233;part...&lt;/h4&gt;&lt;p&gt;Zou !&lt;/p&gt;&lt;br/ &gt;&lt;strong&gt;Original :&lt;/strong&gt; l. 500 x L. 352 pixels, 80.1 ko&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;infobulle&quot; style=&quot;width:400px;height:300px;padding:0px;margin:0px;&quot;&gt; &lt;a href=&quot;http://minimalteck.fr/IMG/jpg/nicoretourstand.jpg&quot; type=&quot;image/jpeg&quot; class=&quot;boiqiofr&quot; rel=&quot;boiqiofr&quot; title=&quot;Retour au stand&quot; style=&quot;display:block;padding:0px;margin:0px;&quot;&gt; &lt;img src='http://minimalteck.fr/local/cache-vignettes/L400xH300/57f30e5cfc9f3fcb350dc1f3c0a27af2-b159a.jpg' width='400' height='300' style='height:300px;width:400px;display:block;' alt='Retour au stand' /&gt;&lt;/a&gt; &lt;div class=&quot;textinfobulle&quot; style=&quot;display:none;text-align:left;&quot;&gt;&lt;h4&gt;Retour au stand&lt;/h4&gt;&lt;p&gt;Y'a plus qu'&#224; attendre une prochaine session&#8230;&lt;/p&gt;&lt;br/ &gt;&lt;strong&gt;Original :&lt;/strong&gt; l. 500 x L. 375 pixels, 149.5 ko&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;!--end of #sjcycle--&gt; &lt;p&gt;Et voici lz seconde, avec titres et descriptifs&#8230;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://minimalteck.fr/IMG/zip/sjcycle.zip" length="87170" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Un PEAR Pager_Wrapper pour PDO</title>
		<link>http://minimalteck.fr/dev-web/un-pear-pager_wrapper-pour-pdo</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/un-pear-pager_wrapper-pour-pdo</guid>
		<dc:date>2008-10-31T17:32:13Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Code[s]</dc:subject>
		<dc:subject>PDO</dc:subject>
		<dc:subject>PHP</dc:subject>

		<description>Selon le PEAR ::Pager tutorials de Lorenzo Alberton, voici un Wrapper Pager/PDO, inspir&#233; largement du Pager_Wrapper contenu dans la doc du package. 'Sliding', // 'delta' =&gt; 2, // 'perPage' =&gt; 15, // ) ; // $paged_data = Pager_Wrapper_MDB2($db, $query, $pagerOptions) ; // //$paged_data['data'] ; //paged data // //$paged_data['links'] ; //xhtml links for page navigation // //$paged_data['page_numbers'] ; //array('current', 'total') ; // /** * Helper method - Rewrite the query into a &quot;SELECT (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/code-s" rel="tag"&gt;Code[s]&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/pdo" rel="tag"&gt;PDO&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/php" rel="tag"&gt;PHP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Selon le &lt;a href='http://www.alberton.info/pear_pager_tutorial_database_results.html' class='spip_out' rel='external'&gt;PEAR ::Pager tutorials&lt;/a&gt; de &lt;a href='http://www.alberton.info/' class='spip_out' rel='external'&gt;Lorenzo Alberton&lt;/a&gt;, voici un Wrapper Pager/PDO, inspir&#233; largement du &lt;a href='http://cvs.php.net/viewvc.cgi/pear/Pager/examples/Pager_Wrapper.php?view=markup' class='spip_out' rel='external'&gt;Pager_Wrapper&lt;/a&gt; contenu dans la doc du package.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; // SAMPLE USAGE&lt;br /&gt; // ------------&lt;br /&gt; //&lt;br /&gt; // $query = 'SELECT this, that FROM mytable';&lt;br /&gt; // require_once 'Pager_Wrapper.php'; //this file&lt;br /&gt; // $pagerOptions = array(&lt;br /&gt; // 'mode' =&gt; 'Sliding',&lt;br /&gt; // 'delta' =&gt; 2,&lt;br /&gt; // 'perPage' =&gt; 15,&lt;br /&gt; // );&lt;br /&gt; // $paged_data = Pager_Wrapper_MDB2($db, $query, $pagerOptions);&lt;br /&gt; // //$paged_data['data']; //paged data&lt;br /&gt; // //$paged_data['links']; //xhtml links for page navigation&lt;br /&gt; // //$paged_data['page_numbers']; //array('current', 'total');&lt;br /&gt; //&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt; * Helper method - Rewrite the query into a &quot;SELECT COUNT(*)&quot; query.&lt;br /&gt; * @param string $sql query&lt;br /&gt; * @return string rewritten query OR false if the query can't be rewritten&lt;br /&gt; * @access private&lt;br /&gt; */&lt;br /&gt; function rewriteCountQuery($sql)&lt;br /&gt; {&lt;br /&gt; if (preg_match('/^\s*SELECT\s+\bDISTINCT\b/is', $sql) ||&lt;br /&gt; preg_match('/\s+GROUP\s+BY\s+/is', $sql) ||&lt;br /&gt; preg_match('/\s+UNION\s+/is', $sql)) {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; $open_parenthesis = '(?:\()';&lt;br /&gt; $close_parenthesis = '(?:\))';&lt;br /&gt; $subquery_in_select = $open_parenthesis.'.*\bFROM\b.*'.$close_parenthesis;&lt;br /&gt; $pattern = '/(?:.*'.$subquery_in_select.'.*)\bFROM\b\s+/Uims';&lt;br /&gt; if (preg_match($pattern, $sql)) {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; $subquery_with_limit_order = $open_parenthesis.'.*\b(LIMIT|ORDER)\b.*'.$close_parenthesis;&lt;br /&gt; $pattern = '/.*\bFROM\b.*(?:.*'.$subquery_with_limit_order.'.*).*/Uims';&lt;br /&gt; if (preg_match($pattern, $sql)) {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; $queryCount = preg_replace('/(?:.*)\bFROM\b\s+/Uims', 'SELECT COUNT(*) FROM ', $sql, 1);&lt;br /&gt; list($queryCount, ) = preg_split('/\s+ORDER\s+BY\s+/is', $queryCount);&lt;br /&gt; list($queryCount, ) = preg_split('/\bLIMIT\b/is', $queryCount);&lt;br /&gt; return trim($queryCount);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt; * PDO's version of Pager_Wrapper&lt;br /&gt; * @param object PDO instance&lt;br /&gt; * @param string db query&lt;br /&gt; * @param array PEAR::Pager options&lt;br /&gt; * @param boolean Disable pagination (get all results)&lt;br /&gt; * @param integer fetch mode constant&lt;br /&gt; * @return array with links and paged data&lt;br /&gt; */&lt;br /&gt; function Pager_Wrapper_PDO($db, $query, $pager_options = array(), $disabled = false, $fetchMode = PDO::FETCH_ASSOC){&lt;br /&gt; if (!array_key_exists('totalItems', $pager_options)) {&lt;br /&gt; if ($countQuery = rewriteCountQuery($query)) {&lt;br /&gt; $stmt = $db-&gt;prepare($countQuery);&lt;br /&gt; $stmt-&gt;execute();&lt;br /&gt; $totalItems = $stmt-&gt;fetchColumn();&lt;br /&gt; }else{&lt;br /&gt; $stmt = $db-&gt;prepare($query);&lt;br /&gt; if (!$stmt) {&lt;br /&gt; echo &quot;\nPDO::errorCode(): &quot;;&lt;br /&gt; print $db-&gt;errorCode();&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; $stmt-&gt;execute();&lt;br /&gt; if ($stmt-&gt;execute() === FALSE) {&lt;br /&gt; echo &quot;\nPDO::errorCode()toto: &quot;;&lt;br /&gt; print $db-&gt;errorCode();&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; $rows = $stmt-&gt;fetchAll(PDO::FETCH_COLUMN);&lt;br /&gt; $totalItems = count($rows);&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt; $pager_options['totalItems'] = $totalItems;&lt;br /&gt; }&lt;br /&gt; require_once 'Pager/Pager.php';&lt;br /&gt; $pager = Pager::factory($pager_options);&lt;br /&gt; &lt;br /&gt; $page = array();&lt;br /&gt; $page['links'] = $pager-&gt;links;&lt;br /&gt; $page['totalItems'] = $pager_options['totalItems'];&lt;br /&gt; $page['page_numbers'] = array(&lt;br /&gt; 'current' =&gt; $pager-&gt;getCurrentPageID(),&lt;br /&gt; 'total' =&gt; $pager-&gt;numPages()&lt;br /&gt; );&lt;br /&gt; list($page['from'], $page['to']) = $pager-&gt;getOffsetByPageId();&lt;br /&gt; $page['limit'] = $page['to'] - $page['from'] +1;&lt;br /&gt; &lt;br /&gt; // fix offset&lt;br /&gt; // limit 1,10 can not retrive the first record of result set.&lt;br /&gt; $page['from'] = $page['from'] - 1;&lt;br /&gt; &lt;br /&gt; if (!$disabled) {&lt;br /&gt; $query .= ' LIMIT ' . $page['from'] . ', ' . $pager_options['perPage'];&lt;br /&gt; }&lt;br /&gt; // var_dump($query);&lt;br /&gt; $stmt = $db-&gt;prepare($query);&lt;br /&gt; if (!$stmt) {&lt;br /&gt; echo &quot;\nPDO::errorCode(): &quot;;&lt;br /&gt; print $db-&gt;errorCode();print_r($db-&gt;errorInfo());&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; $stmt-&gt;execute();&lt;br /&gt; $page['data'] = $stmt-&gt;fetchAll($fetchMode); &lt;br /&gt; if ($disabled) {&lt;br /&gt; $page['links'] = '';&lt;br /&gt; $page['page_numbers'] = array(&lt;br /&gt; 'current' =&gt; 1,&lt;br /&gt; 'total' =&gt; 1&lt;br /&gt; );&lt;br /&gt; } &lt;br /&gt; &lt;br /&gt; // var_dump($pager);&lt;br /&gt; return $page;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt; &lt;p&gt;Bon le code est pas fignol&#233;&#8230; mais on peut d&#233;j&#224; l'utiliser &#224; des fins de tests :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; require_once('DatabaseConnection.class.php');&lt;br /&gt; //copy the Pager_Wrapper file where you can include it&lt;br /&gt; require_once './Pager_Wrapper.php';&lt;br /&gt; $db = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; $db-&gt;setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);&lt;br /&gt; //skipped the db connection code...&lt;br /&gt; //let's just suppose we have a valid db connection in $db.&lt;br /&gt; &lt;br /&gt; $pager_options = array(&lt;br /&gt; 'mode' =&gt; 'Sliding',&lt;br /&gt; 'perPage' =&gt; 2,&lt;br /&gt; 'delta' =&gt; 2,&lt;br /&gt; );&lt;br /&gt; $query = 'SELECT * FROM person';&lt;br /&gt; $paged_data = Pager_Wrapper_PDO($db, $query, $pager_options);&lt;br /&gt; &lt;br /&gt; //show the results&lt;br /&gt; echo '&lt;ul&gt;';&lt;br /&gt; foreach ($paged_data['data'] as $product) {&lt;br /&gt; echo '&lt;li&gt;'.$product['id_person'].': '.$product['name'].'&lt;/li&gt;';&lt;br /&gt; }&lt;br /&gt; echo '&lt;/ul&gt;';&lt;br /&gt; &lt;br /&gt; //show the links&lt;br /&gt; echo $paged_data['links'];&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;le PDO ::MYSQL_ATTR_USE_BUFFERED_QUERY est mis &#224; TRUE pour permettre d'effectuer des requ&#234;tes multiples sur la m&#234;me connexion&#8230;
&lt;br /&gt;Sinon 'a marche p&#244; !!!
&lt;br /&gt;Du moins sur ma plateforme de test &#224; l'arrache&#8230;&lt;/p&gt; &lt;p&gt;Alors que dans la litt&#233;rature, j'eu appris que la fermeture du 'PDO cursor' r&#232;glait le pb, via la PDOStatement ::closeCursor&#8230; &lt;br /&gt;c'est m&#234;me indiqu&#233; dans &lt;a href='http://fr.php.net/manual/fr/pdostatement.closecursor.php' class='spip_out' rel='external'&gt;la doc PDO&lt;/a&gt; : &quot;&lt;cite&gt;PDOStatement-&gt;closeCursor &#8212; Ferme le curseur, permettant &#224; la requ&#234;te d'&#234;tre de nouveau ex&#233;cut&#233;e&quot;&lt;/cite&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Classe Objet g&#233;n&#233;rique</title>
		<link>http://minimalteck.fr/dev-web/classe-objet-generique</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/classe-objet-generique</guid>
		<dc:date>2008-10-31T10:12:12Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Code[s]</dc:subject>
		<dc:subject>PHP</dc:subject>

		<description>La classe : Classe abstraite pour cr&#233;er/modifier/supprimer des objets construits &#224; partir d'une base de donn&#233;es, ici mysql (Auto_increment) et utilisant PDO db = DatabaseConnection ::get()-&gt;handle() ; if ( (!is_null($id)) &amp;&amp; (is_numeric($id))) $this-&gt;id = $id ; $this-&gt;load() ; public function __destruct() public function __set($key, $value) $this-&gt;$key = $value ; function __get($key) return $this-&gt;$key ; public function (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/code-s" rel="tag"&gt;Code[s]&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/php" rel="tag"&gt;PHP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&quot;cs_sommaire cs_sommaire_avec_fond&quot; id=&quot;outil_sommaire&quot;&gt; &lt;div class=&quot;cs_sommaire_inner&quot;&gt; &lt;div class=&quot;cs_sommaire_titre_avec_fond&quot;&gt; Sommaire &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;a title=&quot;La classe :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire_0&quot;&gt;La classe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Son utilisation :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire_1&quot;&gt;Son utilisation&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_0&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;La classe :&lt;/h3&gt; &lt;p&gt;Classe &lt;strong&gt;abstraite&lt;/strong&gt; pour cr&#233;er/modifier/supprimer des objets construits &#224; partir d'une base de donn&#233;es, ici mysql (Auto_increment) et utilisant PDO&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; require_once('DatabaseConnection.class.php');&lt;br /&gt; abstract class GenericObject {&lt;br /&gt; &lt;br /&gt; protected $table;&lt;br /&gt; protected $fields;&lt;br /&gt; protected $primary_key;&lt;br /&gt; protected $id = NULL;&lt;br /&gt; private $data = array();&lt;br /&gt; private static $db;&lt;br /&gt; private $autoIncrement = true;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; public function __construct($id=NULL){&lt;br /&gt; $this-&gt;db = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; if ( (!is_null($id)) &amp;&amp; (is_numeric($id))) {&lt;br /&gt; $this-&gt;id = $id;&lt;br /&gt; $this-&gt;load(); &lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function __destruct(){&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function __set($key, $value) {&lt;br /&gt; $this-&gt;$key = $value;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; function __get($key) {&lt;br /&gt; return $this-&gt;$key;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function autoIncrement($bool){&lt;br /&gt; if(is_bool($bool)){&lt;br /&gt; $this-&gt;autoIncrement = $bool;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function load() {&lt;br /&gt; $this-&gt;db = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; $sql = 'SELECT '.implode(', ',$this-&gt;fields).' FROM `'. $this-&gt;table .'` WHERE ';&lt;br /&gt; $sql .=' `'.$this-&gt;primary_key.'` = &quot;'.$this-&gt;id.'&quot; LIMIT 1;';&lt;br /&gt; &lt;br /&gt; $sth = $this-&gt;db-&gt;query($sql);&lt;br /&gt; $result = $sth-&gt;fetch(PDO::FETCH_ASSOC);&lt;br /&gt; if (is_array($result)) {&lt;br /&gt; $this-&gt;data = $result;&lt;br /&gt; }&lt;br /&gt; unset($result);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function save(){&lt;br /&gt; $this-&gt;db = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; &lt;br /&gt; if(is_null($this-&gt;id) &amp;&amp; $this-&gt;autoIncrement){//INSERT A NEW RECORD&lt;br /&gt; $sql = 'SHOW TABLE STATUS LIKE &quot;'.$this-&gt;table.'&quot;';&lt;br /&gt; $sth = $this-&gt;db-&gt;query($sql);&lt;br /&gt; $row = $sth-&gt;fetch(PDO::FETCH_ASSOC);&lt;br /&gt; $this-&gt;id= $row['Auto_increment'];&lt;br /&gt; $sth-&gt;closeCursor();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; $bind_array = array();&lt;br /&gt; $sql_stmt = 'REPLACE INTO ' .$this-&gt;table. ' SET';&lt;br /&gt; foreach($this-&gt;data as $field =&gt; $value) {&lt;br /&gt; $bind_array[] = $this-&gt;db-&gt;quote($value);&lt;br /&gt; $sql_stmt .= ' '.$field.' = ? ,';&lt;br /&gt; }&lt;br /&gt; $sql_stmt = substr($sql_stmt,0,-1);&lt;br /&gt; &lt;br /&gt; $stmt = $this-&gt;db-&gt;prepare($sql_stmt);&lt;br /&gt; if (!$stmt) {&lt;br /&gt; echo &quot;\nPDO::errorInfo():\n&quot;;&lt;br /&gt; print_r($this-&gt;db-&gt;errorInfo());&lt;br /&gt; } else {&lt;br /&gt; if ($stmt-&gt;execute($bind_array) === false){&lt;br /&gt; $error = $this-&gt;db-&gt;errorInfo();&lt;br /&gt; print_r($error);&lt;br /&gt; die();&lt;br /&gt; } else {&lt;br /&gt; return true;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; public function remove(){&lt;br /&gt; if (!is_null($this-&gt;id)) {&lt;br /&gt; $this-&gt;db = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; $sql = 'DELETE FROM ' .$this-&gt;table. ' WHERE '.$this-&gt;primary_key.'=' . $this-&gt;id .';';&lt;br /&gt; if (!$this-&gt;db-&gt;exec($sql)) {&lt;br /&gt; $error = $this-&gt;db-&gt;errorInfo();&lt;br /&gt; print_r($error);&lt;br /&gt; } else {&lt;br /&gt; return true;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; public function getDatas(){&lt;br /&gt; return $this-&gt;data;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function setDatas($assign_values){&lt;br /&gt; foreach ($assign_values as $key =&gt; $value) {&lt;br /&gt; $this-&gt;data[$key] = $value;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_1&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Son utilisation :&lt;/h3&gt; &lt;p&gt;Il suffit d'&#233;tendre la classe pour cr&#233;&#233; un nouvel objet, en affectant :
&lt;br /&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; la table de donn&#233;es (&quot;$table&quot;) ;
&lt;br /&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; les valeurs des colonnes de cette table (&quot;$fields&quot;) ;
&lt;br /&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; la cl&#233; primaire (&quot;$primary_key&quot;).&lt;/p&gt; &lt;p&gt;Exemple :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; require_once('GenericObject.class.php');&lt;br /&gt; class Person extends GenericObject {&lt;br /&gt; protected $table = 'person';&lt;br /&gt; protected $fields = array('id_person',&lt;br /&gt; 'name',&lt;br /&gt; 'firstname',&lt;br /&gt; 'email');&lt;br /&gt; protected $primary_key = 'id_person';&lt;br /&gt; }&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Require : &lt;a href='http://minimalteck.fr/dev-web/singleton-pdo' class='spip_in'&gt;DatabaseConnection.class.php&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Singleton PDO</title>
		<link>http://minimalteck.fr/dev-web/singleton-pdo</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/singleton-pdo</guid>
		<dc:date>2008-10-31T09:58:21Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Code[s]</dc:subject>
		<dc:subject>PDO</dc:subject>
		<dc:subject>PHP</dc:subject>

		<description>La classe singleton : engine = 'mysql' ; $this-&gt;host = 'localhost' ; $this-&gt;database = 'nom_base' ; $this-&gt;user = 'user' ; $this-&gt;pass = 'user_password' ; $dns = $this-&gt;engine.':dbname='.$this-&gt;database.&quot; ;host=&quot;.$this-&gt;host ; try $this-&gt;_handle = new PDO( $dns, $this-&gt;user, $this-&gt;pass ) ; $this-&gt;_handle-&gt;query(&quot;SET NAMES utf8&quot;) ;//FOR USING UTF-8 $this-&gt;_handle-&gt;query(&quot;SET CHARACTER SET 'utf8'&quot;) ;//FOR USING UTF-8 return true ; catch (PDOException $e) print 'Erreur : (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/code-s" rel="tag"&gt;Code[s]&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/pdo" rel="tag"&gt;PDO&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/php" rel="tag"&gt;PHP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&quot;cs_sommaire cs_sommaire_avec_fond&quot; id=&quot;outil_sommaire&quot;&gt; &lt;div class=&quot;cs_sommaire_inner&quot;&gt; &lt;div class=&quot;cs_sommaire_titre_avec_fond&quot;&gt; Sommaire &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;a title=&quot;La classe singleton :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire_0&quot;&gt;La classe singleton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Son utilisation :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire_1&quot;&gt;Son utilisation&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_0&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;La classe singleton :&lt;/h3&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; class DatabaseConnection {&lt;br /&gt; &lt;br /&gt; public static function get() {&lt;br /&gt; static $db = null;&lt;br /&gt; if ( $db == null ) {&lt;br /&gt; $db = new DatabaseConnection();&lt;br /&gt; }&lt;br /&gt; return $db;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private $_handle = null;&lt;br /&gt; &lt;br /&gt; private function __construct() {&lt;br /&gt; $this-&gt;engine = 'mysql';&lt;br /&gt; $this-&gt;host = 'localhost';&lt;br /&gt; $this-&gt;database = 'nom_base';&lt;br /&gt; $this-&gt;user = 'user';&lt;br /&gt; $this-&gt;pass = 'user_password';&lt;br /&gt; $dns = $this-&gt;engine.':dbname='.$this-&gt;database.&quot;;host=&quot;.$this-&gt;host;&lt;br /&gt; try {&lt;br /&gt; $this-&gt;_handle = new PDO( $dns, $this-&gt;user, $this-&gt;pass );&lt;br /&gt; $this-&gt;_handle-&gt;query(&quot;SET NAMES utf8&quot;);//FOR USING UTF-8&lt;br /&gt; $this-&gt;_handle-&gt;query(&quot;SET CHARACTER SET 'utf8'&quot;);//FOR USING UTF-8&lt;br /&gt; return true;&lt;br /&gt; } catch (PDOException $e){&lt;br /&gt; print 'Erreur : '.$e-&gt;getMessage().'&lt;br&gt;';&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function handle() {&lt;br /&gt; return $this-&gt;_handle;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_1&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=8#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Son utilisation :&lt;/h3&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; $dbx = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; $results=$dbx-&gt;query('SELECT * FROM bidule'); &lt;br /&gt; $results-&gt;setFetchMode(PDO::FETCH_OBJ); // retour d'un objet std&lt;br /&gt; while( $row = $resultats-&gt;fetch() ) {&lt;br /&gt; echo 'Utilisateur : '.$row-&gt;id.'&lt;br /&gt;'; // on affiche l'id des entr&#233;es de la table bidule&lt;br /&gt; }&lt;br /&gt; $results-&gt;closeCursor(); // on ferme le curseur des r&#233;sultats : n&#233;cessaire pour pouvoir r&#233;utiliser la connexion $dbx pour ex&#233;cuter une nouvelle requ&#234;te...&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
