<?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>Roms BLOG</title>
	<atom:link href="http://www.romainbourdon.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.romainbourdon.com</link>
	<description>PHP, pensées et humeurs de Romain Bourdon</description>
	<lastBuildDate>Fri, 17 Feb 2012 17:35:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Apéro PHP à Bordeaux lundi 20 Février</title>
		<link>http://www.romainbourdon.com/index.php/2012/02/17/apero-php-a-bordeaux-lundi-20-fevrier/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apero-php-a-bordeaux-lundi-20-fevrier</link>
		<comments>http://www.romainbourdon.com/index.php/2012/02/17/apero-php-a-bordeaux-lundi-20-fevrier/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 17:35:53 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[Communauté]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[perso]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PUG Bordeaux]]></category>
		<category><![CDATA[apéro PHP]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=533</guid>
		<description><![CDATA[Le PUG Bordeaux organise un nouvel apéro PHP au bar &#171;&#160;La Cassolette&#160;&#187; ce lundi 20 Février à partir de 19h. Au programme : création de l&#8217;antenne locale de l&#8217;AFUP préparation du premier Dojo PHP des bières et de la bonne humeur Venez nombreux, moi j&#8217;y serais avec quelques goodies PHP à distribuer aux plus vaillants [...]]]></description>
			<content:encoded><![CDATA[<p>Le PUG Bordeaux organise un nouvel apéro PHP au bar &laquo;&nbsp;La Cassolette&nbsp;&raquo; ce lundi 20 Février à partir de 19h.</p>
<p>Au programme :</p>
<ul>
<li>création de l&#8217;antenne locale de l&#8217;AFUP</li>
<li>préparation du premier Dojo PHP</li>
<li>des bières et de la bonne humeur</li>
</ul>
<p>Venez nombreux, moi j&#8217;y serais avec quelques goodies PHP à distribuer aux plus vaillants (stickers PHP et Elephpants, tours de cou,etc.. glanés lors de diverses conférences).</p>
<p>&nbsp;</p>
<p>Plus d&#8217;infos sur le site du PUG : <a href="http://bordeauxpug.org/">http://bordeauxpug.org/</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2012/02/17/apero-php-a-bordeaux-lundi-20-fevrier/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Compte rendu de l&#8217;apéro PHP d&#8217;hier à Bordeaux</title>
		<link>http://www.romainbourdon.com/index.php/2012/01/31/compte-rendu-de-lapero-php-dhier-a-bordeaux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=compte-rendu-de-lapero-php-dhier-a-bordeaux</link>
		<comments>http://www.romainbourdon.com/index.php/2012/01/31/compte-rendu-de-lapero-php-dhier-a-bordeaux/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 13:51:54 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[Communauté]]></category>
		<category><![CDATA[perso]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PUG Bordeaux]]></category>
		<category><![CDATA[Afup]]></category>
		<category><![CDATA[bordeaux]]></category>
		<category><![CDATA[PUG]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=530</guid>
		<description><![CDATA[Hier s&#8217;est déroulé le premier apéro PHP de l&#8217;année à Bordeaux. nous venons de mettre en ligne le compte rendu  de la soirée : http://bordeauxpug.org/2012/01/31/compte-rendu-de-lapero-repas-du-30-janvier/ Au programme, nos objectifs pour 2012 et la transformation du PUG en antenne officielle de l&#8217;AFUP. &#160;]]></description>
			<content:encoded><![CDATA[<p>Hier s&#8217;est déroulé le premier apéro PHP de l&#8217;année à Bordeaux.</p>
<p>nous venons de mettre en ligne le compte rendu  de la soirée :</p>
<p><a href="http://bordeauxpug.org/2012/01/31/compte-rendu-de-lapero-repas-du-30-janvier/">http://bordeauxpug.org/2012/01/31/compte-rendu-de-lapero-repas-du-30-janvier/</a></p>
<p>Au programme, nos objectifs pour 2012 et la transformation du PUG en antenne officielle de l&#8217;AFUP.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2012/01/31/compte-rendu-de-lapero-php-dhier-a-bordeaux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apéro/repas PHP à Bordeaux lundi 30 Janvier</title>
		<link>http://www.romainbourdon.com/index.php/2012/01/28/aperorepas-php-a-bordeaux-lundi-30-janvier/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aperorepas-php-a-bordeaux-lundi-30-janvier</link>
		<comments>http://www.romainbourdon.com/index.php/2012/01/28/aperorepas-php-a-bordeaux-lundi-30-janvier/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 11:36:29 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[Communauté]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PUG Bordeaux]]></category>
		<category><![CDATA[apéro PHP]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=524</guid>
		<description><![CDATA[Partant du constat qu&#8217;on finissait toujours par manger quelque chose sur un coin de table, il a été décidé que le prochain apéro PHP du PUG Bordeaux serait un apéro/repas. Il se déroulera ce lundi 30 Janvier à la cassolette, place de la Victoire à partir de 19h. L&#8217;apéro est ouvert à tous, à chaque [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.romainbourdon.com/wp-content/uploads/2012/01/logoPug.jpg"><img class="alignleft size-full wp-image-526" title="logoPug" src="http://www.romainbourdon.com/wp-content/uploads/2012/01/logoPug.jpg" alt="" width="100" /></a>Partant du constat qu&#8217;on finissait toujours par manger quelque chose sur un coin de table, il a été décidé que le prochain apéro PHP du PUG Bordeaux serait un apéro/repas.</p>
<p>Il se déroulera ce lundi 30 Janvier à<a title="Apéro / repas PHP" href="http://maps.google.fr/maps?q=CASSOLETTE,+Place+de+la+Victoire,+Bordeaux&amp;hl=fr&amp;ll=44.83056,-0.573328&amp;spn=0.004581,0.007306&amp;sll=44.850765,-0.574045&amp;sspn=0.026013,0.066047&amp;oq=cassolette,+place+de+la+&amp;t=h&amp;hq=CASSOLETTE,&amp;hnear=Place+de+la+Victoire,+Bordeaux,+Gironde,+Aquitaine&amp;z=17&amp;iwloc=A"> la cassolette</a>, place de la Victoire à partir de 19h.</p>
<p>L&#8217;apéro est ouvert à tous, à chaque session, de nouveaux visages font leur apparition, n&#8217;ayez donc pas peur de venir, même si c&#8217;est juste pour faire un petit coucou.</p>
<p>Plus d&#8217;info : <a href="http://bordeauxpug.org/2012/01/14/apero-de-janvier/">site du PUG</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2012/01/28/aperorepas-php-a-bordeaux-lundi-30-janvier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C&#8217;est parti pour le forum PHP 2012</title>
		<link>http://www.romainbourdon.com/index.php/2012/01/17/cest-parti-pour-le-forum-php-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cest-parti-pour-le-forum-php-2012</link>
		<comments>http://www.romainbourdon.com/index.php/2012/01/17/cest-parti-pour-le-forum-php-2012/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 16:06:00 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[Communauté]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Afup]]></category>
		<category><![CDATA[forum PHP]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=520</guid>
		<description><![CDATA[Le Forum PHP 2012 organisé tous les ans par l&#8217;AFUP vient d&#8217;être annoncé! L&#8217;édition de cette année qui se déroulera les 5 et 6 Juin à la cité Universitaire Internationale aura pour thèmes &#171;&#160;la performance, la qualité et les nouveaux usages&#160;&#187;. Pour ceux qui souhaitent y participer en tant que speaker, l&#8217;appel à conférencier est [...]]]></description>
			<content:encoded><![CDATA[<p>Le <a title="Forum PHP 2012" href="http://www.afup.org/pages/forumphp2012/" target="_blank">Forum PHP 2012</a> organisé tous les ans par l&#8217;AFUP vient d&#8217;être annoncé!</p>
<p>L&#8217;édition de cette année qui se déroulera les 5 et 6 Juin à la cité Universitaire Internationale aura pour thèmes &laquo;&nbsp;la performance, la qualité et les nouveaux usages&nbsp;&raquo;.</p>
<p>Pour ceux qui souhaitent y participer en tant que speaker, l&#8217;appel à conférencier est ouvert jusqu&#8217;au 29 février 2012 à cette adresse :</p>
<p><a title="Appel à conférencier du forum PHP 2012" href="http://www.afup.org/pages/forumphp2012/appel-a-conferenciers.php" target="_blank">http://www.afup.org/pages/forumphp2012/appel-a-conferenciers.php</a></p>
<p>&nbsp;</p>
<p>Maintenant organisé en alternance avec le PHP Tour, le Forum PHP quitte la période hivernale pour se dérouler dans un climat plus agréable et donc plus propice aux apéros <img src='http://www.romainbourdon.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2012/01/17/cest-parti-pour-le-forum-php-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#8217;offre de formation PHP d&#8217;Alliaform à Bordeaux s&#8217;enrichit</title>
		<link>http://www.romainbourdon.com/index.php/2012/01/14/loffre-de-formation-php-dalliaform-a-bordeaux-senrichit/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=loffre-de-formation-php-dalliaform-a-bordeaux-senrichit</link>
		<comments>http://www.romainbourdon.com/index.php/2012/01/14/loffre-de-formation-php-dalliaform-a-bordeaux-senrichit/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 14:05:03 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[AlliaForm]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[technologie]]></category>
		<category><![CDATA[bordeaux]]></category>
		<category><![CDATA[formation PHP]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=515</guid>
		<description><![CDATA[AlliaForm enrichit son offre de formation à PHP en proposant maintenant un cursus de niveau 2, la formation PHP &#8211; utilisation avancée de php. D&#8217;une durée de 3 jours, cette formation couvre notamment la programmation orientée objet, l&#8217;utilisation de PDO, les SPL et l&#8217;utilisation du XML avec PHP. Dispensée en plein centre de Bordeaux, cette formation vient [...]]]></description>
			<content:encoded><![CDATA[<p>AlliaForm enrichit son offre de formation à PHP en proposant maintenant un cursus de niveau 2, la <a title="formation PHP avancé à Bordeaux" href="http://www.alliaform.fr/formations/formation-PHP---utilisation-avancee-de-PHP.php" target="_blank">formation PHP &#8211; utilisation avancée de php</a>.</p>
<p>D&#8217;une durée de 3 jours, cette formation couvre notamment la programmation orientée objet, l&#8217;utilisation de PDO, les SPL et l&#8217;utilisation du XML avec PHP.</p>
<p>Dispensée en plein centre de Bordeaux, cette formation vient compléter l&#8217;offre web d&#8217;AlliaForm qui, à terme, couvrira l&#8217;ensemble des langages et concepts liés à la toile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2012/01/14/loffre-de-formation-php-dalliaform-a-bordeaux-senrichit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free refond son site mobile en utilisant la méthodologie &#171;&#160;La Rache&#160;&#187;</title>
		<link>http://www.romainbourdon.com/index.php/2012/01/12/free-refond-son-site-mobile-en-utilisant-la-methodologie-la-rache/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=free-refond-son-site-mobile-en-utilisant-la-methodologie-la-rache</link>
		<comments>http://www.romainbourdon.com/index.php/2012/01/12/free-refond-son-site-mobile-en-utilisant-la-methodologie-la-rache/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:36:34 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[divers]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=501</guid>
		<description><![CDATA[Comme annoncé hier, free est en train de refondre son site http://mobile.free.fr afin de supporter la charge induite par leur annonce de forfait tout compris à 15,99€. JSP ne tenait pas le coup, qu&#8217;à cela ne tienne, on passe à PHP. Les services sont montés et remis en ligne au fur et à mesure. Hier nous [...]]]></description>
			<content:encoded><![CDATA[<p>Comme <a title="Surchargé, Free passe le site sur son offre mobile de Jsp vers PHP dans la nuit" href="http://www.romainbourdon.com/index.php/2012/01/11/surcharge-free-passe-le-site-sur-son-offre-mobile-de-jsp-vers-php-dans-la-nuit/" target="_blank">annoncé hier</a>, free est en train de refondre son site <a href="http://mobile.free.fr">http://mobile.free.fr</a> afin de supporter la charge induite par leur annonce de forfait tout compris à 15,99€. JSP ne tenait pas le coup, qu&#8217;à cela ne tienne, on passe à PHP.</p>
<p>Les services sont montés et remis en ligne au fur et à mesure. Hier nous avons d&#8217;abord eu droit à la partie inscription pour les freenautes avec son lot de bugs notamment dans la validation des ribs (relevés d&#8217;identités bancaires) ce qui a rendu<a href="http://forum.freenews.fr/viewtopic.php?id=74721" target="_blank"> un paquet de monde hystérique</a> au point de chercher des solutions pour générer de faux ribs permettant de valider leur inscription.</p>
<p>Ce matin c&#8217;est la partie inscription pour les non freenautes qui a été mise en ligne. Espérons que cela se déroule mieux pour eux.</p>
<p>En tout cas, ces mises en ligne nous permettent de comprendre un peu mieux comment fonctionnent les équipes de développement de Free. Si vous allez faire un tour sur la partie <a href="https://mobile.free.fr/subscribea/n_coordonnees.php?offre=n_illimite" target="_blank">inscription pour les non frenautes</a> (rapidement, car j&#8217;imagine que ce bug va vite disparaître), vous pourrez voir que le lien, en haut de page qui mène vers la section &laquo;&nbsp;Espace abonné&nbsp;&raquo; pointe en fait vers http://localhost:8080/moncompte/.</p>
<p>Quoi? Pas de tests chez Free? Du développement en local qui semble directement passer en production sans passer par un serveur de dev. ou de pré-prod?</p>
<p>Tout cela ressemble bien à la méthodologie <a href="http://www.risacher.com/la-rache/index.php?z=2" target="_blank">&laquo;&nbsp;La Rache&nbsp;&raquo;</a> qui permet de produire vite mais sans trop s&#8217;attarder sur la qualité du code <img src='http://www.romainbourdon.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ceci dit, et étant donné, d&#8217;une part, le contexte dans lequel ce site est redéveloppé et, d&#8217;autre part, la simplicité du code à produire, je crois que la décision peut se justifier.</p>
<p>J&#8217;en déduis également que la prochaine étape sera donc la remise en ligne de la partie &laquo;&nbsp;abonnés&nbsp;&raquo;.  Les premiers isncrits pourront  enfin valider que la procédure a bien été prise en compte correctement.</p>
<p>Quoi qu&#8217;il en soit, et en toute franchise, je tire mon chapeau à Free qui a pris un décision difficile (refonte du site) en un temps record et qui est pas loin de gagner son pari!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2012/01/12/free-refond-son-site-mobile-en-utilisant-la-methodologie-la-rache/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Surchargé, Free passe le site sur son offre mobile de Jsp vers PHP dans la nuit</title>
		<link>http://www.romainbourdon.com/index.php/2012/01/11/surcharge-free-passe-le-site-sur-son-offre-mobile-de-jsp-vers-php-dans-la-nuit/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=surcharge-free-passe-le-site-sur-son-offre-mobile-de-jsp-vers-php-dans-la-nuit</link>
		<comments>http://www.romainbourdon.com/index.php/2012/01/11/surcharge-free-passe-le-site-sur-son-offre-mobile-de-jsp-vers-php-dans-la-nuit/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 13:43:41 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=497</guid>
		<description><![CDATA[Face à la surcharge de son site mobile et son incapacité à remonter la platforme, Free a migré le site de JSP vers PHP dans la nuit. Apparemment, seule la partie réservée aux personnes déjà abonnées à la Freebox a été mise en ligne, les autres parties du site devraient arriver au fur et à [...]]]></description>
			<content:encoded><![CDATA[<p>Face à la surcharge de son site mobile et son incapacité à remonter la platforme, Free a migré le site de JSP vers PHP dans la nuit.<br />
Apparemment, seule la partie réservée aux personnes déjà abonnées à la Freebox a été mise en ligne, les autres parties du site devraient arriver au fur et à mesure.</p>
<p>Encore un preuve de la haute performance et du Time To Market record de notre langage préféré!</p>
<p>Plus de détails :</p>
<p><a href="http://www.journaldugeek.com/2012/01/11/free-mobile-24-heures-apres-refait-son-site/">http://www.journaldugeek.com/2012/01/11/free-mobile-24-heures-apres-refait-son-site/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2012/01/11/surcharge-free-passe-le-site-sur-son-offre-mobile-de-jsp-vers-php-dans-la-nuit/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>créer un sommaire avec liens en utilisant FPDF</title>
		<link>http://www.romainbourdon.com/index.php/2011/12/18/creer-un-sommaire-avec-liens-en-utilisant-fpdf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creer-un-sommaire-avec-liens-en-utilisant-fpdf</link>
		<comments>http://www.romainbourdon.com/index.php/2011/12/18/creer-un-sommaire-avec-liens-en-utilisant-fpdf/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 11:15:54 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[divers]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[technologie]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[FPDF]]></category>
		<category><![CDATA[FPDI]]></category>
		<category><![CDATA[liens]]></category>
		<category><![CDATA[sommaire]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=478</guid>
		<description><![CDATA[&#160; Dernier volet de mes tutoriels sur l&#8217;utilisation de FPDF avec PHP, nous allons voir aujourd&#8217;hui comment générer un sommaire avec des liens dans un document PDF. FPDF propose nativement des méthodes pour générer des liens internes dans un  document : &#160; addlink() qui créé un lien et retourne son identifiant. Pour le moment, notre [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Dernier volet de mes tutoriels sur l&#8217;utilisation de FPDF avec PHP, nous allons voir aujourd&#8217;hui comment générer un sommaire avec des liens dans un document PDF.</p>
<p>FPDF propose nativement des méthodes pour générer des liens internes dans un  document :</p>
<p> &nbsp;</p>
<ul>
<li>addlink() qui créé un lien et retourne son identifiant. Pour le moment, notre lien n&#8217;est qu&#8217;une ressource, il va maintenant falloir l&#8217;associer à un texte et ensuite préciser où ce lien doit pointer. Pour cela, il faut utiliser par exemple, la méthode cell() (qui permet d&#8217;écrire du texte) en lui passant en paramètre  l&#8217;identifiant du lien.</li>
</ul>
<p> &nbsp;</p>
<ul>
<li>SetLink() va enfin nous permettre de préciser la destination du lien. Nous l&#8217;utiliserons sur la page où le lien doit pointer</li>
</ul>
<p> &nbsp;</p>
<div>Le mode de fonctionnement de FPDF nous impose de créer les page les unes après les autres. Une fois une page créé, il n&#8217;est pas possible de revenir dessus. Il devient donc évident que, dans le cadre d&#8217;un sommaire, nous allons d&#8217;abord devoir créer tous les liens (un par entrée de notre sommaire), puis, page par page, assigner la destination de ces liens.</div>
<div>La première étape va donc consister a créer un conteneur pour stocker tous nos liens. Nous allons donc ajouter un nouvel attribut, en l&#8217;occurrence un tableau, à notre classe FPDF :</div>
<div>
<pre class="brush: css; title: ; notranslate">
class myfpdf extends fpdf {
    public $myLinks = array();
}
</pre>
<p>Au moment de générer notre sommaire, nous allons créer les liens et les ajouter, un par un à notre tableau. Voici un exemple de code à adapter à votre document :</p>
<pre class="brush: css; title: ; notranslate">
&lt;?php
...
//le numéro de la page
$numPage = 1;

//le titre de la page
$titrePage = 'première page';

//on créé un lien
$fpdi-&gt;myLinks[$numPage] = $fpdi-&gt;addLink();

// on écrit le nom de la page et on y associe le lien
$fpdi-&gt;cell(185,5,$titrePage,0,0,'L',$fpdi-&gt;myLinks[$numPage];

//on écrit le numéro de la page
$fpdi-&gt;cell(5,5,$numPage,0,2,'R',TRUE);

?&gt;
</pre>
<p>Cette opération doit être renouvelée pour chaque ligne apparaissant dans notre sommaire, le plus simple est donc de boucler dessus.</p>
<p>Voilà, nous avons écrit notre sommaire, il va maintenant falloir associer les bonnes pages aux liens.<br />
La solution basique serait de le faire manuellement dans notre code à chaque création de page.<br />
Mais comme un bon développeur est un développeur feignant, nous allons plutôt réécrire la méthode addPage() de FPDF afin d&#8217;automatiser l&#8217;action et que cela se fasse tout seul par la suite dans notre document :</p>
<pre class="brush: css; title: ; notranslate">
&lt;?php
class myfpdf extends fpdf {
    public $myLinks = array();

    public function addPage() {
        //on génère la page en appelant la méthode
        //parente addPage()
        parent::addPage();

        // si un lien existe pour ce numéro de page,
        //on l'associe à la page
        $page = $this-&gt;pageNo();
        if (isset($this-&gt;myLinks[$page])) {
            $this-&gt;setLink($this-&gt;myLink[$page]);
        }
    }

}
?&gt;
</pre>
<p>Voilà, à chaque nouvelle page, si un lien y est associé, il sera automatiquement ajouté.</p>
<p>&nbsp;</p>
<p>Si vous souhaitez voir le résultat, vous pouvez aller consulter <a href="http://www.alliaform.fr">le catalogue de formations d&#8217;AlliaForm</a>, en bas à gauche du menu.</p>
<p>&nbsp;</p>
<p>Le document est entièrement généré en PHP avec FPDI ( la version que vous y verrez est un version statique en cache, je ne le génère qu&#8217;une seule fois lorsque des modifications y sont apportées).</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2011/12/18/creer-un-sommaire-avec-liens-en-utilisant-fpdf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>numéros de page intelligents avec FPDI / FPDF</title>
		<link>http://www.romainbourdon.com/index.php/2011/12/17/numeros-de-page-intelligents-avec-fpdi-fpdf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=numeros-de-page-intelligents-avec-fpdi-fpdf</link>
		<comments>http://www.romainbourdon.com/index.php/2011/12/17/numeros-de-page-intelligents-avec-fpdi-fpdf/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 10:21:46 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=457</guid>
		<description><![CDATA[Dans la continuité de l&#8217;article précédent, voici un petit tutoriel pour intégrer des numéros de page intelligents dans vos documents PDF générés par FPDF ou FPDI en PHP. Avec FPDF, l&#8217;insertion des numéros de pages passe par la réécriture de la méthode footer() (qui est appelée à chaque création de nouvelle page) et l&#8217;utilisation de [...]]]></description>
			<content:encoded><![CDATA[<p>Dans la continuité de l&#8217;article précédent, voici un petit tutoriel pour intégrer des numéros de page intelligents dans vos documents PDF générés par FPDF ou FPDI en PHP.</p>
<p>Avec FPDF, l&#8217;insertion des numéros de pages passe par la réécriture de la méthode footer() (qui est appelée à chaque création de nouvelle page) et l&#8217;utilisation de la méthode pageNo() qui renvoie le numéro de la page courante.</p>
<p>Typiquement :</p>
<pre class="brush: css; title: ; notranslate">
public function Footer() {
    // Positionnement à 1,5 cm du bas
    $this-&gt;SetY(-15);
    // Police Arial italique 8
    $this-&gt;SetFont('Arial','I',8);
    // Numéro de page
    $page = $this-&gt;PageNo();
    $this-&gt;Cell(0,10,$page,0,0,$pos);
}
</pre>
<p>Mais, si cette solution est suffisante pour des documents de base, la construction d&#8217;un document chiadé demande souvent des fonctionnalités supplémentaires :</p>
<ul>
<li>possibilité de commencer la numérotation sur la deuxième ou troisième page (pas sur la couverture) et donc de décaller les numéros des pages</li>
<li>afficher le numéro de page dans le coin et donc le mettre à droite sur les pages paires et à gauche sur les pages impaires (ou vice-versa selon la page où vous commencez la numérotation)</li>
</ul>
<p>Voici donc une version un peu plus évolué de la méthode footer() qui intègre ces fonctionnalités :</p>
<pre class="brush: css; title: ; notranslate">
class myfpdi extends fpdi {
    public $addPageNum = false;
    public $decalage = 2;

    public function Footer() {
        // Positionnement à 1,5 cm du bas
        $this-&gt;SetY(-15);
        // Police Arial italique 8
        $this-&gt;SetFont('Arial','I',8);
        // Numéro de page
        if ($this-&gt;addPageNum ==  true) {
            $page = $this-&gt;PageNo() - $this-&gt;decalage;
            if ($page % 2)
                $pos = 'R';
            else
                $pos = 'L';
            $this-&gt;Cell(0,10,$page,0,0,$pos);
        }
    }
...
</pre>
<p><strong>Quelques explications</strong></p>
<p>L&#8217;attribut $addPageNum est un booléen qui permet de dire si on doit afficher le numéro de page ou non (true ou false). A vous de lui donner la valeur souhaitée avant de faire appel à la méthode addPage();</p>
<p>L&#8217;attribut $decalage permet d&#8217;introduire un décalage dans la numérotation. Par exemple, si il vaut 2, la page 3 du document aura le numéro 1 d&#8217;affiché.</p>
<p>Enfin le test  ($page % 2) ajoute l&#8217;alternance d&#8217;affichage à gauche et à droite. Inversez $pos = &#8216;L&#8217;; et $pos = &#8216;R&#8217;; si le sens ne vous convient pas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2011/12/17/numeros-de-page-intelligents-avec-fpdi-fpdf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Template PDF par défaut avec FPDI</title>
		<link>http://www.romainbourdon.com/index.php/2011/12/16/template-pdf-par-defaut-avec-fpdi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=template-pdf-par-defaut-avec-fpdi</link>
		<comments>http://www.romainbourdon.com/index.php/2011/12/16/template-pdf-par-defaut-avec-fpdi/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 07:56:03 +0000</pubDate>
		<dc:creator>Roms</dc:creator>
				<category><![CDATA[AlliaForm]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[FPDI]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.romainbourdon.com/?p=442</guid>
		<description><![CDATA[Dans le cadre de la création automatique du catalogue de formations PDF de AlliaForm, j&#8217;ai utilisé FPDI une classe dérivée de FPDF permettant d&#8217;importer des templates (modèles) de PDF. FPDI est très pratique, on ouvre un fichier PDF existant, on importe une page et on s&#8217;en sert comme modele pour générer un nouveau PDF. Seulement, j&#8217;ai [...]]]></description>
			<content:encoded><![CDATA[<p>Dans le cadre de la création automatique du <a title="Catalogue de formations AlliaForm" href="http://www.alliaform.fr/catalogue/catalogue_formations_alliaform.pdf" target="_blank">catalogue de formations PDF</a> de AlliaForm, j&#8217;ai utilisé <a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/" target="_blank">FPDI</a> une classe dérivée de FPDF permettant d&#8217;importer des templates (modèles) de PDF.<br />
FPDI est très pratique, on ouvre un fichier PDF existant, on importe une page et on s&#8217;en sert comme modele pour générer un nouveau PDF.</p>
<p>Seulement, j&#8217;ai rapidement rencontré un problème : si j&#8217;assigne un modele à un page, que j&#8217;écris un long texte dessus et que ce texte passe sur une page suivante (ce qui se fait automatiquement avec la méthode multicell()), la page suivante n&#8217;utilisera pas le modèle, elle sera générée à partir d&#8217;une feuille blanche.</p>
<p>J&#8217;ai bien sûr sorti la doc de FPDI, googlé pour trouver une solution rapide, mais la seule réponse que j&#8217;ai trouvé est &laquo;&nbsp;ce n&#8217;est pas possible avec FPDI&nbsp;&raquo;.</p>
<p>Je vous livre donc la solution (très simple) que j&#8217;ai implémentée.</p>
<p>Il suffit de dériver la classe FPDI et plus exactement, la méthode addPage() qui s&#8217;occupe d&#8217;ajouter une nouvelle page au document PDF pour y ajouter la fonctionnalité.</p>
<pre class="brush: css; title: ; notranslate">
class myfpdi extends fpdi {

 public $defaultModele;

 public function AddPage() {
  parent::AddPage();
  if ($this-&gt;defaultModele != '') {
   $this-&gt;setSourceFile($this-&gt;defaultModele);
   $tplidx = $this-&gt;ImportPage(1);
   $this-&gt;useTemplate($tplidx);
  }
 }
}
</pre>
<p>On commence par appeler la méthode parente afin de ré-implémener le fonctionnement initial de addPAge(), puis on on lui assigne notre modèle par défaut qui se trouve dans le nouvel attribut $defaultModele.</p>
<p>De là je n&#8217;ai plus qu&#8217;à instancier un objet de type myfpdi() et lui assigner un fichier PDF par défaut dans l&#8217;attribut $defaultModele avant de créer de nouvelles pages :</p>
<pre class="brush: css; title: ; notranslate">
$pdf = new myfpdi();
$pdf-&gt;defaultModele = 'fichier.pdf';
$pdf-&gt;addPage();
...
$pdf-&gt;ouput();
</pre>
<p>A chaque fois qu&#8217;une nouvelle page va être créée, la méthode addPage sera appelée et $defaultModele sera utilisé comme modèle par défaut.</p>
<p>Si à un moment dans mon PDF, je souhaite utiliser un autre modèle, il me suffira de changer la valeur de $defaultModele et si je ne veux plus de modèle, je passe sa valeur à &#8216; &#8216; (chaîne vide).</p>
<p>Bien sûr, dans un souci de lisibilité, le code présenté ci-dessus va au plus simple, tout cela est perfectible (accesseurs, test d&#8217;existence du fichier pdf, etc&#8230;)<br />
<strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.romainbourdon.com/index.php/2011/12/16/template-pdf-par-defaut-avec-fpdi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

