<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://arts-numeriques.codedrops.net/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Arts num&#233;riques</title>
	<link>https://arts-numeriques.codedrops.net/</link>
	<description>artsnumeriques est le support des cours de St&#233;phane Noel, professeur &#224; l'&#233;cole de recherche graphique.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="http://arts-numeriques.codedrops.net/spip.php?id_rubrique=43&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Ajouter une carte avec openstreetmap</title>
		<link>http://arts-numeriques.codedrops.net/Ajouter-une-carte-avec-openstreetmap</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Ajouter-une-carte-avec-openstreetmap</guid>
		<dc:date>2020-04-30T09:56:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Ajouter une carte interactive, avec des points cliquables, des itin&#195;&#169;raires, est possible avec le site maps de Google. On peut l&#195;&#169;gitimement, cependant, se positionner contre ce g&#195;&#169;ant monopolistique, qui est devenu incontournable &#195; force de faire appel &#195; notre penchant pour la commodit&#195;&#169;. Ce tutoriel sommaire se base sur un outil alternatif : le projet openstreetmap ou OSM &lt;br class='autobr' /&gt; Ins&#195;&#169;rer une carte dans un site web Ce tutoriel se concentre sur un aspect de Openstreetmap (OSM pour la suite), (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Tutoriels-special-confinement-" rel="directory"&gt;Tutoriels special confinement&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH105/arton617-4a49d.jpg?1736352480' class='spip_logo spip_logo_right' width='150' height='105' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Ajouter une carte interactive, avec des points cliquables, des itin&#195;&#169;raires, est possible avec le site maps de Google. On peut l&#195;&#169;gitimement, cependant, se positionner contre ce g&#195;&#169;ant monopolistique, qui est devenu incontournable &#195; force de faire appel &#195; &lt;a href=&#034;https://www.lemonde.fr/blog/internetactu/2018/03/24/la-tyrannie-de-la-commodite/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;notre penchant pour la commodit&#195;&#169;&lt;/a&gt;. &lt;br class='autobr' /&gt;
Ce tutoriel sommaire se base sur un outil alternatif : le projet &lt;a href=&#034;https://fr.wikipedia.org/wiki/OpenStreetMap&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;openstreetmap ou OSM&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Ins&#195;&#169;rer une carte dans un site web&lt;/h2&gt;
&lt;p&gt;Ce tutoriel se concentre sur un aspect de Openstreetmap (OSM pour la suite), qui est un ensemble d'outils et de services plus large.&lt;br class='autobr' /&gt;
On se bornera ici &#195; donner des adresses et quelques proc&#195;&#169;dures : il existe de nombreux tutoriels tr&#195;&#168;s pr&#195;&#169;cis notamment due les sites d'OSM lui-m&#195;&#170;me et de Umpa, un de ses services de cr&#195;&#169;ation.&lt;br class='autobr' /&gt;
Sachez que OSM est une gigantesque base de donn&#195;&#169;e de donn&#195;&#169;es cartographique bas&#195;&#169; sur le travail collaboratif et open source de millions de personnes, qui ont joint et int&#195;&#169;gr&#195;&#169; des dessins de terrain et donn&#195;&#169;es y aff&#195;&#169;rant : noms des villes, des fleuves, lieux-dit, etc. A ceci s'ajoute des outils pour &#195;&#169;diter et visualiser ces cartes, d'autres outils pour les personnaliser, les utiliser pour des itin&#195;&#169;raires, etc. Un travail colossal qui rivalise et emp&#195;&#170;che Google map de rester en position purement monopolistique, ce qu'il est de facto par la puissance qu'il a gagn&#195;&#169; en int&#195;&#169;grant maps dans un &#034;&#195;&#169;cosyst&#195;&#168;me&#034; encor plus grand de recherche et de vente de donn&#195;&#169;es g&#195;&#169;olocalis&#195;&#169;es de ses utilisateurs.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Utiliser uMap&lt;/h2&gt;
&lt;p&gt;Un service sp&#195;&#169;cifique de OSM est d&#195;&#169;di&#195;&#169; &#195; la personnalisation de carte : &lt;a href=&#034;https://umap.openstreetmap.fr/fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;uMap&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1158 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH337/screenshot_2020-04-30_umap-86af0.png?1736352480' width='500' height='337' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pour cr&#195;&#169;er une carte, on cliquera sur le bouton &#034;Cr&#195;&#169;er une carte&#034; et on acc&#195;&#168;de &#195; un plan et deux s&#195;&#169;ries d'ic&#195;&#180;nes.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1166 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH349/screenshot_2020-04-30---umap-2-7d6c7.jpg?1736352480' width='500' height='349' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A gauche les outils qui seront disponibles pour l'utilisateur de votre carte. A droite les outils de cr&#195;&#169;ation de la carte. Simple.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Choisir le type de carte&lt;/h2&gt;
&lt;p&gt;Une fois ceci fait, on va ouvrir le panneau permettant de choisir le fond de carte. Il d&#195;&#169;termine couleurs, pr&#195;&#169;cision et textures. Une s&#195;&#169;rie de fond cartes sont accessibles dans uMap, gratuits ou payants, &lt;a href=&#034;http://next.openstreetmap.fr/fonds-de-carte/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;voir la documentation &#195; ce propos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1163 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH349/carte-choix-9ea3f.jpg?1736352480' width='500' height='349' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;On peut aussi ouvrir le panneau des param&#195;&#168;tres &#195; droite.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1162 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH349/screenshot_2020-04-30---umap_2_-d1272.jpg?1736352480' width='500' height='349' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;On peut y changer le nom de la carte et sa description, et r&#195;&#169;gler les outils visibles pendant votre travail d'&#195;&#169;dition.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Placer des &#195;&#169;l&#195;&#169;ments sur la carte&lt;/h2&gt;
&lt;p&gt;Une fois l'environnement de travail pr&#195;&#169;cis&#195;&#169;, on peut &#195;&#169;diter la carte en lui rajoutant diff&#195;&#169;rents informations comme des points, des itin&#195;&#169;raires et des zones gr&#195;&#162;ce aux outils d'&#195;&#169;dition en haut &#195; droite de la page.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1167 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH349/record-point-c26c4.jpg?1736352480' width='500' height='349' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;La proc&#195;&#169;dure est &#195;&#169;vidente. On peut personnaliser les ic&#195;&#180;nes avec le menu &#034;Propri&#195;&#169;t&#195;&#169;s de forme&#034;.&lt;br class='autobr' /&gt;
Notez qu'on peut placer des liens dans les descriptifs et les titres, ce qui permet de faire des liens entre le plan et des pages de votre site, par exemple.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1168 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH349/icones-personnaliser-aa795.jpg?1736352480' width='500' height='349' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Les lignes et zones ont la m&#195;&#170;me logique.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Choisir la taille et zoom par d&#195;&#169;faut&lt;/h2&gt;
&lt;p&gt;Il faut bien s&#195; &#187;r dans enfin choisir la portion de carte qui sera affich&#195;&#169;e au d&#195;&#169;marrage pour le visiteur, en terme d'emplacement et de zoom. En utilisant les outils standards de zoom et le cliquer-d&#195;&#169;placer, vous pouvez affiner ces param&#195;&#168;tres. Dans notre cas, la zone du d&#195;&#169;barquement de Normandie.&lt;/p&gt;
&lt;p&gt;A partir de l&#195; , on peut g&#195;&#169;n&#195;&#169;rer le code de la carte, qui est accessible via le bouton des param&#195;&#168;tres, dans les fonctions avanc&#195;&#169;es. On peut personnaliser les boutons qui seront visible dans le menu &#034;Options de l'export d'iframe&#034;&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1165 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH349/code_inclusion1-9528b.jpg?1736352481' width='500' height='349' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1164 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH349/code_inclusion2-d9e69.jpg?1736352481' width='500' height='349' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Le code copi&#195;&#169;/coll&#195;&#169; est un iframe qu'il suffira de copier coller dans une page html classique.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Attention ! Ne perdez pas le lien d'&#195;&#169;dition&lt;/h2&gt;
&lt;p&gt;Pour pouvoir &#195;&#169;diter cette carte plus tard, vous devez en garder le lien secret d'&#195;&#169;dition ! Obtenez le en cliquant sur la cl&#195;&#169; dans le menu en bas &#195; droite. Si vous le perdez, vous ne pourrez plus &#195;&#169;diter cette carte. Ce serait dommage.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1169 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH429/save-285b4.jpg?1736352481' width='500' height='429' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Inclure la carte&lt;/h2&gt;
&lt;p&gt;L'op&#195;&#169;ration est un simple copier-coller. Le tour est jou&#195;&#169;.&lt;/p&gt;
&lt;iframe width=&#034;100%&#034; height=&#034;500px&#034; frameborder=&#034;0&#034; allowfullscreen src=&#034;//umap.openstreetmap.fr/fr/map/debarquer_451705?scaleControl=false&amp;miniMap=false&amp;scrollWheelZoom=true&amp;zoomControl=true&amp;allowEdit=false&amp;moreControl=true&amp;searchControl=true&amp;tilelayersControl=false&amp;embedControl=false&amp;datalayersControl=false&amp;onLoadPanel=undefined&amp;captionBar=false&amp;fullscreenControl=true&amp;editinosmControl=false&#034;&gt;&lt;/iframe&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Site php/bootstrap : ajouter une page de galerie</title>
		<link>http://arts-numeriques.codedrops.net/Site-php-bootstrap-ajouter-une-page-de-galerie</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Site-php-bootstrap-ajouter-une-page-de-galerie</guid>
		<dc:date>2020-04-21T20:36:54Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Suite aux deux premiers didacticiels de ce dossier sp&#195;&#169;cial, ajoutons une page de galerie. &lt;br class='autobr' /&gt; Ajouter une page pour recevoir la galerie En reprenant le tutoriel pr&#195;&#169;c&#195;&#169;dent, on peut facilement ajouter une page, en dupliquant la page index.php pour lui donner le nom de galerie.php. Nous allons ensuite updater le fichier inc-head.php pour y placer le lien vers la page &lt;br class='autobr' /&gt;
Utiliser fancybox Fancybox a d&#195;&#169;j&#195; &#195;&#169;t&#195;&#169; ajout&#195;&#169; au code g&#195;&#169;n&#195;&#169;ral t&#195;&#169;l&#195;&#169;chargeable dans le premier tutoriel. Nous n'avons (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Tutoriels-special-confinement-" rel="directory"&gt;Tutoriels special confinement&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH91/arton616-0887b.jpg?1736352481' class='spip_logo spip_logo_right' width='150' height='91' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Suite aux deux premiers didacticiels de ce dossier sp&#195;&#169;cial, ajoutons une page de galerie.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Ajouter une page pour recevoir la galerie&lt;/h2&gt;
&lt;p&gt;En reprenant le tutoriel pr&#195;&#169;c&#195;&#169;dent, on peut facilement ajouter une page, en dupliquant la page index.php pour lui donner le nom de galerie.php. &lt;br class='autobr' /&gt;
Nous allons ensuite updater le fichier inc-head.php pour y placer le lien vers la page&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Utiliser fancybox&lt;/h2&gt;
&lt;p&gt;Fancybox a d&#195;&#169;j&#195; &#195;&#169;t&#195;&#169; ajout&#195;&#169; au code g&#195;&#169;n&#195;&#169;ral t&#195;&#169;l&#195;&#169;chargeable dans le premier tutoriel. Nous n'avons donc plus qu'&#195; nous occuper de placer le code html et les images pour faire fonctionner notre galerie.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Batcher les images&lt;/h2&gt;
&lt;p&gt;Lorsqu'on produit une galerie, on va &#195; priori proposer au visiteur des images en petit format - des vignettes - qui feront apparaitre des images en grand format - l'image originale - au milieu de l'&#195;&#169;cran gr&#195;&#162;ce &#195; Fancybox. Nous avons donc besoin de ces deux images.&lt;br class='autobr' /&gt;
Les vignettes sont g&#195;&#169;n&#195;&#169;ralement pr&#195;&#169;par&#195;&#169;es &#195; la m&#195;&#170;me taille en largeur et hauteur pour obtenir un damier d'images r&#195;&#169;gulier. C'est une op&#195;&#169;ration qui peut &#195;&#170;tre fastidieuse si on pr&#195;&#169;pare les images dans photoshop. On utilisera plut&#195;&#180;t un logiciel d'automatisation, pour faire un &#034;traitement par lot&#034; ou &lt;i&gt;batch&lt;/i&gt;.&lt;br class='autobr' /&gt;
Sur mac, on peut employer &lt;a href=&#034;https://www.johnwordsworth.com/projects/macos-batch-image-resizer/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;batch-image-resizer&lt;/a&gt;&lt;br class='autobr' /&gt;
Sur PC, par exemple &lt;a href=&#034;https://www.bricelam.net/ImageResizer/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Image resizer&lt;/a&gt;&lt;br class='autobr' /&gt;
Tous les deux sont gratuits et safe.&lt;/p&gt;
&lt;p&gt;Dans les deux cas, on importe les images dans le logiciel (une par une ou en dossier) puis on sp&#195;&#169;cifie une taille et une qualit&#195;&#169; de sortie avant de laisser le logiciel proc&#195;&#169;der au traitement automatique.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1157 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH271/batch-6345c.jpg?1736352481' width='500' height='271' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;La proc&#195;&#169;dure est l&#195;&#169;g&#195;&#168;rement diff&#195;&#169;rente pour chaque logiciel.&lt;br class='autobr' /&gt;
A la fin, nous avons un dossier contenant des images en grand format (faite attention &#195; ce qu'elle ne d&#195;&#169;passent pas 1200 &#195; 1600 pixels, pour des raisons d'optimisation) et des vignettes de ces images de petite taille (ici 500 pixels de large)&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Cr&#195;&#169;er le code html&lt;/h2&gt;
&lt;p&gt;Une fois ces images dispos&#195;&#169;es dans un sous-dossier du site (dans notre cas, un dossier images-galerie), on peut proc&#195;&#169;der au code, en utilisant le syst&#195;&#168;me de colonne de bootstrap.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // inclure le header include(&#034;includes/inc-header.php&#034;); ?&gt; &lt;section id=&#034;main&#034; class=&#034;container&#034;&gt; &lt;img class=&#034;img-fluid&#034; src=&#034;images/Ron-Mueck-Mask-II.png&#034; alt=&#034;Un gros visage&#034;&gt; &lt;header class=&#034;text-center my-5&#034;&gt; &lt;h2&gt;Galerie&lt;/h2&gt; &lt;div class=&#034;small&#034;&gt;Quelques images&lt;/div&gt; &lt;/header&gt; &lt;div class=&#034;row&#034;&gt; &lt;!-- ici une premi&#195;&#168;re colonne, les suivants suivent la m&#195;&#170;me logique --&gt; &lt;div class=&#034;col-12 col-sm-6 col-md-4 mb-4&#034;&gt; &lt;a data-fancybox=&#034;magalerie&#034; href=&#034;images-galerie/01.jpg&#034; &gt; &lt;img src=&#034;images-galerie/01-small.jpg&#034;&gt; &lt;h4 class=&#034;mt-2&#034;&gt;Titre &#195;&#169;ventuel&lt;/h4&gt; &lt;/a&gt; &lt;/div&gt; &lt;!-- placer ici les colonnes suivantes --&gt; &lt;/div&gt; &lt;/section&gt; &lt;?php include(&#034;includes/inc-footer.php&#034;); ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le code suit la logique suivant : un lien avec l'attribut href contenant l'adresse de l'image en grand format, auquel on ajoute l'attribut data-fancybox, qui se charge du reste.&lt;/p&gt;
&lt;p&gt;Pour ce qui est des colonnes, consultez &lt;a href=&#034;http://arts-numeriques.codedrops.net/Bootstrap-le-systeme-de-grille&#034;&gt;le tutoriel qui en parle sur ce site&lt;/a&gt; ou la &lt;a href=&#034;https://getbootstrap.com/docs/4.4/layout/grid/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation de bootstrap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1156 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH303/galerie-4bc03.jpg?1736352481' width='500' height='303' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Simple.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Site php/bootstrap : ajouter une page</title>
		<link>http://arts-numeriques.codedrops.net/Site-php-bootstrap-ajouter-une-page</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Site-php-bootstrap-ajouter-une-page</guid>
		<dc:date>2020-04-01T16:34:04Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Ajouter une page &#195; la machinerie d&#195;&#169;j&#195; en place est facile. &lt;br class='autobr' /&gt; 1) cr&#195;&#169;er le fichier Avec Brackets (ou tout autre logiciel de code), cr&#195;&#169;ez un fichier &#195; la racine du dossier de travail. Retenez bien son nom, vous allez en avoir besoin tout de suite. Il doit se terminer par &#034;.php&#034;, c'est important. Le nom du fichier est libre, mais appliquez les consignes de s&#195;&#169;curit&#195;&#169; : pas d'espace ni de caract&#195;&#168;res sp&#195;&#169;ciaux, &#195;&#169;ventuellement des tirets et des underscores. Je nommerai le mien &#034;contact.php&#034;. (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Tutoriels-special-confinement-" rel="directory"&gt;Tutoriels special confinement&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH104/arton610-969bf.png?1736352482' class='spip_logo spip_logo_right' width='150' height='104' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Ajouter une page &#195; la machinerie d&#195;&#169;j&#195; en place est facile.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;1) cr&#195;&#169;er le fichier&lt;/h2&gt;
&lt;p&gt;Avec Brackets (ou tout autre logiciel de code), cr&#195;&#169;ez un fichier &#195; la racine du dossier de travail. Retenez bien son nom, vous allez en avoir besoin tout de suite. Il doit se terminer par &#034;.php&#034;, c'est important.&lt;br class='autobr' /&gt;
Le nom du fichier est libre, mais appliquez les consignes de s&#195;&#169;curit&#195;&#169; : pas d'espace ni de caract&#195;&#168;res sp&#195;&#169;ciaux, &#195;&#169;ventuellement des tirets et des underscores.&lt;br class='autobr' /&gt;
Je nommerai le mien &#034;contact.php&#034;.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1145 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH97/ajouter-1-e656a.jpg?1736352482' width='500' height='97' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;2) Placer les codes d'inclusion&lt;/h2&gt;
&lt;p&gt;Nous allons maintenant inclure le fichire inc-header.php et inc-footer.php, comme indiqu&#195;&#169; dans le tutoriel pr&#195;&#169;c&#195;&#169;dent.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // inclure le header include(&#034;includes/inc-header.php&#034;); ?&gt; Ici vient le contenu de la page &lt;?php // inclure le footer include(&#034;includes/inc-footer.php&#034;); ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;3) Placer un peu de contenu&lt;/h2&gt;
&lt;p&gt;Le contenu de cette page est du html standard, mais nous disposons du framework bootstrap pour gagner du temps en prototypage. Ici un simple exemple de header, suivie d'une grille de 3 colonnes ;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // inclure le header include(&#034;includes/inc-header.php&#034;); ?&gt; &lt;section id=&#034;main&#034; class=&#034;container&#034;&gt; &lt;header class=&#034;text-center my-5&#034;&gt; &lt;h2&gt;Un titre de page&lt;/h2&gt; &lt;div class=&#034;small&#034;&gt;Un sous-titre&lt;/div&gt; &lt;/header&gt; &lt;div class=&#034;row&#034;&gt; &lt;article class=&#034;col-12 col-sm-6 col-md-4&#034;&gt; &lt;h3&gt;Une colonne&lt;/h3&gt; &lt;div class=&#034;small&#034;&gt; Et du contenu &lt;/div&gt; &lt;/article&gt; &lt;article class=&#034;col-12 col-sm-6 col-md-4&#034;&gt; &lt;h3&gt;Une colonne&lt;/h3&gt; &lt;div class=&#034;small&#034;&gt; Et du contenu &lt;/div&gt; &lt;/article&gt; &lt;article class=&#034;col-12 col-sm-6 col-md-4&gt; &lt;h3&gt;Une colonne&lt;/h3&gt; &lt;div class=&#034;small&#034;&gt; Et du contenu &lt;/div&gt; &lt;/article&gt; &lt;/div&gt; &lt;/section&gt; &lt;?php // inclure le footer include(&#034;includes/inc-footer.php&#034;); ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#195;&#8225;a donnera &#195;&#167;a :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1146 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH174/screenshot_2020-04-01_bienvenue_1_-276e2.png?1736352482' width='500' height='174' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;4) Updater le menu&lt;/h2&gt;
&lt;p&gt;Il est temps de lier le menu &#195; cette page, en &#195;&#169;ditant le fichier inc-header.php qui se trouve dans le dossier &#034;includes&#034; :&lt;/p&gt;
&lt;p&gt;Rep&#195;&#169;rez dans le code l'&#195;&#169;l&#195;&#169;ment ul dont la classe est &#034;navbar-nav&#034; et ajoutez un nouvel &#195;&#169;l&#195;&#169;ment &#034;li&#034; comme ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;ul class=&#034;navbar-nav mr-auto&#034;&gt; &lt;li class=&#034;nav-item active&#034;&gt; &lt;a class=&#034;nav-link&#034; href=&#034;./&#034;&gt;Home&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;nav-item&#034;&gt; &lt;a class=&#034;nav-link&#034; href=&#034;contact.php&#034;&gt;Contact&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enregistrez et sauvez, c'est fait. Comme le fichier est le m&#195;&#170;me pour toute les pages, cette op&#195;&#169;ration ne se fait qu'une fois.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1147 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH347/screenshot_2020-04-01_bienvenue_2_-66348.png?1736352482' width='500' height='347' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Site php/bootstrap, base de travail</title>
		<link>http://arts-numeriques.codedrops.net/Site-php-bootstrap-base-de-travail</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Site-php-bootstrap-base-de-travail</guid>
		<dc:date>2020-04-01T16:08:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;L'enjeu de ce tutoriel est de mettre en place un site utilisant quasiment toutes les technologies vues en cours : html et css bien s&#195; &#187;r, mais aussi les fontes import&#195;&#169;es, javascript, bootstrap, et enfin php. On ajoute quelques bricoles, comme une favicon et des balises m&#195;&#169;ta, et on aura un site conforme, aux standards actuels. &lt;br class='autobr' /&gt; 1) Pr&#195;&#169;parer les fichiers de base html/css/javascript Pour d&#195;&#169;marrer ce projet il faut importer dans le dossier de travail tous les fichiers n&#195;&#169;cessaires la (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Tutoriels-special-confinement-" rel="directory"&gt;Tutoriels special confinement&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH99/arton608-fd588.png?1736352482' class='spip_logo spip_logo_right' width='150' height='99' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;L'enjeu de ce tutoriel est de mettre en place un site utilisant quasiment toutes les technologies vues en cours : html et css bien s&#195; &#187;r, mais aussi les fontes import&#195;&#169;es, javascript, bootstrap, et enfin php. On ajoute quelques bricoles, comme une favicon et des balises m&#195;&#169;ta, et on aura un site conforme, aux standards actuels.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;1) Pr&#195;&#169;parer les fichiers de base html/css/javascript&lt;/h2&gt;
&lt;p&gt;Pour d&#195;&#169;marrer ce projet il faut importer dans le dossier de travail tous les fichiers n&#195;&#169;cessaires
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; la &lt;a href=&#034;https://jquery.com/download/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;derni&#195;&#168;re version de jquery&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; un typo pour le net &lt;a href=&#034;https://www.fontsquirrel.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;via Fontsquirrel&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les &lt;a href=&#034;https://getbootstrap.com/docs/4.4/getting-started/download/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;fichiers de base css et javascript de bootstrap&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; le dossier de &lt;a href=&#034;https://fontawesome.com/download&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Fontawesome&lt;/a&gt; (free for web)
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les &lt;a href=&#034;https://fancyapps.com/fancybox/3/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;fichiers de fancybox&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;2) Structurer le dossier du projet&lt;/h2&gt;
&lt;p&gt;Une fois ces fichiers ramen&#195;&#169;s, on va les placer dans des dossiers aux noms s&#195;&#169;mantiques, pour facilement se rep&#195;&#169;rer. &lt;br class='autobr' /&gt;
Je propose :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; un dossier css-js pour jquery, nootstrap, fancybox et nos propres scripts
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; un dossier images pour les images
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; un dossier includes pour les fichiers php &#195; inclure&lt;br class='autobr' /&gt;
Les fichiers des diverses pages du site, en php, seront &#195; la racine du site.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;3) Contenu du dossier CSS-JS&lt;/h2&gt;
&lt;p&gt;Tout ce qui est javascript et css viendront dans ce dossier comme son nom l'indique. Soit :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Le dossier de production de bootstrap, tel que t&#195;&#169;l&#195;&#169;charg&#195;&#169; avec ses sous-dossiers css et js
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; le dossier de fancybox. &lt;strong&gt;Attention&lt;/strong&gt;, dans le dossier t&#195;&#169;l&#195;&#169;charg&#195;&#169;, nous avons besoin &lt;strong&gt;uniquement du dossier &#034;dist&#034;&lt;/strong&gt; que nous pla&#195;&#167;ons dans le dossier css-js et renommons &lt;strong&gt;&#034;fancybox&#034;&lt;/strong&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Le dossier de fontawesome tel que t&#195;&#169;l&#195;&#169;charg&#195;&#169;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; un dossier &#034;font&#034; dans lequel nous pla&#195;&#167;ons les fichiers woff, woff2 et le fichier stylesheet.css provenant du &lt;a href=&#034;https://www.fontsquirrel.com/tools/webfont-generator&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;g&#195;&#169;n&#195;&#169;rateur de Fontsquirrel&lt;/a&gt;.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; le dernier fichier de jquery (ici la 3.4.1)
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; un fichier &#034;main.css&#034; pour nos propres css
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; un fichier &#034;main.js&#034; pour nos propres scripts&lt;/p&gt;
&lt;p&gt;&#195;&#8225;a donne &#195;&#167;a :&lt;br class='autobr' /&gt;
&lt;span class='spip_document_1142 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH383/css-js-2-ae979.jpg?1736352482' width='500' height='383' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Notre page de base : index.php&lt;/h2&gt;
&lt;p&gt;Comme &#195;&#169;voqu&#195;&#169;, une page avec du code php DOIT avoir .php pour extension, et pas html. C'est ce qui permet au serveur de savoir qu'il va y trouver un code a ex&#195;&#169;cuter.&lt;/p&gt;
&lt;p&gt;Cette page index.php contient trois fonctions &#034;&lt;a href=&#034;https://www.php.net/manual/fr/function.include.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;include()&lt;/a&gt;&#034;, une fonction php qui comme son nom l'indique, inclus le code provenant d'un autre page.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php include(&#034;includes/inc-header.php&#034;); ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette ligne de code va donc chercher dans le dossier &#034;includes&#034; un fichier &#034;inc-header.php&#034;, et copie le code que le fichier contient &#195; l'endroit m&#195;&#170;me o&#195;&#185; la fonction est appel&#195;&#169;e.&lt;/p&gt;
&lt;p&gt;La page index.php charge aussi deux autres pages, &lt;strong&gt;inc-pre-footer.php&lt;/strong&gt; et &lt;strong&gt;inc-footer.php&lt;/strong&gt;, suivant la m&#195;&#170;me logique.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Pourquoi des fichiers inclus en php ?&lt;/h2&gt;
&lt;p&gt;Le fichier inc-header.php contient le d&#195;&#169;but de la page, c'est &#195; dire la balise head, et le d&#195;&#169;but du body, jusqu'&#195; la fin de la navigation.&lt;br class='autobr' /&gt;
Le fichier inc-footer.php contient la fin de la page : la balise footer puis la fermeture des tags body et html&lt;br class='autobr' /&gt;
S&#195;&#169;parer ces deux parties de pages html a un but : pouvoir r&#195;&#169;employer ces deux portions de page pour toute nouvelle page que nous allons cr&#195;&#169;er dans le future ; On va ainsi &#195;&#169;crire une seule fois ce code, et l'inclure dans chaque page. &lt;br class='autobr' /&gt;
Le but est d'&#195;&#169;conomiser du temps d'&#195;&#169;criture mais aussi et surtout, de r&#195;&#169;duire les sources d'erreur puisque que ce code est &#195;&#169;crit une seule fois pour toutes les pages o&#195;&#185; il est inclus.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1143 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH413/include-8d2fb.jpg?1736352483' width='500' height='413' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Allez, le code tout fait !&lt;/h2&gt;
&lt;p&gt;Pour ceux qui ont tout compris mais ne veulent pas faire le boulot de collecte et de codage du head, voici le dossier zipp&#195;&#169; de tout ceci :&lt;/p&gt;
&lt;div class='spip_document_1144 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;88&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='http://arts-numeriques.codedrops.net/IMG/zip/my_php_website.zip' class=&#034; spip_doc_lien&#034; title='Zip - 7.3 Mio' type=&#034;application/zip&#034;&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L64xH64/zip-f045b.svg?1757706167' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-1144 '&gt;&lt;strong&gt;Le dossier complet
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-1144 '&gt;Avec tous ses imports, et la typo Librebaskerville et Leaguespartan
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Charger une image de fond al&#195;&#169;atoire avec glob() et rand()</title>
		<link>http://arts-numeriques.codedrops.net/Charger-une-image-de-fond-aleatoire-avec-glob-et-random</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Charger-une-image-de-fond-aleatoire-avec-glob-et-random</guid>
		<dc:date>2020-02-26T10:03:22Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Ce script permet d'afficher une image de fond choisie al&#195;&#169;atoirement dans un r&#195;&#169;pertoire et l'affiche en fond d'un bloc. &lt;br class='autobr' /&gt; Pour r&#195;&#169;aliser ce petit code, nous avons besoin d'un dossier contenant des images, plac&#195;&#169; dans le site. Dans cet exemple, il est nomm&#195;&#169; &#034;backgrounds&#034;, &#195; l'int&#195;&#169;rieur d'un dossier &#034;images&#034;. &lt;br class='autobr' /&gt;
R&#195;&#169;cup&#195;&#169;rer la liste des images disponibles Pour disposer de la liste des images, on utilise la fonction glob : $liste=glob(&#034;images/backgrounds/*.gif,png,jpg,jpeg&#034;, GLOB_BRACE) ; (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH86/arton582-6dacd.jpg?1736352483' class='spip_logo spip_logo_right' width='150' height='86' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Ce script permet d'afficher une image de fond choisie al&#195;&#169;atoirement dans un r&#195;&#169;pertoire et l'affiche en fond d'un bloc.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Pour r&#195;&#169;aliser ce petit code, nous avons besoin d'un dossier contenant des images, plac&#195;&#169; dans le site. &lt;br class='autobr' /&gt;
Dans cet exemple, il est nomm&#195;&#169; &#034;backgrounds&#034;, &#195; l'int&#195;&#169;rieur d'un dossier &#034;images&#034;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;R&#195;&#169;cup&#195;&#169;rer la liste des images disponibles&lt;/h2&gt;
&lt;p&gt;Pour disposer de la liste des images, on utilise la fonction glob :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$liste=glob(&#034;images/backgrounds/*.{gif,png,jpg,jpeg}&#034;, GLOB_BRACE);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;cette fonction cr&#195;&#169;e une variable tableau contenant la liste des &#195;&#169;l&#195;&#169;ments correspondants &#195; la d&#195;&#169;finition donn&#195;&#169;e dans la premi&#195;&#168;re partie des arguments. l'&#195;&#169;toile (*) veut dire &#034;n'importe quel caract&#195;&#168;re en n'importe quel nombre&#034;. Les accolades permettent de pr&#195;&#169;voir plusieurs variantes, si on a ajout&#195;&#169; l'argument GLOB_BRACE dans la fonction.&lt;br class='autobr' /&gt;
La d&#195;&#169;finition que nous donnons &#195; glob est donc : &#034;les fichiers terminant par l'extension .gif ou .png ou .jpg ou .jpeg se trouvant dans le dossier backgrounds situ&#195;&#169; dans le dossier images&#034;.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1003 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH287/dossiers-37eb2.jpg?1736352483' width='500' height='287' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Choisir au hasard un fichier&lt;/h2&gt;
&lt;p&gt;Pour tirer au sort une des images, on demande &#195; la fonction php rand de faire le travail&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$alea=rand(0,count($liste)-1);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On stocke donc dans la variable $alea un chiffre entre z&#195;&#169;ro et le nombre d'&#195;&#169;l&#195;&#169;ments dans la liste moins 1. Pourquoi ? Parce que dans une liste de 6 &#195;&#169;l&#195;&#169;ments, le premier est l'&#195;&#169;l&#195;&#169;ment 0, le dernier est l'&#195;&#169;l&#195;&#169;ment 5. Il nous faut donc tirer au hasard un chiffre entre 0 et 5.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Ecrire le nom de l'image au bon endroit&lt;/h2&gt;
&lt;p&gt;Il nous reste a &#195;&#169;crire le tag avec une balise style &#195; l'int&#195;&#169;rieur. C'est echo() qui s'en charge :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;echo &#034;&lt;section id='big-background' style='background-image:url(&#034;.$liste[$alea].&#034;)'&gt;&lt;/section&gt;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Le code complet avec sa CSS&lt;/h2&gt;
&lt;p&gt;Le code PHP&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php
$liste=glob(&#034;images/backgrounds/*.{gif,png,jpg,jpeg}&#034;, GLOB_BRACE);
$alea=rand(0,count($liste)-1);
echo &#034;&lt;section id='big-background' style='background-image:url(&#034;.$liste[$alea].&#034;)'&gt;&lt;/section&gt;&#034;;
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;CSS&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#big-background { height:80vh; background-color:#ddd; background-repeat: no-repeat; background-position: center center; background-size: cover;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un formulaire PHP pour g&#195;&#169;n&#195;&#169;rer les vignettes d'une s&#195;&#169;rie d'images</title>
		<link>http://arts-numeriques.codedrops.net/Un-formulaire-pour-generer-les-vignettes-d-une-serie-d-images</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Un-formulaire-pour-generer-les-vignettes-d-une-serie-d-images</guid>
		<dc:date>2017-09-24T13:30:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Ce script est d&#195;&#169;riv&#195;&#169; de la fonction de cr&#195;&#169;ation de vignettes. Associ&#195;&#169; &#195; un formulaire, il permet de g&#195;&#169;n&#195;&#169;rer des vignettes au format d&#195;&#169;sir&#195;&#169; pour un ensemble d'images plac&#195;&#169;e dans un dossier. &lt;br class='autobr' /&gt; Comment utiliser ce script &lt;br class='autobr' /&gt;
Le script doit &#195;&#170;tre install&#195;&#169; sur un serveur ex&#195;&#169;cutant le code php, que ce soit un serveur en ligne ou un serveur local comme MAMP. Il a plut&#195;&#180;t &#195;&#169;t&#195;&#169; imagin&#195;&#169; pour un serveur local, raison pour laquelle l'upload d'image par paquet ou via un ficher zip n'a pas (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH82/arton465-aa836.jpg?1736352483' class='spip_logo spip_logo_right' width='150' height='82' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Ce script est d&#195;&#169;riv&#195;&#169; de la &lt;a href='http://arts-numeriques.codedrops.net/Une-fonction-pour-creeer' class=&#034;spip_in&#034;&gt;fonction de cr&#195;&#169;ation de vignettes&lt;/a&gt;. Associ&#195;&#169; &#195; un formulaire, il permet de g&#195;&#169;n&#195;&#169;rer des vignettes au format d&#195;&#169;sir&#195;&#169; pour un ensemble d'images plac&#195;&#169;e dans un dossier.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Comment utiliser ce script&lt;/h2&gt;
&lt;p&gt;Le script doit &#195;&#170;tre install&#195;&#169; sur un serveur ex&#195;&#169;cutant le code php, que ce soit un serveur en ligne ou un serveur local comme MAMP. Il a plut&#195;&#180;t &#195;&#169;t&#195;&#169; imagin&#195;&#169; pour un serveur local, raison pour laquelle l'upload d'image par paquet ou via un ficher zip n'a pas &#195;&#169;t&#195;&#169; &#195;&#169;crit.&lt;/p&gt;
&lt;p&gt;Le script se trouve dans un dossier qui comprend aussi un dossier &#034;upload&#034; dans lequel on place les images d'origine. En chargeant la page index &#195; travers un navigateur, on acc&#195;&#168;de &#195; un formulaire qui permet de r&#195;&#169;gler la taille de l'image et choisir un option de crop : est ce que les vignettes doivent occuper enti&#195;&#168;rement la taille d&#195;&#169;finie ou rentrer dans le cadre d&#195;&#169;fini par la taille ?&lt;br class='autobr' /&gt;
On peut aussi choisir d'agrandir les images trop petites, m&#195;&#170;me si ce n'est pas recommand&#195;&#169;.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1222 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH274/crop_php-f288d.jpg?1736352483' width='500' height='274' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;On valide ensuite le formulaire. Un dossier est cr&#195;&#169;&#195;&#169; automatiquement dans le dossier et les images y sont d&#195;&#169;pos&#195;&#169;es apr&#195;&#168;s l'ex&#195;&#169;cution du script.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Attention&lt;/h2&gt;
&lt;p&gt;Ce script est offert &#034;as is&#034;, c'est &#195; dire qu'il fonctionne sur la plupart des serveurs contemporains, n'est pas garanti sur tous les serveurs et dans toutes les situations.&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; on fera notamment attention &#195; ne pas placer trop d'images, car le temps accord&#195;&#169; au script d&#195;&#169;pend de la puissance du serveur et de sa configuration.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; on fera ensuite attention au format des images d'origine : des images trop grandes 4 &#195; 5000 pixels de large, par exemple, peuvent planter le script, de nouveau en fonction de la puissance et des r&#195;&#169;glages du serveur.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les gif anim&#195;&#169;s seront &#034;aplatis&#034;, c'est &#195; dire que seule la premi&#195;&#168;re image sera conserv&#195;&#169;e...&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/batch_resizer_php.zip" length="372686" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Une fonction pour cr&#195;&#169;&#195;&#169;er automatiquement des vignettes d'images &#195; taille choisie</title>
		<link>http://arts-numeriques.codedrops.net/Une-fonction-pour-creeer</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Une-fonction-pour-creeer</guid>
		<dc:date>2015-09-27T10:32:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Ce script permet de cr&#195;&#169;er et de stocker automatiquement des images &#195; taille choise &#195; partir d'une image originale. L'usage principal est de pouvoir g&#195;&#169;n&#195;&#169;rer des vignettes pour une galerie de type &#034;Fancybox&#034;, mais d'autres usages sont possibles, comme la r&#195;&#169;duction d'une image trop grande pour son affichage optimis&#195;&#169; dans une page. &lt;br class='autobr' /&gt; Le script contient une fonction qui est appel&#195;&#169;e en sp&#195;&#169;cifiant l'adresse de l'image originale la taille en largeur et hauteur de l'image finale d&#195;&#169;sir&#195;&#169;e le (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH117/arton428-5e520.jpg?1736352483' class='spip_logo spip_logo_right' width='150' height='117' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Ce script permet de cr&#195;&#169;er et de stocker automatiquement des images &#195; taille choise &#195; partir d'une image originale. L'usage principal est de pouvoir g&#195;&#169;n&#195;&#169;rer des vignettes pour une galerie de type &#034;Fancybox&#034;, mais d'autres usages sont possibles, comme la r&#195;&#169;duction d'une image trop grande pour son affichage optimis&#195;&#169; dans une page.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le script contient une fonction qui est appel&#195;&#169;e en sp&#195;&#169;cifiant &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; l'adresse de l'image originale
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; la taille en largeur et hauteur de l'image finale d&#195;&#169;sir&#195;&#169;e
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; le type de proc&#195;&#169;dure : sans recadrage (l'image reste compl&#195;&#168;te, et donc juste r&#195;&#169;duite) ou avec recadrage (l'mage finale sera exactement au format demand&#195;&#169;, mais une partie de l'image originale sera perdue dans la version fabriqu&#195;&#169;e)&lt;/p&gt;
&lt;p&gt;La fonction renvoie l'adresse de l'image calcul&#195;&#169;e sauf si l'image demand&#195;&#169;e est plus grande que l'image originale (dans ce cas, l'adresse de l'original est renvoy&#195;&#169;e).&lt;/p&gt;
&lt;p&gt;La fonction stocke cr&#195;&#169;e un dossier dont le nom par d&#195;&#169;faut est &#034;vignettes&#034;, si ce dossier n'existe pas encore. Elle va ensuite v&#195;&#169;rifier qu'il n'y a pas dans ce dossier une image qui correspond &#195; la demande, qui aurait &#195;&#169;t&#195;&#169; fabriqu&#195;&#169;e auparavant. Ceci permet de ne pas recr&#195;&#169;er les images &#195; chaque chargement. Si c'est le cas, elle renvoie simplement le nom de cette image. Si l'image correspondante n'existe pas encore, elle cr&#195;&#169;e cette image en ajoutant au nom original les infos de taille, de telle mani&#195;&#168;re &#195; poss&#195;&#169;der un nom unique, puis la stocke dans le dossier.&lt;/p&gt;
&lt;p&gt;La fonction s'utilise comme suit :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;echo &#034;&lt;img src='&#034;.donne_lien(&#034;image.jpg&#034;,600,600,true).&#034;'&gt;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le r&#195;&#169;sultat est l'adresse &#034;vignettes/image.jpg_600_600_c.jpg&#034;.&lt;/p&gt;
&lt;p&gt;Voici les deux images qui ont servi de test :&lt;br class='manualbr' /&gt;L'original (1500 X 1057 px)&lt;br class='autobr' /&gt;
&lt;span class='spip_document_667 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH352/07-1b435.jpg?1736352483' width='500' height='352' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Le r&#195;&#169;sultat (600 X 600 px)&lt;br class='autobr' /&gt;
&lt;span class='spip_document_668 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH500/07.jpg_600_600_c-bee60.jpg?1736352483' width='500' height='500' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Le script est compos&#195;&#169; de trois fonctions :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; La fonction principale, d&#195;&#169;crite plus haut
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; la fonction de traitement d'image &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; une petite fonction faite pour isoler le nom du fichier dans un url (exemple : &#034;image/monimage.gif&#034; devient &#034;monimage.gif&#034;)&lt;/p&gt;
&lt;p&gt;Le code est comment&#195;&#169; pour plus de clart&#195;&#169;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // donne lien : re&#195;&#167;oit une adresse de fichier et une taille, verifie si une vignette a cette taille existe et produit une version de cette image. le cas &#195;&#169;chaant renvoie cette adresse // exemple : echo donne_lien(&#034;image.jpg&#034;,600,600,true); // &#034;image.jpg&#034; : le lien relatif de l'image // 600,600 : taille en largeur et hauteur de l'image // true : l'image fera cette taille, obtenue en coupant dans l'image mais en exploitant le maximum de sa surface // false : coupe en gardant les proportions de l'image mais en exploitant au mieux la taille donn&#195;&#169;e. function donne_lien($file,$l_vignette=600,$h_vignette=600,$crop=true){ // creer le dossier pour les images petites $dossier_vignettes=&#034;vignettes/&#034;; if(!is_dir($dossier_vignettes)){ mkdir($dossier_vignettes, 0777, true); } if(!is_file($file)){ $file=&#034;img-default/default.jpg&#034;; } $ext_image=array('jpg','png','gif'); $ext=strtolower(substr(strrchr($file,&#034;.&#034;),1)); if($crop){ $c=&#034;c&#034;; } else { $c=&#034;p&#034;; } $add=&#034;_&#034;.$l_vignette.&#034;_&#034;.$h_vignette.&#034;_&#034;.$c; $nom=fichier_seul($file); $full_nom=$dossier_vignettes.$nom.$add.&#034;.&#034;.$ext; // - - - image : traitement des icones if(in_array($ext,$ext_image)){ // charger l'image brute // v&#195;&#169;rifier que l'image existe // sinon la cr&#195;&#169;er if (!file_exists($full_nom)) { if(image_resize($file, $full_nom, $l_vignette, $h_vignette, $crop)){ return $full_nom.&#034;?&#034;.filectime($full_nom); } else { return $file; } } else { return $full_nom.&#034;?&#034;.filectime($full_nom); } } else { return &#034;img_sys/error.jpg&#034;; } } // a partir d'un lien relatif, renvoie le nom du fichier seul // exemple : &#034;image/monimage.gif&#034; devient &#034;monimage.gif&#034; function fichier_seul($file){ $file = preg_replace('/.*\//i', '', $file); return $file; } // image_resize : cr&#195;&#169;e une image au format demand&#195;&#169; avec crop ou proportion // $src : nom de l'image (lien relatif) // $dst : nom de l'image cr&#195;&#169;&#195;&#169;e (lein relatif) // $width : la largeur demand&#195;&#169;e // $height : la hauteur demand&#195;&#169;e // $crop : provoque le recadrage (1) ou la r&#195;&#169;duction en proportion (0) function image_resize($src, $dst, $width=500, $height=400, $crop=false){ ini_set('memory_limit', '256M'); if(!list($w, $h) = getimagesize($src)) { echo &#034;image does not exists&#034;; return false; } $type = strtolower(substr(strrchr($src,&#034;.&#034;),1)); if($type == 'jpeg') $type = 'jpg'; switch($type){ case 'gif': $img = imagecreatefromgif($src); break; case 'jpg': $img = imagecreatefromjpeg($src); break; case 'png': $img = imagecreatefrompng($src); break; default : echo &#034;image does not exists&#034;; return false; } // resize if($crop){ if($w &lt; $width or $h &lt; $height){ return false; }; $ratio = max($width/$w, $height/$h); $y= ($h - $height / $ratio) /2; $x = ($w - $width / $ratio) / 2; $h = $height / $ratio; $w = $width / $ratio; } else { if($w &lt; $width and $h &lt; $height) { return false; } $ratio = min($width/$w, $height/$h); $width = $w * $ratio; $height = $h * $ratio; $x = 0; $y = 0; } $new = imagecreatetruecolor($width, $height); // preserve transparency if($type == &#034;gif&#034; or $type == &#034;png&#034;){ imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127)); imagealphablending($new, false); imagesavealpha($new, true); } imagecopyresampled($new, $img, 0, 0, $x, $y, $width, $height, $w, $h); switch($type){ case 'gif': imagegif($new, $dst); break; case 'jpg': imagejpeg($new, $dst); break; case 'png': imagepng($new, $dst); break; } return true; } ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/image_manipulation_function.zip" length="310580" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>CMS homemade, partie 2</title>
		<link>http://arts-numeriques.codedrops.net/CMS-homemade-partie-2</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/CMS-homemade-partie-2</guid>
		<dc:date>2014-09-28T21:12:22Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Dans cet article, nous allons analyser la requ&#195;&#170;te &#034;Get&#034; pour savoir quel contenu afficher, en quelques lignes seulement. &lt;br class='autobr' /&gt; La requ&#195;&#170;te en GET PHP peut analyser des informations envoy&#195;&#169;es dans une url, apr&#195;&#168;s le signe &#034; ?&#034;. Derri&#195;&#168;re ce signe, php esp&#195;&#168;re trouver deux choses : une cl&#195;&#169; et sa valeur. Par exemple : &lt;br class='autobr' /&gt; ?page=entree &lt;br class='autobr' /&gt;
Ce qui signifie que la cl&#195;&#169; &#034;page&#034; a pour valeur &#034;entree&#034;. Php peut permettre de r&#195;&#169;cup&#195;&#169;rer cette information et de la tester. Il a re&#195;&#167;u cette information qui (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Tutorial-" rel="directory"&gt;Tutorial&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Dans cet article, nous allons analyser la requ&#195;&#170;te &#034;Get&#034; pour savoir quel contenu afficher, en quelques lignes seulement.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;La requ&#195;&#170;te en GET&lt;/h2&gt;
&lt;p&gt;PHP peut analyser des informations envoy&#195;&#169;es dans une url, apr&#195;&#168;s le signe &#034; ?&#034;. Derri&#195;&#168;re ce signe, php esp&#195;&#168;re trouver deux choses : une &lt;strong&gt;cl&#195;&#169;&lt;/strong&gt; et sa &lt;strong&gt;valeur&lt;/strong&gt;. Par exemple :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; ?page=entree&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce qui signifie que la cl&#195;&#169; &#034;page&#034; a pour valeur &#034;entree&#034;. &lt;br class='manualbr' /&gt;Php peut permettre de r&#195;&#169;cup&#195;&#169;rer cette information et de la tester. Il a re&#195;&#167;u cette information qui est stock&#195;&#169;e dans un array qui porte de le nom de $_GET. Pour r&#195;&#169;cup&#195;&#169;rer la valeur associ&#195;&#169;e &#195; la cl&#195;&#169; &#034;page&#034;, demandera donc &#034;$_GET['page']. $_GET est en fait ce qu'on appelle une superglobale, &lt;a href=&#034;http://php.net/manual/fr/reserved.variables.get.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;voir l'information sur le site de php&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voici le code complet :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;if(isset($_GET['page'])){ $page=trim($_GET['page']);
} else { $page=$arbo[0];
}
$contenu_page=lit_dossier($page, 'complet');&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce code demande si un param&#195;&#168;tre a &#195;&#169;t&#195;&#169; envoy&#195;&#169; dans l'url. Si oui, le dossier &#195; charger pour afficher la page sera celui qui est sp&#195;&#169;cifi&#195;&#169;, sinon, c'est le premier dossier de la variable &#034;$arbo&#034; qui sera choisi.&lt;/p&gt;
&lt;p&gt;Le code charge ensuite le contenu choisi avec la fonction &#034;lit_dossier()&#034; que nous avons d&#195;&#169;j&#195; employ&#195;&#169;, sauf que cette fois, il demande le contenu complet. Les pi&#195;&#168;ces jointes &#195;&#169;ventuelles (images et documents) seront donc charg&#195;&#169;s.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Afficher le titre et le texte&lt;/h2&gt;
&lt;p&gt;Il reste maintenant &#195; afficher le titre et le texte du contenu s&#195;&#169;lectionn&#195;&#169;. Il se trouve dans la variable &#034;$contenu_page&#034; que nous venons de charger &#195; l'instant.&lt;/p&gt;
&lt;p&gt;Le titre est dans $contenu_page['titre'], le texte dans $contenu_page['texte']. Pour afficher &#195;&#167;a.&lt;/p&gt;
&lt;p&gt;Le seul cas particulier est l'illustration, qui ne sera pas syst&#195;&#169;matiquement pr&#195;&#169;sent. Pour ne pas avoir de message d'erreur en cas o&#195;&#185; on demande &#195; PHP d'afficher quelque chose qui n'existe pas, on pr&#195;&#169;c&#195;&#168;de le code d'affichage d'une condition, qui dit &#034;si $contenu_page['icone'] existe, alors &#195;&#169;cris-le&#034;.&lt;/p&gt;
&lt;p&gt;On peut donc remplacer la balise &#034;article&#034; de la page index.php par ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;article class='clearfix'&gt; &lt;div class=&#034;colonne demi bloc-illu&#034;&gt; &lt;?php
if(isset($contenu_page['icone'])){ echo &#034;&lt;img src='&#034;.$contenu_page['icone'].&#034;' alt=''&gt;&#034;;
} ?&gt; &lt;/div&gt; &lt;div class=&#034;colonne demi&#034;&gt; &lt;h2&gt;&lt;?php echo $contenu_page['titre']; ?&gt;&lt;/h2&gt; &lt;div class=&#034;texte&#034;&gt; &lt;?php echo $contenu_page['texte']; ?&gt; &lt;/div&gt; &lt;/div&gt; &lt;/article&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Aller plus loin&lt;br class='autobr' /&gt;
Ce CMS est rudimentaire, mais on peut lui ajouter tout de m&#195;&#170;me l'affichage des galeries et des pi&#195;&#168;ces jointes. Consultez le script complet en t&#195;&#169;l&#195;&#169;chargeant &lt;a href='http://arts-numeriques.codedrops.net/IMG/zip/homemade_cms_full.zip' class=&#034;spip_in&#034; type='application/zip'&gt;la version &#034;finale&#034; ici&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/homemade_cms_full.zip" length="2707877" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>CMS homemade, partie 1</title>
		<link>http://arts-numeriques.codedrops.net/CMS-homemade-partie-1</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/CMS-homemade-partie-1</guid>
		<dc:date>2014-09-27T23:08:15Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>&lt;p&gt;Cr&#195;&#169;er un CMS rudimentaire est une bonne occasion de comprendre le comportement de ces moteurs de site.&lt;/p&gt;

-
&lt;a href="http://arts-numeriques.codedrops.net/-Tutorial-" rel="directory"&gt;Tutorial&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Cr&#195;&#169;er un CMS rudimentaire est une bonne occasion de comprendre le comportement des CMS en g&#195;&#169;n&#195;&#169;ral. A partir de quelques scripts, on peut cr&#195;&#169;er une m&#195;&#169;thode simple permettant d'ajouter des contenus sans plus passer par le codage de pages html.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Objectifs du CMS&lt;/h2&gt;
&lt;p&gt;Tout Cms poss&#195;&#168;de sa propre logique et ses objectifs. Comme la plupart des CMS existant, celui-ci poss&#195;&#168;de un but g&#195;&#169;n&#195;&#169;ral&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Afficher des pages en html/css correct
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Pouvoir ajouter facilement images en galerie et des pi&#195;&#168;ces jointes
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &#195;&#352;tre l&#195;&#169;ger et compr&#195;&#169;hensible dans son usage
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Ajouter du contenu doit se faire sans devoir coder
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; La navigation se cr&#195;&#169;e et s&#226;&#8364;&#8482;update automatiquement&lt;/p&gt;
&lt;p&gt;De plus, le n&#195;&#180;tre aura les caract&#195;&#169;ristiques limitatives suivantes :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Pas de base de donn&#195;&#169;es
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Un seul niveau d'arborescence&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Un contenu stock&#195;&#169; sous forme de dossier&lt;/h2&gt;
&lt;p&gt;Dans ce CMS, chaque page est stock&#195;&#169;e dans le site sous la forme d'un dossier, contenant un fichier texte nomm&#195;&#169; &#034;info.txt&#034; qui contient le titre et le texte de la page, une illustration g&#195;&#169;n&#195;&#169;rale de la page nomm&#195;&#169;e &#034;icone.jpg&#034;, des images &#195;&#169;ventuelles qui seront affich&#195;&#169;es sous forme de galerie, puis le reste des pi&#195;&#168;ces jointes, comme des pdf, des zip, etc.&lt;br class='manualbr' /&gt;Le contenu minimal d'un dossier est le fichier texte lui-m&#195;&#170;me.&lt;br class='manualbr' /&gt;Tous les dossiers seront stock&#195;&#169;s dans un dossier g&#195;&#169;n&#195;&#169;ral appel&#195;&#169; &#034;contenus&#034;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Commencer par le graphisme&lt;/h2&gt;
&lt;p&gt;Tout commence par le code html + css (norme HTML5) d'une page type. Dans la plupart des CMS, cette page s'appelle un template. &lt;a href='http://arts-numeriques.codedrops.net/IMG/zip/homemade_cms.zip' class=&#034;spip_in&#034; type='application/zip'&gt;Il peut &#195;&#170;tre t&#195;&#169;l&#195;&#169;charg&#195;&#169; ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le dossier, bas&#195;&#169; sur &lt;a href=&#034;http://www.initializr.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;initializr&lt;/a&gt;, contient ceci :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_638 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH123/dossier-39fee.jpg?1726877211' width='500' height='123' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Un dossier CSS contenant des css de reset et la css &#034;main.css&#034; dans laquelle se trouve le code de base du template.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Une favicon
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Un dossier img, avec l'unique image actuelle
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; La page index.html, qui nous sert de gabarit
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Le dossier JS qui contient jquery et la page &#034;main.js&#034;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; La police libre de droit Montserrat&lt;/p&gt;
&lt;p&gt;Cela donne ceci :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_639 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH374/vue-template-ce50f.jpg?1736352484' width='500' height='374' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installer sur le serveur local&lt;/h2&gt;
&lt;p&gt;Nous allons rapidement transformer ce template en machinerie &#195; afficher des contenus. Pour cela il faut le d&#195;&#169;poser dans le &lt;strong&gt;dossier de travail du serveur local&lt;/strong&gt;, dans notre cas, &lt;a href=&#034;http://www.mamp.info/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Mamp&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une fois d&#195;&#169;pos&#195;&#169;, nous allons transformer le fichier .html en fichier .php pour que le serveur Apache ex&#195;&#169;cute le code que nous y placerons. Il suffit pour cela de renommer. Cette op&#195;&#169;ration ne provoque dans l'imm&#195;&#169;diat aucun changement dans la page.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Ajouter les fonctionnalit&#195;&#169;s PHP&lt;/h2&gt;
&lt;p&gt;Ce didacticiel n'est pas orient&#195;&#169; sur la programmation en php, aussi j'ai cod&#195;&#169; une page pr&#195;&#170;te &#195; l'emploi, de 80 lignes, qui sera le moteur central du CMS. Nous expliquerons son fonctionnement bri&#195;&#168;vement, mais encore une fois ce n'est pas le propos central, je ne rentrerais donc pas dans les d&#195;&#169;tails. Le fichier est court et comment&#195;&#169;, pour les curieux.&lt;br class='manualbr' /&gt;&lt;a href='http://arts-numeriques.codedrops.net/IMG/zip/inc-fonctions-3.zip' class=&#034;spip_in&#034; type='application/zip'&gt;T&#195;&#169;l&#195;&#169;charger le fichier&lt;/a&gt; et placez-le dans le dossier de notre CMS.&lt;/p&gt;
&lt;p&gt;Nous allons pouvoir charger ce fichier au d&#195;&#169;but de la page, pour que les fonctions soient disponibles dans la page en rajoutant en premi&#195;&#168;re ligne du fichier index.php :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;?php include(&#034;inc-fonctions.php&#034;); ?&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La fonction include permet de copier le contenu d'un fichier dans un autre, &#195; l'endroit o&#195;&#185; il est appell&#195;&#169;. Cette op&#195;&#169;ration est donc exactement le m&#195;&#170;me que si on copiait/collait le contenu du fichier inc-fonctions.php &#195; l'int&#195;&#169;rieur du fichier index.php.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;R&#195;&#180;le des fonctions du fichier &#034;inc-fonctions.php&#034;&lt;/h2&gt;
&lt;p&gt;Le fichier contient deux fonctions. &lt;br class='manualbr' /&gt;Une fonction est un bloc de code qui est ex&#195;&#169;cut&#195;&#169; chaque fois qu'on l'appelle. Comme un majordome &#195; qui on demande &#034;James, un caf&#195;&#169; s'il vous plait&#034; et qui &#195; chaque fois produit l'ensemble des gestes qui vous permettent d'avoir sur la table la tasse demand&#195;&#169;e.&lt;br class='manualbr' /&gt;Le code de la fonction contient donc le code qui doit &#195;&#170;tre ex&#195;&#169;cut&#195;&#169; chaque fois que la fonction est appel&#195;&#169;e par son nom.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ces deux fonctions sont donc :&lt;/strong&gt;&lt;br class='autobr' /&gt;
La fonction &lt;strong&gt;&#034;liste_dossiers(&#034;o&#195;&#185;&#034;)&#034;&lt;/strong&gt;, qui renvoie la liste des dossiers pr&#195;&#169;sents &#195; l'endroit sp&#195;&#169;cifi&#195;&#169; par l'adresse &#034;o&#195;&#185;&#034;, sous la forme d'une liste, un &lt;a href=&#034;http://php.net/manual/fr/function.array.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#034;array&#034;&lt;/a&gt; en langage php.&lt;/p&gt;
&lt;p&gt;La fonction &lt;strong&gt;&#034;lit_dossier(&#034;lequel&#034;,&#034;court ou complet&#034;)&#034;&lt;/strong&gt;, qui renvoie sous forme d'array toute l'information que contient un dossier :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; titre
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; texte
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; adresse du dossier
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; l'illustration g&#195;&#169;n&#195;&#169;rale&lt;/p&gt;
&lt;p&gt;Si &#034;complet&#034; est sp&#195;&#169;cifi&#195;&#169;, l'array contiendra en plus :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les images de galerie
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les vid&#195;&#169;os, sons et autres pi&#195;&#168;ces jointes tri&#195;&#169;es par type.&lt;/p&gt;
&lt;p&gt;Avec ces deux fonctions et un peu de code, nous allons pouvoir rendre notre site minimal fonctionnel.&lt;/p&gt;
&lt;p&gt;Ajouter du contenu&lt;br class='autobr' /&gt;
Pour pouvoir tester l'utilisation des fonctions, nous devons maintenant cr&#195;&#169;er un contenu, soit deux dossiers avec un peu de contenu.&lt;br class='manualbr' /&gt;Pour l'exemple, voici deux dossiers contenus dans le dossier &#034;contenu&#034; &lt;a href='http://arts-numeriques.codedrops.net/IMG/zip/contenu.zip' class=&#034;spip_in&#034; type='application/zip'&gt;&#195; t&#195;&#169;l&#195;&#169;charger ici&lt;/a&gt;. L'arborescence de notre cms ressemble maintenant &#195; ceci :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_644 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L355xH356/dossier-2-2-a3dd0.jpg?1726877211' width='355' height='356' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Lister les dossiers pr&#195;&#169;sents&lt;/h2&gt;
&lt;p&gt;Maintenant que nous avons du contenu, nous allons utiliser la premi&#195;&#168;re fonction, &#034;liste_dossier()&#034; pour lister ces fameux dossiers. Pour cela, nous allons placer en dessous de l'include quelques lignes suppl&#195;&#169;mentaires :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php include(&#034;inc-fonctions.php&#034;); $arbo=liste_dossiers(&#034;contenu/&#034;);
print_r($arbo);
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce code charge dans une variable du nom de $arbo le produit de la fonction liste_dossiers(&#034;contenu/&#034;), qui est le dossier o&#195;&#185; se trouve pr&#195;&#169;cisement les contenus.&lt;br class='manualbr' /&gt;La fonction renvoie en fait un array, la liste d'adresse des dossiers trouv&#195;&#169;s.&lt;br class='manualbr' /&gt;La commande &#034;print_r($arbo) va nous permettre de visualiser le contenu de cet array.&lt;/p&gt;
&lt;p&gt;Une fois la page recharg&#195;&#169;e &#195; travers le serveur local, on peut voir dans le code source de la page le r&#195;&#169;sultat suivant :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_645 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH139/result_array-6e670.jpg?1736352484' width='500' height='139' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Print_r nous montre que l'array contient deux r&#195;&#169;sultats, l'adresse des deux dossiers contenus dans le dossier &#034;contenu&#034;. Le dossier lui-m&#195;&#170;me est d'ailleurs dans l'adresse.&lt;/p&gt;
&lt;p&gt;C'est vers ces adresses que pointeront les liens de la navigation, mais nous voulons lister dans la navigation les titres des pages, pas simplement le nom du dossier. Il faut donc maintenant lire le contenu de chacun des dossiers pour rechercher les informations utiles, ici le nom de la page. C'est l&#195; que la deuxi&#195;&#168;me fonction intervient.&lt;/p&gt;
&lt;p&gt;Nous allons remplacer le code dans la navigation (le tag &#034;nav&#034;) par celui-ci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;nav class=&#034;colonne demi slogan&#034;&gt; &lt;ul&gt;
&lt;?php foreach($arbo as $dossier){ $info=lit_dossier($dossier, 'court'); echo &#034;&lt;li&gt;&lt;a href='?page=&#034;.$dossier.&#034;'&gt;&#034;.$info['titre'].&#034;&lt;/a&gt;&lt;/li&gt;&#034;;
}
?&gt; &lt;/ul&gt; &lt;/nav&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce code est un peut plus technique mais il est court. &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; foreach() est une fonction qui permet de passer en revue une liste (un array), &#195;&#169;l&#195;&#169;ment par &#195;&#169;l&#195;&#169;ment. C'est ce qu'on appelle une boucle, qui va se r&#195;&#169;p&#195;&#169;ter autant de fois que quelque chose se trouve &#195; l'int&#195;&#169;rieur. Dans notre cas, elle se r&#195;&#169;p&#195;&#169;tera deux fois pour le moment.&lt;/p&gt;
&lt;p&gt;A l'int&#195;&#169;rieur de la boucle, on appelle la fonction &#034;lit_dossier($dossier, 'court')&#034; et on stocke le r&#195;&#169;sultat de son travail dans une variable du nom de $info. &lt;br class='manualbr' /&gt;A ce stade, $info contient le titre, le texte et l'icone &#195;&#169;ventuelle de la page. Il ne nous reste plus qu'&#195; afficher les informations qui nous int&#195;&#169;ressent : le titre, contenu dans $info['titre'].&lt;/p&gt;
&lt;p&gt;$info est une array d'un type sp&#195;&#169;cial, appel&#195;&#169; &#034;array associative&#034;, avec des cl&#195;&#169;s (par exemple 'titre') associ&#195;&#169;es &#195; des valeurs (par exemple &#034;bienvenue !&#034;). Voir &lt;a href=&#034;http://php.net/manual/fr/language.types.array.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;l'article sur les arrays sur le site de php francophone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La boucle affiche donc un &#195;&#169;l&#195;&#169;ment html li contenant un lien pour chaque dossier trouv&#195;&#169;.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_646 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH159/navok-4b9e7.jpg?1736352484' width='500' height='159' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Les liens sont dans le d&#195;&#169;sordre, mais il suffit de renommer les dossiers &#034;1-home&#034; et &#034;2-galerie&#034; pour que ce soit r&#195;&#169;gl&#195;&#169;.&lt;/p&gt;
&lt;p&gt;La navigation est donc cr&#195;&#169;&#195;&#169;e automatiquement, mais il ne se passe rien quand on clique sur les liens. &lt;br class='manualbr' /&gt;En fait, si, quelque chose change : l'url dans la barre de navigation. Chaque lien se termine par un truc comme &#034; ?page=contenu/home&#034; Et &#195;&#167;a, en fait c'est le d&#195;&#169;but de la magie de php : on va pouvoir r&#195;&#169;cup&#195;&#169;rer cette information et afficher le contenu demand&#195;&#169; par le clic gr&#195;&#162;ce &#195; ce qu'on appellera &#034;l'analyse de la requ&#195;&#170;te en GET&#034;.&lt;/p&gt;
&lt;p&gt;Il est temps ici d'&#195;&#169;crire la deuxi&#195;&#168;me partie de ce didacticiel.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/homemade_cms.zip" length="331413" type="application/zip" />
		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/contenu.zip" length="535532" type="application/zip" />
		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/inc-fonctions-3.zip" length="1202" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Ecrire un fichier de log</title>
		<link>http://arts-numeriques.codedrops.net/Plus-ecrire-un-fichier-de-log</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Plus-ecrire-un-fichier-de-log</guid>
		<dc:date>2009-11-17T15:07:46Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>

		<description>
&lt;p&gt;Un fichier de log est un fichier qui contient une s&#195;&#169;rie de donn&#195;&#169;es permettant de conserver des donn&#195;&#169;es de mani&#195;&#168;re assez brute. On peut conserver ces informations dans une base de donn&#195;&#169;e, ici on fait une lecture et &#195;&#169;criture directement dans un fichier txt sur le serveur. &lt;br class='autobr' /&gt; Voici le code : &lt; ?php function ecrire_log($errtxt) $fp = fopen('log.txt','a+') ; // ouvrir le fichier ou le cr&#195;&#169;er fseek($fp,SEEK_END) ; // poser le point de lecture &#195; la fin du fichier (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="http://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Un fichier de log est un fichier qui contient une s&#195;&#169;rie de donn&#195;&#169;es permettant de conserver des donn&#195;&#169;es de mani&#195;&#168;re assez brute. On peut conserver ces informations dans une base de donn&#195;&#169;e, ici on fait une lecture et &#195;&#169;criture directement dans un fichier txt sur le serveur.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Voici le code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php function ecrire_log($errtxt){ $fp = fopen('log.txt','a+'); // ouvrir le fichier ou le cr&#195;&#169;er fseek($fp,SEEK_END); // poser le point de lecture &#195; la fin du fichier $nouverr=$errtxt.&#034;\r\n&#034;; // ajouter un retour &#195; la ligne au fichier fputs($fp,$nouverr); // ecrire ce texte fclose($fp); //fermer le fichier } ecrire_log(&#034;test&#034;); echo &#034;je viens d'updater le fichier&#034;; ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Attention, pour une utilisation de ce script sur un serveur distant, attention aux droits d'&#195;&#169;criture.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
