<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://dissitou.klafoutis.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>dcTips()</title>
  <link>http://dissitou.klafoutis.org/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Sun, 09 Mar 2008 07:06:31 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Changement d'herbage...</title>
    <link>http://dissitou.klafoutis.org/post/2008/03/09/Changement-dherbage</link>
    <guid isPermaLink="false">urn:md5:d5c4426b06cfb768c72bf80f11b3cdf4</guid>
    <pubDate>Sun, 09 Mar 2008 07:56:00 +0100</pubDate>
    <dc:creator>Kozlika</dc:creator>
            
    <description>    &lt;div style=&quot;background: #ffcece; padding: 1em 2em; border: 1px solid red;&quot;&gt;
&lt;p&gt;Comme je vous l'avais annoncé il y a quelques semaines, ce site est désormais fondu avec celui de mes thèmes pour Dotclear 1 et celui de mes thèmes pour Dotclear 2.&lt;/p&gt;

&lt;p&gt;L'URL http://dissitou.klafoutis.org ne répondra plus d'ici quelques semaines, pensez à modifier vos marque-page et vos abonnements RSS.&lt;/p&gt;

&lt;p style=&quot;font-size:1.33em;&quot;&gt;Rendez-vous désormais dans &lt;a href=&quot;http://ateliers.klafoutis.org&quot;&gt;Les Ateliers du klafoutis&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Clearbricks : quelques autres fonctions de dbLayer</title>
    <link>http://dissitou.klafoutis.org/post/2007/12/31/Clearbricks-%3A-quelques-autres-fonctions-de-dbLayer</link>
    <guid isPermaLink="false">urn:md5:39184a328f19ae622b9a88ffa482db7c</guid>
    <pubDate>Mon, 31 Dec 2007 18:06:00 +0100</pubDate>
    <dc:creator>Moe</dc:creator>
        <category>Trucs divers</category>
        <category>clearbricks</category><category>documentation</category><category>php</category><category>sql</category>    
    <description>&lt;p&gt;Dans le &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/11/22/Clearbricks-%3A-decouverte-de-dbLayer-et-de-sa-fonction-select&quot;&gt;billet d'introduction&lt;/a&gt; (qu'il est préférable d'avoir lu avant d'aborder ce billet) nous avons vu comment effectuer des requêtes avec la fonction &lt;code&gt;select()&lt;/code&gt; de dbLayer. Après avoir découvert comment lire les enregistrements dans la base de données, nous allons ici voir comment insérer, mettre à jour et effacer des enregistrements.&lt;/p&gt;    &lt;p&gt;Voici pour rappel la table des lecteurs que nous avons utilisé comme exemple dans le billet d'introduction :&lt;/p&gt;


&lt;h3&gt;La table lecteurs&lt;/h3&gt;

&lt;table border=&quot;0&quot; rules=&quot;all&quot; cellpadding=&quot;5&quot; cellspacing=&quot;5&quot; style=&quot;background-color:White;text-align:center;&quot;&gt;
&lt;caption&gt;lecteurs&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th style=&quot;width:20%;&quot;&gt;id&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;nom&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;role&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Pierre&lt;/td&gt;&lt;td&gt;clown&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Paul&lt;/td&gt;&lt;td&gt;développeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Jacques&lt;/td&gt;&lt;td&gt;soutien moral&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Olivier&lt;/td&gt;&lt;td&gt;chef&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Kozlika&lt;/td&gt;&lt;td&gt;fée&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;



&lt;h3&gt;Le curseur&lt;/h3&gt;

&lt;p&gt;Pour insérer ou mettre à jour un enregistrement avec dbLayer, il faut d'abord ouvrir un curseur. Cela se fait avec la commande &lt;code&gt;openCursor()&lt;/code&gt; et permet de définir sur quelle table on va agir. Ici ce sera la table lecteurs.&lt;/p&gt;


&lt;p&gt;Ouvrons un curseur :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;openCursor&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'lecteurs'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;&lt;code&gt;$cur&lt;/code&gt; est un &lt;em&gt;cursor&lt;/em&gt;, ou curseur en français. Nous allons lui attribuer des variables qui correspondent aux colonnes de la table et des valeurs grâce à la syntaxe suivante :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;variable &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;valeur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Exemples :&lt;/p&gt;


&lt;p&gt;Pour définir le nom :&lt;/p&gt;
&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;nom &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'César'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Pour définir le rôle :&lt;/p&gt;
&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;role &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'empereur'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;h3&gt;Insérer un enregistrement avec la fonction &lt;code&gt;insert()&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Un nouveau lecteur est arrivé, il s'appelle Hector et son rôle est &amp;quot;évangéliste&amp;quot;. Comment faire pour l'ajouter à la table des lecteurs ? On ouvre un curseur, on lui attribue des valeurs :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;openCursor&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'lecteurs'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;nom &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'Hector'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;role &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'évangéliste'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Ensuite on utilise la fonction insert(), elle va récupérer les variables et les valeurs pour les insérer dans la table :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;();&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Voici le code complet :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;openCursor&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'lecteurs'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;nom &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'Hector'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;role &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'évangéliste'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;();&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Et la table après l'insertion :&lt;/p&gt;
&lt;table border=&quot;0&quot; rules=&quot;all&quot; cellpadding=&quot;5&quot; cellspacing=&quot;5&quot; style=&quot;background-color:White;text-align:center;&quot;&gt;
&lt;caption&gt;lecteurs&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th style=&quot;width:20%;&quot;&gt;id&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;nom&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;role&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Pierre&lt;/td&gt;&lt;td&gt;clown&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Paul&lt;/td&gt;&lt;td&gt;développeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Jacques&lt;/td&gt;&lt;td&gt;soutien moral&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Olivier&lt;/td&gt;&lt;td&gt;chef&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Kozlika&lt;/td&gt;&lt;td&gt;fée&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Hector&lt;/td&gt;&lt;td&gt;évangéliste&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;



&lt;p&gt;Un enregistrement a été créé. Notez que l'id de cet enregistrement vaut 6 car la base de données a été configurée pour incrémenter l'id à chaque nouvel enregistrement.&lt;/p&gt;


&lt;h3&gt;Modifier un enregistrement avec la fonction &lt;code&gt;update()&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Pierre n'est plus clown, il est devenu professeur. Comment mettre à jour l'enregistrement de la table qui le concerne ? On ouvre un curseur et on attribue les nouvelles valeurs :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;openCursor&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'lecteurs'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;role &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'professeur'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Puis on utilise la fonction &lt;code&gt;update()&lt;/code&gt;, Le mot-clé &lt;code&gt;WHERE&lt;/code&gt; permet de définir quel enregistrement nous allons mettre à jour, ici on veut modifier l'enregistrement de Pierre donc nous allons sélectionner l'enregistrement où le nom est &amp;quot;Pierre&amp;quot; :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'WHERE nom = \'Pierre\';'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Voici le code complet :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$cur &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;openCursor&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'lecteurs'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;role &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'professeur'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'WHERE nom = \'Pierre\';'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Et le résultat :&lt;/p&gt;

&lt;table border=&quot;0&quot; rules=&quot;all&quot; cellpadding=&quot;5&quot; cellspacing=&quot;5&quot; style=&quot;background-color:White;text-align:center;&quot;&gt;
&lt;caption&gt;lecteurs&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th style=&quot;width:20%;&quot;&gt;id&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;nom&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;role&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Pierre&lt;/td&gt;&lt;td&gt;professeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Paul&lt;/td&gt;&lt;td&gt;développeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Jacques&lt;/td&gt;&lt;td&gt;soutien moral&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Olivier&lt;/td&gt;&lt;td&gt;chef&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Kozlika&lt;/td&gt;&lt;td&gt;fée&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Hector&lt;/td&gt;&lt;td&gt;évangéliste&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;



&lt;p&gt;L'enregistrement a été mis à jour.&lt;/p&gt;


&lt;h3&gt;Effacer un enregistrement avec la fonction &lt;code&gt;execute()&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Il n'y a pas de fonction spéciale pour effacer un enregistrement, nous allons utiliser la commande &lt;code&gt;execute()&lt;/code&gt; qui sert à exécuter des requêtes SQL.&lt;/p&gt;


&lt;p&gt;Jacques n'est plus lecteur, Comment effacer l'enregistrement qui le concerne ? Voici la requête SQL qui va effacer l'enregistrement avec l'&lt;code&gt;id&lt;/code&gt; 3 : &lt;code&gt;DELETE FROM lecteurs WHERE id = 3;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;On exécute la requête :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'DELETE FROM lecteurs WHERE id = 3;'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;execute&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Et la table devient :&lt;/p&gt;

&lt;table border=&quot;0&quot; rules=&quot;all&quot; cellpadding=&quot;5&quot; cellspacing=&quot;5&quot; style=&quot;background-color:White;text-align:center;&quot;&gt;
&lt;caption&gt;lecteurs&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th style=&quot;width:20%;&quot;&gt;id&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;nom&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;role&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Pierre&lt;/td&gt;&lt;td&gt;professeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Paul&lt;/td&gt;&lt;td&gt;développeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Olivier&lt;/td&gt;&lt;td&gt;chef&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Kozlika&lt;/td&gt;&lt;td&gt;fée&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Hector&lt;/td&gt;&lt;td&gt;évangéliste&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;



&lt;p&gt;Notez qu'on aurait pu réaliser la même action avec cette requête SQL :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'DELETE FROM lecteurs WHERE nom = \'Jacques\';'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;h3&gt;Quelques fonctions supplémentaires pour les recordsets&lt;/h3&gt;

&lt;p&gt;Ces fonctions permettent d'obtenir des informations sur les requêtes SELECT décrites dans le billet d'introduction.&lt;/p&gt;


&lt;h4&gt;&lt;code&gt;isEmpty()&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Cette fonction retourne &lt;code&gt;true&lt;/code&gt; si un &lt;code&gt;recordset&lt;/code&gt; est vide ou &lt;code&gt;false&lt;/code&gt; sinon. Elle s'utilise dans une condition, pour voir si un recordset contient des enregistrements. Ici on va afficher les noms des lecteurs dont l'id est supérieur à 3 :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'SELECT nom FROM lecteurs WHERE id &amp;gt; 3;'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;&lt;br /&gt;if (&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;())&lt;br /&gt;{&lt;br /&gt;    echo(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'aucun lecteur'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    while (&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;()) {echo(&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'nom'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;' '&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);}&lt;br /&gt;}&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Ce code affichera &amp;quot;aucun lecteur&amp;quot; si le recordset est vide et affichera les noms des lecteurs s'il y en a.&lt;/p&gt;


&lt;p&gt;Pour ne pas afficher de message spécifique en cas de recordset vide on utilisera le code suivant :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'SELECT nom FROM lecteurs WHERE id &amp;gt; 3;'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;&lt;br /&gt;if (!&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;())&lt;br /&gt;{&lt;br /&gt;    while (&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;()) {echo(&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'nom'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;' '&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);}&lt;br /&gt;}&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;h4&gt;&lt;code&gt;count()&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Cette fonction retourne le nombre d'enregistrements présents dans un recordset :&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color:#000&quot;&gt;
&lt;span style=&quot;color:#00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'SELECT nom FROM lecteurs WHERE id &amp;gt; 3;'&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs &lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt;&lt;br /&gt;echo(&lt;/span&gt;&lt;span style=&quot;color:#D00&quot;&gt;'nombre d\'enregistrements : '&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#00B&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:#070&quot;&gt;);&lt;br /&gt; &lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;


&lt;p&gt;Ceci affichera par exemple &amp;quot;nombre d'enregistrements : 2&amp;quot;.&lt;/p&gt;


&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Grâce au billet précédent et à ce billet, vous savez lire et modifier des enregistrements dans des tables d'une base de données. Pour apprendre comment créer ou modifier des tables, voyez la &lt;a href=&quot;http://doc.dotclear.net/2.0/resources/plugins/auto-install#modifier-le-schema-de-la-base-de-donnees&quot; hreflang=&quot;fr&quot; title=&quot;2.0:resources:plugins:auto-install    [Documentation Dotclear&quot;&gt;documentation de Dotclear&lt;/a&gt;, Vous êtes prêts à gérer des tables dans une base de données avec Clearbricks.&lt;/p&gt;


&lt;p&gt;Si les commentaires sont fermés, vous pouvez commenter ce billet &lt;a href=&quot;http://gniark.net/blog/post/2007/12/31/Clearbricks-:-quelques-autres-fonctions-de-dbLayer#p675&quot;&gt;sur mon blog&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Clearbricks : découverte de dbLayer et de sa fonction select()</title>
    <link>http://dissitou.klafoutis.org/post/2007/11/22/Clearbricks-%3A-decouverte-de-dbLayer-et-de-sa-fonction-select</link>
    <guid isPermaLink="false">urn:md5:0a13124d1c781d5f366bfcd991f85953</guid>
    <pubDate>Thu, 22 Nov 2007 19:22:00 +0100</pubDate>
    <dc:creator>Moe</dc:creator>
        <category>Trucs divers</category>
        <category>clearbricks</category><category>documentation</category><category>php</category><category>sql</category>    
    <description>&lt;h3&gt;Introduction à Clearbricks&lt;/h3&gt;

&lt;p&gt;Dotclear utilise son propre &lt;em&gt;framework&lt;/em&gt; qui n'est pas un &lt;em&gt;framework&lt;/em&gt; : &lt;a href=&quot;http://clearbricks.org/&quot; hreflang=&quot;en&quot; title=&quot;Clearbricks&quot;&gt;Clearbricks&lt;/a&gt;, il est composé d'une ensemble de classes et de fonctions, on y trouve par exemple une classe destinée à traiter les chaînes HTML ou une classe servant à formater les dates. Nous allons nous intéresser à la classe &lt;code&gt;dbLayer&lt;/code&gt;.&lt;/p&gt;    &lt;h3&gt;La base de données&lt;/h3&gt;

&lt;p&gt;Comme son nom l'indique, c'est une base ... de données. Concrètement, ça stocke des informations sous forme de tables (qui sont des tableaux) dans lesquelles on peut sélectionner des informations, les trier ou ajouter une information, etc. Pour cela on utilise des requêtes écrites en langage &lt;acronym title=&quot;Structured Query Language&quot;&gt;SQL&lt;/acronym&gt;. Ce langage est un standard et permet de faire des requêtes à différents types de base de données&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/11/22/#pnote-161-1&quot; id=&quot;rev-pnote-161-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;. Clearbricks peut se connecter à trois types de bases de données : MySQL, PostgreSQL (noté aussi PGSQL) et SQLite (très peu utilisé).&lt;/p&gt;


&lt;h3&gt;La classe dbLayer&lt;/h3&gt;

&lt;p&gt;dbLayer est le diminutif de &lt;em&gt;database layer&lt;/em&gt;, ou &lt;q lang=&quot;fr&quot;&gt;couche de la base de données&lt;/q&gt; en français. C'est une couche d'abstraction, ce qui signifie qu'on fait appel à dbLayer pour réaliser des actions (ici des requêtes SQL) sans se soucier de ce qu'il y a &lt;em&gt;en-dessous&lt;/em&gt;. Au lieu d'utiliser les fonctions de &lt;acronym title=&quot;PHP Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; telles que &lt;code&gt;mysql_query()&lt;/code&gt; et &lt;code&gt;pg_query()&lt;/code&gt; on utilisera les fonctions de dbLayer en faisant abstraction du type de la base de données.&lt;/p&gt;


&lt;p&gt;On peut schématiser ainsi le cheminement d'une requête SQL :&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://dissitou.klafoutis.org/public/images/Y2007/code/clearbricks.png&quot; alt=&quot;clearbricks.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Grâce à Clearbricks et dbLayer, on a un code qui gère indifféremment les 2 types de base de données.&lt;/p&gt;


&lt;h3&gt;La table lecteurs&lt;/h3&gt;

&lt;p&gt;Imaginons qu'on ait créé une table &lt;code&gt;lecteurs&lt;/code&gt; :&lt;/p&gt;

&lt;table border=&quot;1&quot; rules=&quot;all&quot; cellpadding=&quot;5&quot; cellspacing=&quot;5&quot; style=&quot;background-color:White;text-align:center;&quot;&gt;
&lt;caption&gt;lecteurs&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th style=&quot;width:20%;&quot;&gt;id&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;nom&lt;/th&gt;&lt;th style=&quot;width:40%;&quot;&gt;role&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Pierre&lt;/td&gt;&lt;td&gt;clown&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Paul&lt;/td&gt;&lt;td&gt;développeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Jacques&lt;/td&gt;&lt;td&gt;soutien moral&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Olivier&lt;/td&gt;&lt;td&gt;chef&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Kozlika&lt;/td&gt;&lt;td&gt;fée&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;



&lt;p&gt;Cette table est un tableau composé de 3 champs (les colonnes) : &lt;code&gt;id&lt;/code&gt; (l'identifiant de la ligne) correspondant à l'ordre dans lequel les lecteurs se sont enregistrés, &lt;code&gt;nom&lt;/code&gt; (le nom des utilisateurs) et &lt;code&gt;role&lt;/code&gt; qui est le rôle de l'utilisateur. Cette table compte 5 enregistrements (les lignes). Elle servira d'exemple dans ce billet.&lt;/p&gt;


&lt;p&gt;Admettons que la connexion a la base de données a été effectuée, c'est l'objet &lt;code&gt;$con&lt;/code&gt;. Nous allons voir comment utiliser la fonction &lt;code&gt;select()&lt;/code&gt;.&lt;/p&gt;


&lt;h3&gt;Première requête sur un enregistrement et un champ&lt;/h3&gt;

&lt;p&gt;Comment faire pour afficher le nom du premier lecteur ?&lt;/p&gt;


&lt;p&gt;Voici la requête en pseudo-code : &amp;quot;sélectionner &lt;strong&gt;nom&lt;/strong&gt; dans la table &lt;strong&gt;lecteurs&lt;/strong&gt; où &lt;strong&gt;id&lt;/strong&gt; = &lt;strong&gt;1&lt;/strong&gt;&amp;quot; et en SQL :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #D00&quot;&gt;'SELECT nom FROM lecteurs WHERE id = 1;'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Effectuons la requête :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs &lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;&lt;code&gt;$rs&lt;/code&gt; est un &lt;em&gt;recordset&lt;/em&gt;, c'est un groupe d'enregistrements (ici un seul) qui contient les champs (ici le champ nom). On accède au champ nom grâce à la fonction &lt;code&gt;field()&lt;/code&gt; ou sa version raccourcie &lt;code&gt;f()&lt;/code&gt;, on l'affiche ainsi :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #070&quot;&gt;echo(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'nom'&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;));&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Ceci affichera &amp;quot;Pierre&amp;quot;. Notez qu'il existe une syntaxe simplifiée pour afficher le même résultat :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #070&quot;&gt;echo(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;nom&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;On peut aussi effectuer la même opération en une ligne :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #070&quot;&gt;echo(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;)-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;nom&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;h3&gt;Une requête sur un champ avec plusieurs enregistrements&lt;/h3&gt;

&lt;p&gt;Comment afficher les noms des derniers lecteurs ?&lt;/p&gt;


&lt;p&gt;Voici la requête en pseudo-code : &amp;quot;sélectionner &lt;strong&gt;nom&lt;/strong&gt; dans la table &lt;strong&gt;lecteurs&lt;/strong&gt; en rangeant par &lt;strong&gt;id&lt;/strong&gt; décroissant en se limitant à 2 enregistrements&amp;quot; et en SQL :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'SELECT nom FROM lecteurs ORDER BY id DESC LIMIT 2;'&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Effectuons la requête :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs &lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Le recordset &lt;code&gt;$rs&lt;/code&gt; contient 2 enregistrements, on ne peut plus accéder directement au champ &lt;strong&gt;nom&lt;/strong&gt; des 2 enregistrements avec &lt;code&gt;f('nom')&lt;/code&gt;. On va parcourir les enregistrements avec une boucle grâce à la fonction &lt;code&gt;fetch()&lt;/code&gt; :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #00B&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;while (&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;()) {echo(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'nom'&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;' '&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;);}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Ceci va afficher &amp;quot;Kozlika Olivier&amp;quot;.&lt;/p&gt;


&lt;h3&gt;Une requête sur plusieurs champs de plusieurs enregistrements&lt;/h3&gt;

&lt;p&gt;Comment afficher les noms et les rôles des 3 premiers lecteurs ?&lt;/p&gt;


&lt;p&gt;Voici la requête en pseudo-code : &amp;quot;sélectionner &lt;strong&gt;nom&lt;/strong&gt; et &lt;strong&gt;rôle&lt;/strong&gt; dans la table &lt;strong&gt;lecteurs&lt;/strong&gt; par &lt;strong&gt;id&lt;/strong&gt; croissant en se limitant à &lt;strong&gt;3&lt;/strong&gt; enregistrements&amp;quot; et en SQL :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #00B&quot;&gt;$query &lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #D00&quot;&gt;'SELECT nom,role FROM lecteurs ORDER BY id ASC LIMIT 3;'&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Effectuons la requête :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs &lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$con&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Le recordset &lt;code&gt;$rs&lt;/code&gt; contient 3 enregistrements et 2 champs, on va devoir parcourir les enregistrements comme précédemment :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;span style=&quot;color: #070&quot;&gt;while (&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;()) {echo(&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'nom'&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;' : '&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;$rs&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #00B&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'role'&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;' '&lt;/span&gt;&lt;span style=&quot;color: #070&quot;&gt;);}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Ceci va afficher &amp;quot;Pierre : clown Paul : développeur Jacques : soutien moral&amp;quot;.&lt;/p&gt;


&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Désormais vous savez utiliser les fonctions de dbLayer pour effectuer des requêtes SQL de type SELECT.&lt;/p&gt;


&lt;p&gt;Si les commentaires sont fermés, vous pouvez commenter ce billet &lt;a href=&quot;http://gniark.net/blog/post/2007/11/15/Clearbricks-:-la-fonction-select-de-dbLayer#p665&quot; hreflang=&quot;fr&quot; title=&quot;Clearbricks : la fonction select() de dbLayer - gniark.net/blog/&quot;&gt;sur mon blog&lt;/a&gt; en attendant la réouverture des commentaires sur ce blog.&lt;/p&gt;


&lt;p&gt;Merci à Kozlika, Franck Paul et Biou pour leurs conseils et le temps qu'ils m'ont accordé.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/11/22/#rev-pnote-161-1&quot; id=&quot;pnote-161-1&quot;&gt;1&lt;/a&gt;] le langage peut différer d'un type à l'autre&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Fermeture pendant les travaux</title>
    <link>http://dissitou.klafoutis.org/post/2007/11/22/Fermeture-pendant-les-travaux</link>
    <guid isPermaLink="false">urn:md5:fbd0441c293b37b7f6eb0dc34f0a0855</guid>
    <pubDate>Thu, 22 Nov 2007 10:53:00 +0100</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Trucs divers</category>
            
    <description>    &lt;p&gt;Les commentaires et rétroliens sont fermés pour quelque temps pendant la refonte de l'organisation de klafoutis.org&lt;/p&gt;


&lt;p&gt;C'est pas grave, de toutes façons le meilleur endroit pour poser des questions c'est http://dotclear.net/forum/ :)&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 9. Afficher un billet ou un texte fixe</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/13/Balises-%3A-9-Afficher-un-billet-ou-un-texte-fixe</link>
    <guid isPermaLink="false">urn:md5:794cb355425bcc4c32a0adc8f2a5a447</guid>
    <pubDate>Fri, 13 Jul 2007 11:24:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Continuons (et terminons) notre exercice pratique dont je rappelle l'énoncé :&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;J'ai prévu d'afficher un bloc particulier sur la page d'accueil. Ce bloc contiendra le dernier billet publié d'une catégorie précise ou à défaut, un texte fixe. Cette catégorie s'appellera &lt;em&gt;Flash&lt;/em&gt; et ne servira qu'à gérer ce genre de petits messages et par conséquent ses billets ne devront pas apparaitre dans le &lt;em&gt;flux&lt;/em&gt; normal&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/13/#pnote-126-1&quot; id=&quot;rev-pnote-126-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Nous savons maintenant comment déterminer correctement si nous nous trouvons sur la première page (page d'accueil), il s'agit maintenant de faire en sorte d'afficher le dernier billet publié de la catégorie &lt;em&gt;Flash&lt;/em&gt;, ou, s'il n'en existe aucun, d'afficher un texte fixe.&lt;/p&gt;


&lt;p&gt;Voilà le code utilisé :&lt;/p&gt;


&lt;pre&gt;&amp;lt;tpl:FlagFirstPageIf true=&amp;quot;1&amp;quot;&amp;gt;

  &lt;strong&gt;{{tpl:FlagFlashPost}}&lt;/strong&gt;

  &amp;lt;!-- # Last published post from Flash category (if exists) --&amp;gt;
  &amp;lt;tpl:Entries category=&amp;quot;Flash&amp;quot; lastn=&amp;quot;1&amp;quot;&amp;gt;
    &amp;lt;h2 class=&amp;quot;intro&amp;quot; id=&amp;quot;p{{tpl:EntryID}}&amp;quot;&amp;gt;
    &amp;lt;strong&amp;gt;{{tpl:EntryTitle encode_html=&amp;quot;1&amp;quot;}}&amp;lt;/strong&amp;gt;&amp;lt;/h2&amp;gt;
    &amp;lt;tpl:EntryIf extended=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;span&amp;gt;{{tpl:EntryExcerpt}}&amp;lt;/span&amp;gt;&amp;lt;/tpl:EntryIf&amp;gt; 
    &amp;lt;div class=&amp;quot;post-content&amp;quot;&amp;gt;{{tpl:EntryContent}}&amp;lt;/div&amp;gt;
    &lt;strong&gt;{{tpl:FlagFlashPost true=&amp;quot;1&amp;quot;}}&lt;/strong&gt;
  &amp;lt;/tpl:Entries&amp;gt;

  &lt;strong&gt;&amp;lt;tpl:FlagFlashPostIf true=&amp;quot;0&amp;quot;&amp;gt;&lt;/strong&gt;
    &amp;lt;!-- # Standard text if there is no published post from Flash category --&amp;gt;
    &amp;lt;h2 class=&amp;quot;intro&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;{{tpl:BlogDescription}}&amp;lt;/strong&amp;gt;&amp;lt;/h2&amp;gt;
    &amp;lt;div class=&amp;quot;post-content&amp;quot;&amp;gt;
      &amp;lt;p&amp;gt;Ze best blog on ze best world of ze universe.&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
  &lt;strong&gt;&amp;lt;/tpl:FlagFlashPostIf&amp;gt;&lt;/strong&gt;

&amp;lt;/tpl:FlagFirstPageIf&amp;gt;&lt;/pre&gt;


&lt;p&gt;J'ai mis l'emphase sur l'utilisation de deux nouvelles balises (&lt;code&gt;{{tpl:FlagFlashPost}}&lt;/code&gt; et &lt;code&gt;&amp;lt;tpl:FlagFlashPostIf&amp;gt;&lt;/code&gt; qui sont exactement les mêmes que celles décrites dans les deux billets précédents à ceci près qu'elles utilisent une autre variable dans le code PHP.&lt;/p&gt;


&lt;p&gt;Ces nouvelles balises me servent à positionner un &lt;em&gt;drapeau&lt;/em&gt; (variable à &lt;em&gt;true&lt;/em&gt; ou à &lt;em&gt;false&lt;/em&gt;) en fonction de la présence ou pas d'un billet publié dans la catégorie &lt;em&gt;Flash&lt;/em&gt;, et de tester la valeur de ce &lt;em&gt;drapeau&lt;/em&gt; ce qui me permet, plus bas, d'afficher le texte standard si nécessaire.&lt;/p&gt;


&lt;p&gt;Il n'y a absolument rien de nouveau ici, uniquement l'utilisation de techniques déjà expliquées précédemment ou reprises dans les fichiers standards du thème defaut. Rien de plus à mettre en place pour terminer notre exercice, on peut sauvegarder le fichier &lt;code&gt;_intro.html&lt;/code&gt; et vérifier que tout fonctionne comme attendu.&lt;/p&gt;


&lt;p&gt;Voilà qui conclut cette série de billets sur les &lt;em&gt;templates&lt;/em&gt; de Dotclear 2. J'espère que cela aura permis d'éclairer quelques zones d'ombres dans ce système qui peut — qui doit même pour certains — paraitre bien compliqué au premier abord. Je parle en connaissance de cause, je suis passé par cette phase ;-)&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/13/#rev-pnote-126-1&quot; id=&quot;pnote-126-1&quot;&gt;1&lt;/a&gt;] Par contre j'ai choisi de laisser l'accès à tous ces billets particuliers dans la liste des catégories ou dans les archives.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 8. Le fichier _public.php en détail</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-8-Le-fichier-_publicphp-en-detail</link>
    <guid isPermaLink="false">urn:md5:a9b19f360fd2536c555f16247f70abf9</guid>
    <pubDate>Mon, 09 Jul 2007 23:15:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Si vous voulez plus d'information sur ce fichier &lt;code&gt;_public.php&lt;/code&gt; qui accompagne parfois les thèmes, alors continuez la lecture de ce billet, sinon rendez-vous au prochain pour la suite de l'exercice.&lt;/p&gt;


&lt;p&gt;Voilà, pour l'instant, à quoi ressemble notre &lt;code&gt;_public.php&lt;/code&gt; :&lt;/p&gt;


&lt;pre&gt;&amp;lt;?php

class dcFallSeason
{

  static public function FlagFirstPage($attr)
  {
    if (isset($attr['true'])) {
      $flag = 'true';
    } else {
      $flag = 'false';
    }
    return '&amp;lt;?php $dcFallSeasonFlagFirstPage = '.$flag.'; ?&amp;gt;';
  }

  static public function FlagFirstPageIf($attr,$content)
  {
    $if = '';

    if (isset($attr['true'])) {
      $sign = (boolean) $attr['true'] ? '' : '!';
      $if = $sign.'$dcFallSeasonFlagFirstPage';
    }

    if ($if != '') {
      return '&amp;lt;?php if('.$if.') : ?&amp;gt;'.$content.'&amp;lt;?php endif; ?&amp;gt;';
    } else {
      return $content;
    }
  }

}

// Add Flag management to the template scheme
$core-&amp;gt;tpl-&amp;gt;addValue('FlagFirstPage',
    array('dcFallSeason','FlagFirstPage'));
$core-&amp;gt;tpl-&amp;gt;addBlock('FlagFirstPageIf',
    array('dcFallSeason','FlagFirstPageIf'));

?&amp;gt;&lt;/pre&gt;


&lt;p&gt;Détaillons-le un peu. Première et dernière lignes classique dans un fichier PHP, &lt;code&gt;&amp;lt;?php&lt;/code&gt; et &lt;code&gt;?&amp;gt;&lt;/code&gt;. À l'intérieur de ceci nous y trouvons deux parties. La première définit une classe &lt;code&gt;dcFallSeason&lt;/code&gt;, un nom qui reprend le nom du thème précédé de &lt;code&gt;dc&lt;/code&gt;. Cette classe sert à définir les fonctions de traitement des nouvelles balises qui seront utilisées au sein du thème. La deuxième partie permet de déclarer à DotClear 2 les nouvelles balises &lt;em&gt;template&lt;/em&gt; et les fonctions de traitement qui en dépendent.&lt;/p&gt;


&lt;p&gt;Le plus simple d'abord, la déclaration des nouvelles balises. Je rappelle qu'il y en a deux, une de type simple &lt;code&gt;&amp;lt;tpl:FlagFirstPage&amp;gt;&lt;/code&gt; et une de type bloc &lt;code&gt;&amp;lt;tpl:FlagFirstPageIf&amp;gt;&lt;/code&gt;, respectivement déclarées de la manière suivante :&lt;/p&gt;


&lt;pre&gt;$core-&amp;gt;tpl-&amp;gt;addValue('FlagFirstPage',
    array('dcFallSeason','FlagFirstPage'));

$core-&amp;gt;tpl-&amp;gt;addBlock('FlagFirstPageIf',
    array('dcFallSeason','FlagFirstPageIf'));&lt;/pre&gt;


&lt;p&gt;Le premier paramètre définit le nom utilisé dans la balise — ce qui suit le &lt;code&gt;&amp;lt;tpl:&lt;/code&gt;, le deuxième, sous forme de tableau (&lt;em&gt;array&lt;/em&gt;), définit le nom de la classe (&lt;code&gt;dcFallSeason&lt;/code&gt; dans notre cas) et le nom de la fonction associée. &lt;code&gt;addValue()&lt;/code&gt; est utilisée pour une balise simple, &lt;code&gt;addBlock()&lt;/code&gt; pour une balise de type bloc. De cette manière, lorsque Dotclear 2 rencontrera une de nos balises dans un fichier du thème, il saura quelle est la fonction de traitement qui doit être utilisée.&lt;/p&gt;


&lt;p&gt;Voyons maintenant les fonctions de traitement. La première, &lt;code&gt;FlagFirstPage()&lt;/code&gt; reçoit un paramètre, sous forme de tableau, contenant les attributs éventuels et leurs valeurs utilisés dans la balise. La deuxième, &lt;code&gt;FlagFirstPageIf()&lt;/code&gt; reçoit en plus un paramètre contenant le contenu de ce qui est encadré par la balise (de type bloc). Les deux fonctions doivent retourner le code PHP (ou HTML) correspondant à la balise.&lt;/p&gt;


&lt;p&gt;Je vais détailler le code de la première, la seconde devrait être comprise assez facilement. Voilà le code :&lt;/p&gt;


&lt;pre&gt;1. static public function FlagFirstPage($attr)
2. {
3.  if (isset($attr['true'])) {
4.    $flag = 'true';
5.  } else {
6.    $flag = 'false';
7.  }
8.  return '&amp;lt;?php $dcFallSeasonFlagFirstPage = '.$flag.'; ?&amp;gt;';
9. }&lt;/pre&gt;


&lt;p&gt;Ligne 1, il s'agit de la déclaration de la fonction et des paramètres attendus (un seul dans ce cas). Les lignes 2 et 9 délimitent le code de la fonction. Ligne 3, je contrôle qu'un attribut intitulé &lt;code&gt;true&lt;/code&gt; a ou n'a pas été spécifié dans la balise (ex &lt;code&gt;&amp;lt;tpl:FlagFirstPage&amp;gt;&lt;/code&gt; ou &lt;code&gt;&amp;lt;tpl:FlagFirstPage true=&amp;quot;1&amp;quot;&amp;gt;&lt;/code&gt;). Ligne 4, interprétée si l'attribut a été utilisé, permet de positionner la valeur &lt;code&gt;'true'&lt;/code&gt; à une variable texte (&lt;code&gt;$flag&lt;/code&gt;). La ligne 6, interprétée dans le cas contraire, permet de positionner la valeur &lt;code&gt;'false'&lt;/code&gt; à cette même variable. La ligne 8, enfin, retourne le texte par lequel sera remplacée la balise.&lt;/p&gt;


&lt;p&gt;Exemple :&lt;/p&gt;


&lt;p&gt;Si j'utilise la balise &lt;code&gt;&amp;lt;tpl:FlagFirstPage&amp;gt;&lt;/code&gt;, la fonction va alors retourner ceci &lt;code&gt;&amp;lt;?php $dcFallSeasonFlagFirstPage = false; ?&amp;gt;&lt;/code&gt;, ce qui revient à déclarer et à initialiser une variable avec la valeur &lt;em&gt;false&lt;/em&gt; (faux).&lt;/p&gt;


&lt;p&gt;Si j'utilise la balise &lt;code&gt;&amp;lt;tpl:FlagFirstPage true=&amp;quot;1&amp;quot;&amp;gt;&lt;/code&gt;, la fonction va retourner cela &lt;code&gt;&amp;lt;?php $dcFallSeasonFlagFirstPage = true; ?&amp;gt;&lt;/code&gt;, ce qui revient à déclarer et à initialiser une variable avec la valeur &lt;em&gt;true&lt;/em&gt; (vrai).&lt;/p&gt;


&lt;p&gt;Cette variable, &lt;code&gt;$dcFallSeasonFlagFirstPage&lt;/code&gt;, positionnée à &lt;em&gt;true&lt;/em&gt; ou &lt;em&gt;false&lt;/em&gt;, sera ensuite testée avec la balise &lt;code&gt;&amp;lt;tpl:FlagFirstPageIf&amp;gt;&lt;/code&gt; dans le thème, permettant de conditionner l'apparition d'un bloc en fonction du résultat, l'affichage du bloc d'intro dans notre cas.&lt;/p&gt;


&lt;p&gt;Vous devriez maintenant comprendre un peu mieux comment s'opère la phase de traitement des balises &lt;em&gt;template&lt;/em&gt; de Dotclear 2.&lt;/p&gt;


&lt;p&gt;À suivre …&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 7. Exercice pratique, développer ses propres balises</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-7-Exercice-pratique-developper-ses-propres-balises</link>
    <guid isPermaLink="false">urn:md5:9bb3f5af038a51c73a0774d7c84b7b6c</guid>
    <pubDate>Mon, 09 Jul 2007 23:10:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Nous avons un petit problème à résoudre (voir &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/Balises-:-6-Exercice-pratique-se-limiter-a-la-premiere-page&quot; hreflang=&quot;fr&quot;&gt;ce billet&lt;/a&gt; pour en retrouver l'énoncé). Dotclear 2 inclut la possibilité de définir ses propres balises &lt;em&gt;template&lt;/em&gt; au niveau du thème&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-124-1&quot; id=&quot;rev-pnote-124-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;. Pour cela, il faut créer un fichier &lt;code&gt;_public.php&lt;/code&gt; qui contiendra tout le code PHP nécessaire au traitement de ces balises.&lt;/p&gt;


&lt;p&gt;Revenons à notre problème. Nous avons besoin d'éviter l'imbrication de deux balises &lt;code&gt;&amp;lt;tpl:Entries&amp;gt;&lt;/code&gt; (lignes 1 et 4) :&lt;/p&gt;


&lt;pre&gt;1. &lt;strong&gt;&amp;lt;tpl:Entries category=&amp;quot;!Flash&amp;quot; no_content=&amp;quot;1&amp;quot;&amp;gt;&lt;/strong&gt;
2.   &amp;lt;tpl:Pagination&amp;gt;
3.     &amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;
4.       &lt;strong&gt;&amp;lt;tpl:Entries category=&amp;quot;Flash&amp;quot; lastn=&amp;quot;1&amp;quot;&amp;gt;&lt;/strong&gt;
5.         …
6.       &amp;lt;/tpl:Entries&amp;gt;
7.     &amp;lt;/tpl:PaginationIf&amp;gt;
8.   &amp;lt;/tpl:Pagination&amp;gt;
9. &amp;lt;/tpl:Entries&amp;gt;&lt;/pre&gt;


&lt;p&gt;L'idée que j'ai retenue est de faire en sorte de positionner une variable si l'on est sur la première page, juste après la ligne 3, puis de tester cette même variable une fois sorti du bloc &lt;em&gt;template&lt;/em&gt; &lt;code&gt;&amp;lt;tpl:Entries&amp;gt;&lt;/code&gt; (ligne 9). Voilà le nouveau code (j'ai mis l'emphase sur ce qui est nouveau) :&lt;/p&gt;


&lt;pre&gt;&lt;strong&gt;{{tpl:FlagFirstPage}}&lt;/strong&gt;
&amp;lt;tpl:Entries category=&amp;quot;!Flash&amp;quot; no_content=&amp;quot;1&amp;quot;&amp;gt;
  &amp;lt;tpl:Pagination&amp;gt;
    &amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;
      &lt;strong&gt;{{tpl:FlagFirstPage true=&amp;quot;1&amp;quot;}}&lt;/strong&gt;
    &amp;lt;/tpl:PaginationIf&amp;gt;
  &amp;lt;/tpl:Pagination&amp;gt;
&amp;lt;/tpl:Entries&amp;gt;
&lt;strong&gt;&amp;lt;tpl:FlagFirstPageIf true=&amp;quot;1&amp;quot;&amp;gt;&lt;/strong&gt;
  &amp;lt;tpl:Entries category=&amp;quot;Flash&amp;quot; lastn=&amp;quot;1&amp;quot;&amp;gt;
    …
  &amp;lt;/tpl:Entries&amp;gt;
&lt;strong&gt;&amp;lt;/tpl:FlagFirstPageIf&amp;gt;&lt;/strong&gt;&lt;/pre&gt;


&lt;p&gt;Deux nouvelles balises doivent être développées. La première, &lt;code&gt;{{tpl:FlagFirstPage}}&lt;/code&gt;, sert à positionner la variable dont je ai parlé précédemment. Si la balise est utilisée sans aucun paramètre, la variable sera initialisée à &lt;em&gt;false&lt;/em&gt; (faux). Si la balise contient un attribut &lt;code&gt;true=&amp;quot;1&amp;quot;&lt;/code&gt; alors la variable sera initialisée à &lt;em&gt;true&lt;/em&gt; (vrai). La deuxième, sous forme de bloc de test (&lt;code&gt;&amp;lt;tpl:FlagFirstPageIf&amp;gt;&lt;/code&gt; … &lt;code&gt;&amp;lt;/tpl:FlagFirstPageIf&amp;gt;&lt;/code&gt;) sert à tester la valeur de la variable ce qui permettra de réutiliser une balise &lt;code&gt;&amp;lt;tpl:Entries&amp;gt;&lt;/code&gt; pour récupérer le dernier billet de la catégorie &lt;em&gt;Flash&lt;/em&gt;&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-124-2&quot; id=&quot;rev-pnote-124-2&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;Voyons maintenant à quoi ressemble ce fichier &lt;code&gt;_public.php&lt;/code&gt; qui contiendra tout le code nécessaire.&lt;/p&gt;


&lt;pre&gt;&amp;lt;?php

class dcFallSeason
{

  static public function FlagFirstPage($attr)
  {
    if (isset($attr['true'])) {
      $flag = 'true';
    } else {
      $flag = 'false';
    }
    return '&amp;lt;?php $dcFallSeasonFlagFirstPage = '.$flag.'; ?&amp;gt;';
  }

  static public function FlagFirstPageIf($attr,$content)
  {
    $if = '';

    if (isset($attr['true'])) {
      $sign = (boolean) $attr['true'] ? '' : '!';
      $if = $sign.'$dcFallSeasonFlagFirstPage';
    }

    if ($if != '') {
      return '&amp;lt;?php if('.$if.') : ?&amp;gt;'.$content.'&amp;lt;?php endif; ?&amp;gt;';
    } else {
      return $content;
    }
  }

}

// Add Flag management to the template scheme
$core-&amp;gt;tpl-&amp;gt;addValue('FlagFirstPage',
    array('dcFallSeason','FlagFirstPage'));
$core-&amp;gt;tpl-&amp;gt;addBlock('FlagFirstPageIf',
    array('dcFallSeason','FlagFirstPageIf'));

?&amp;gt;&lt;/pre&gt;


&lt;p&gt;Que fait tout ce code ? La première fonction, &lt;code&gt;FlagFirstPage&lt;/code&gt;, est utilisée lors du remplacement de la balise &lt;code&gt;{{tpl:FlagFirstPage}}&lt;/code&gt; et donnera le code PHP suivant :&lt;/p&gt;


&lt;pre&gt;&amp;lt;?php $dcFallSeasonFlagFirstPage = false; ?&amp;gt;&lt;/pre&gt;


&lt;p&gt;ou&lt;/p&gt;


&lt;pre&gt;&amp;lt;?php $dcFallSeasonFlagFirstPage = true; ?&amp;gt;&lt;/pre&gt;


&lt;p&gt;si on utilise l'attribut &lt;code&gt;true=&amp;quot;1&amp;quot;&lt;/code&gt; dans la balise. La deuxième fonction, &lt;code&gt;FlagFirstPageIf&lt;/code&gt;, est utilisée lors du remplacement de la balise &lt;code&gt;&amp;lt;tpl:FlagFirstPageIf&amp;gt;&lt;/code&gt; … &lt;code&gt;&amp;lt;/tpl:FlagFirstPageIf&amp;gt;&lt;/code&gt; et donnera le code suivant (si on l'utilise tel que je l'ai fait plus haut) :&lt;/p&gt;


&lt;pre&gt;&amp;lt;?php if($dcFallSeasonFlagFirstPage) : ?&amp;gt;
 …
&amp;lt;?php endif; ?&amp;gt;&lt;/pre&gt;


&lt;p&gt;Je vais arrêter là pour la description du code PHP du fichier &lt;code&gt;_public.php&lt;/code&gt; pour le reprendre plus en détail dans le prochain billet.&lt;/p&gt;


&lt;p&gt;À suivre …&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-124-1&quot; id=&quot;pnote-124-1&quot;&gt;1&lt;/a&gt;] Il est également possible d'en définir avec un plugin mais ça dépasse le cadre de ce tutoriel.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-124-2&quot; id=&quot;pnote-124-2&quot;&gt;2&lt;/a&gt;] Vous aurez surement remarqué que ce bloc a été déplacé plus bas et en dehors du premier bloc de même nature.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 6. Exercice pratique, se limiter à la première page</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-6-Exercice-pratique-se-limiter-a-la-premiere-page</link>
    <guid isPermaLink="false">urn:md5:de3cfb702f572a18e56e461139bfa03f</guid>
    <pubDate>Mon, 09 Jul 2007 23:06:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Je continue la suite du petit exercice commencé dans &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/Balises-:-5-Exercice-pratique-utiliser-les-attributs-des-balises&quot; hreflang=&quot;fr&quot;&gt;ce billet&lt;/a&gt;. Pour rappel voilà son énoncé :&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;J'ai prévu d'afficher un bloc particulier sur la page d'accueil. Ce bloc contiendra le dernier billet publié d'une catégorie précise ou à défaut, un texte fixe. Cette catégorie s'appellera Flash et ne servira qu'à gérer ce genre de petits messages et par conséquent ses billets ne devront pas apparaitre dans le flux normal.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Nous avons vu comment exclure une catégorie du flux normal des billets, la catégorie &lt;em&gt;Flash&lt;/em&gt;. Voyons maintenant comment traiter le bloc qui doit être affiché sur la première page. J'ai choisi de mettre tout ce qui sera utilisé pour ce bloc dans un fichier particulier, nommé &lt;code&gt;_intro.html&lt;/code&gt;, et qui est inclus juste après la balise &lt;code&gt;&amp;lt;div id=&amp;quot;wrapper&amp;quot;&amp;gt;&lt;/code&gt; du fichier &lt;code&gt;home.html&lt;/code&gt;&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-123-1&quot; id=&quot;rev-pnote-123-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;. Voilà la portion de code du fichier &lt;code&gt;home.html&lt;/code&gt; (j'ai mis l'emphase sur ce que j'ai rajouté) :&lt;/p&gt;


&lt;pre&gt;&amp;lt;div id=&amp;quot;wrapper&amp;quot;&amp;gt;

&lt;strong&gt;&amp;lt;!-- # Franck Paul : ajout du bloc d'intro --&amp;gt;&lt;/strong&gt;
&lt;strong&gt;{{tpl:include src=&amp;quot;_intro.html&amp;quot;}}&lt;/strong&gt;&lt;/pre&gt;


&lt;p&gt;Ce sera la dernière modification du fichier &lt;code&gt;home.html&lt;/code&gt;, et vous aurez certainement remarqué au passage le signe &lt;code&gt;#&lt;/code&gt; utilisé dans le commentaire pour qu'il ne soit pas inclus dans le code HTML généré par DotClear 2.&lt;/p&gt;


&lt;p&gt;Voyons maintenant le contenu du fichier &lt;code&gt;_intro.html&lt;/code&gt;. Première chose à faire, encadrer tout le bloc dans une balise &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; afin de pouvoir lui appliquer des styles particuliers :&lt;/p&gt;


&lt;pre&gt;&amp;lt;div id=&amp;quot;introcontent&amp;quot;&amp;gt;
…
&lt;em&gt;(contenu du bloc)&lt;/em&gt;
…
&amp;lt;/div&amp;gt;&lt;/pre&gt;


&lt;p&gt;Passons maintenant au contenu du bloc. Celui-ci, billet ou texte fixe, doit être affiché uniquement sur la première page. Pour le déterminer, il faut utiliser le code suivant :&lt;/p&gt;


&lt;pre&gt;&amp;lt;tpl:Entries category=&amp;quot;!Flash&amp;quot; no_content=&amp;quot;1&amp;quot;&amp;gt;
   &amp;lt;tpl:Pagination&amp;gt;
      &amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;
      …
      &lt;em&gt;(affichage du dernier billet Flash ou d'un texte fixe)&lt;/em&gt;
      …
      &amp;lt;/tpl:PaginationIf&amp;gt;
   &amp;lt;/tpl:Pagination&amp;gt;
&amp;lt;/tpl:Entries&amp;gt;&lt;/pre&gt;


&lt;p&gt;Normalement vous devez avoir reconnu la première ligne, &lt;code&gt;&amp;lt;tpl:Entries category=&amp;quot;!Flash&amp;quot; no_content=&amp;quot;1&amp;quot;&amp;gt;&lt;/code&gt;, qui permet de retrouver la liste des billets ne faisant pas partie de la catégorie &lt;em&gt;Flash&lt;/em&gt;. On utilise l'attribut &lt;code&gt;no_content=&amp;quot;1&amp;quot;&lt;/code&gt; car nous n'avons pas besoin du contenu des billets. Vous reconnaitrez sans difficulté la balise qui ferme le bloc à la fin : &lt;code&gt;&amp;lt;/tpl:Entries&amp;gt;&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;À l'intérieur de ce bloc, qui définit une sorte de contexte où nous avons à notre disposition la liste des billets, nous pouvons utiliser un bloc spécifique à la pagination, &lt;code&gt;&amp;lt;tpl:Pagination&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;/tpl:Pagination&amp;gt;&lt;/code&gt;, qui permettra ensuite de tester la page courante à l'aide, encore une fois d'un bloc de test, &lt;code&gt;&amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;/tpl:PaginationIf&amp;gt;&lt;/code&gt;. L'attribut &lt;code&gt;start=&amp;quot;1&amp;quot;&lt;/code&gt; permet de tester si on est sur la première page&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-123-2&quot; id=&quot;rev-pnote-123-2&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;Pour résumer, on définit le contexte servant à déterminer le nombre de page (nombre de billets retrouvés divisé par le nombre de billets par page précisé dans les préférences du blog) et on vérifie que la page courante est la première.&lt;/p&gt;


&lt;p&gt;Une fois ce test effectué, nous allons récupérer, s'il existe, le dernier billet publié de la catégorie &lt;em&gt;Flash&lt;/em&gt;. Le bloc nécessaire pour obtenir celui-ci est le suivant :&lt;/p&gt;


&lt;pre&gt;&amp;lt;tpl:Entries category=&amp;quot;Flash&amp;quot; lastn=&amp;quot;1&amp;quot;&amp;gt;
…
&amp;lt;/tpl:Entries&amp;gt;&lt;/pre&gt;


&lt;p&gt;Ici on ne retient que la catégorie &lt;em&gt;Flash&lt;/em&gt; (attribut &lt;code&gt;category=&amp;quot;Flash&amp;quot;&lt;/code&gt;) et uniquement le dernier publié (attribut &lt;code&gt;lastn=&amp;quot;1&amp;quot;&lt;/code&gt;&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-123-3&quot; id=&quot;rev-pnote-123-3&quot;&gt;3&lt;/a&gt;]&lt;/sup&gt;).&lt;/p&gt;


&lt;p&gt;Intégrons maintenant ce code dans le code précédent (test de la première page). Cela donne cela :&lt;/p&gt;


&lt;pre&gt;&lt;strong&gt;&amp;lt;tpl:Entries category=&amp;quot;!Flash&amp;quot; no_content=&amp;quot;1&amp;quot;&amp;gt;&lt;/strong&gt;
   &amp;lt;tpl:Pagination&amp;gt;
      &amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;
         &lt;strong&gt;&amp;lt;tpl:Entries category=&amp;quot;Flash&amp;quot; lastn=&amp;quot;1&amp;quot;&amp;gt;&lt;/strong&gt;
         …
         &lt;strong&gt;&amp;lt;/tpl:Entries&amp;gt;&lt;/strong&gt;
      &amp;lt;/tpl:PaginationIf&amp;gt;
   &amp;lt;/tpl:Pagination&amp;gt;
&lt;strong&gt;&amp;lt;/tpl:Entries&amp;gt;&lt;/strong&gt;&lt;/pre&gt;


&lt;p&gt;Allo … Houston ? On a un problème !&lt;/p&gt;


&lt;p&gt;En effet il s'avère qu'on ne peut imbriquer des blocs &lt;em&gt;template&lt;/em&gt; de même nature&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-123-4&quot; id=&quot;rev-pnote-123-4&quot;&gt;4&lt;/a&gt;]&lt;/sup&gt; (&lt;code&gt;&amp;lt;tpl:Entries&amp;gt;&lt;/code&gt; en ce qui nous concerne) ! Comment contourner ce soucis ? Et bien en développant nos propres balises (ou fonctions) &lt;em&gt;template&lt;/em&gt; qui serviront à stocker le résultat des tests que nous effectuons (première page, présence d'au moins un billet publié dans la catégorie &lt;em&gt;Flash&lt;/em&gt;).&lt;/p&gt;


&lt;p&gt;Rendez-vous au prochain billet pour la suite des &lt;em&gt;templateurs&lt;/em&gt; fous \o/&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-123-1&quot; id=&quot;pnote-123-1&quot;&gt;1&lt;/a&gt;] Je rappelle que ce bloc ne doit être affiché que sur la page d'accueil. On pourra si nécessaire ré-utiliser ce fichier &lt;code&gt;_intro.html&lt;/code&gt; dans d'autres contextes si nécessaire.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-123-2&quot; id=&quot;pnote-123-2&quot;&gt;2&lt;/a&gt;] On peut également savoir si on est sur une autre page que la première en utilisant l'attribut &lt;code&gt;start=&amp;quot;0&amp;quot;&lt;/code&gt;. De même, on peut utiliser l'attribut &lt;code&gt;end=&amp;quot;1&amp;quot;&lt;/code&gt; pour déterminer si l'on est sur la dernière page, ou &lt;code&gt;end=&amp;quot;0&amp;quot;&lt;/code&gt; pour les autres pages.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-123-3&quot; id=&quot;pnote-123-3&quot;&gt;3&lt;/a&gt;] Si vous voulez les trois derniers billets, il vous suffit d'utiliser l'attribut &lt;code&gt;lastn=&amp;quot;3&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-123-4&quot; id=&quot;pnote-123-4&quot;&gt;4&lt;/a&gt;] J'en avais détaillé la raison dans &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/Balises-:-4-Ne-pas-imbriquer-des-balises-de-meme-nom&quot; hreflang=&quot;fr&quot;&gt;ce billet&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 5. Exercice pratique, utiliser les attributs des balises</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-5-Exercice-pratique-utiliser-les-attributs-des-balises</link>
    <guid isPermaLink="false">urn:md5:77f654bb7ce77401fe45338733b6aa29</guid>
    <pubDate>Mon, 09 Jul 2007 23:03:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Maintenant que nous avons vu l'essentiel de ce qu'il faut savoir à propos des &lt;em&gt;templates&lt;/em&gt; de Dotclear 2 nous allons faire un petit exercice pratique. Nous y verrons comment personnaliser un peu notre thème et au passage comment développer quelques petites fonctions très basiques en &lt;acronym title=&quot;PHP Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;.&lt;/p&gt;


&lt;p&gt;Prêts ? Alors voilà l'énoncé de l'exercice :&lt;/p&gt;


&lt;p&gt;J'ai prévu d'afficher un bloc particulier sur la page d'accueil. Ce bloc contiendra le dernier billet publié d'une catégorie précise ou à défaut, un texte fixe. Cette catégorie s'appellera &lt;em&gt;Flash&lt;/em&gt; et ne servira qu'à gérer ce genre de petits messages et par conséquent ses billets ne devront pas apparaitre dans le &lt;em&gt;flux&lt;/em&gt; normal&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-122-1&quot; id=&quot;rev-pnote-122-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;Traduit en pseudo langage informatique cela donnera ceci :&lt;/p&gt;


&lt;pre&gt;si premiere_page alors
   si billet_flash existe alors
      afficher billet_flash
   sinon
      afficher un texte fixe
   fin_si
fin_si
afficher billets_non_flash&lt;/pre&gt;


&lt;p&gt;Par où commencer ? Ce traitement doit s'appliquer uniquement sur la page d'accueil donc on fera les modifications sur le fichier &lt;code&gt;home.html&lt;/code&gt; du thème&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-122-2&quot; id=&quot;rev-pnote-122-2&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;Dans ce fichier on trouve normalement un bloc &lt;em&gt;template&lt;/em&gt; de cette forme :&lt;/p&gt;


&lt;pre&gt;&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;
   &amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
      &amp;lt;tpl:Entries&amp;gt;
…
      &amp;lt;/tpl:Entries&amp;gt;
   &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;


&lt;p&gt;Première chose à faire, surtout la plus aisée, exclure la catégorie &lt;em&gt;Flash&lt;/em&gt; de la liste des billets affichés normalement. Pour cela il suffit de rajouter l'attribut &lt;code&gt;category=&amp;quot;!Flash&amp;quot;&lt;/code&gt; dans la balise &lt;code&gt;&amp;lt;tpl:Entries&amp;gt;&lt;/code&gt;. Voilà le code modifié :&lt;/p&gt;


&lt;pre&gt;&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;
   &amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
      &amp;lt;tpl:Entries &lt;strong&gt;category=&amp;quot;!Flash&amp;quot;&lt;/strong&gt;&amp;gt;
…
      &amp;lt;/tpl:Entries&amp;gt;
   &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;


&lt;p&gt;Vous aurez peut-être remarqué, dans le fichier &lt;code&gt;home.html&lt;/code&gt;, un autre endroit où apparait la balise &lt;code&gt;&amp;lt;tpl:Entries no_content=&amp;quot;1&amp;quot;&amp;gt;&lt;/code&gt;, dans la section &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. Ici aussi il faut rajouter l'attribut &lt;code&gt;category=&amp;quot;!Flash&amp;quot;&lt;/code&gt; ce qui donnera :&lt;/p&gt;


&lt;pre&gt; &amp;lt;tpl:Entries category=&amp;quot;!Flash&amp;quot; no_content=&amp;quot;1&amp;quot;&amp;gt;&lt;/pre&gt;


&lt;p&gt;Dernière précision, le &lt;code&gt;!&lt;/code&gt; utilisé devant le nom de la catégorie sert à exclure les billets de cette dernière de la liste de ceux qui seront traités (affichés)&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-122-3&quot; id=&quot;rev-pnote-122-3&quot;&gt;3&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;Nous voilà donc avec une page d'accueil dont les billets de la catégorie &lt;em&gt;Flash&lt;/em&gt; ne seront pas affichés. Prochaine étape, le bloc d'introduction sur la première page. Nous verrons dans le prochain billet comment déterminer si l'on est sur la première page ou pas et le problème — facile à résoudre — que cela peut poser pour la suite de notre exercice.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-122-1&quot; id=&quot;pnote-122-1&quot;&gt;1&lt;/a&gt;] Par contre j'ai choisi de laisser l'accès à tous ces billets particuliers dans la liste des catégories ou dans les archives.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-122-2&quot; id=&quot;pnote-122-2&quot;&gt;2&lt;/a&gt;] Si votre thème ne possède pas un tel fichier, il suffit de faire une copie de celui qui est présent dans le répertoire du thème par défaut (répertoire &lt;code&gt;default&lt;/code&gt;) et de le copier dans le répertoire de votre thème.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-122-3&quot; id=&quot;pnote-122-3&quot;&gt;3&lt;/a&gt;] Vous pouvez si nécessaire mettre une liste de catégorie dont les noms seront séparés par une virgule. Tous les billets de ces catégories seront alors ignorés. Bien sûr la réciproque est vraie. En ne mettant pas le &lt;code&gt;!&lt;/code&gt; devant la ou les catégories, nous ne récupérerons que les billets de cette ou de ces catégories.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 4. Ne pas imbriquer des balises de même nom</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-4-Ne-pas-imbriquer-des-balises-de-meme-nom</link>
    <guid isPermaLink="false">urn:md5:d9484f3e22e78ca0840291271cdae027</guid>
    <pubDate>Mon, 09 Jul 2007 23:01:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Vous savez maintenant qu'il y a deux formes de balises pour les &lt;em&gt;templates&lt;/em&gt;, les simples (&lt;code&gt;{{tpl:…}}&lt;/code&gt;) et les blocs (&lt;code&gt;&amp;lt;tpl:…&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;/tpl:…&amp;gt;&lt;/code&gt;).&lt;/p&gt;


&lt;p&gt;Une des précautions à prendre à propos des blocs est qu'il ne faut pas imbriquer deux blocs de même nom. Je m'explique sur un exemple. Voyez le code suivant :&lt;/p&gt;


&lt;pre&gt;1. &amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;
2.   &amp;lt;div id=&amp;quot;intro&amp;quot;&amp;gt;
3.   &amp;lt;p&amp;gt;Début du blog&amp;lt;/p&amp;gt;
4.   &amp;lt;tpl:PaginationIf end=&amp;quot;1&amp;quot;&amp;gt;
5.     &amp;lt;p&amp;gt;Fin du blog&amp;lt;/p&amp;gt;
6.   &amp;lt;/tpl:PaginationIf&amp;gt;
7.   &amp;lt;/div&amp;gt;
8. &amp;lt;/tpl:PaginationIf&amp;gt;&lt;/pre&gt;


&lt;p&gt;Logiquement il signifie ceci :&lt;/p&gt;


&lt;p&gt;Si c'est la première page alors on ouvre une &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; avec un texte particulier (&lt;q&gt;Début du blog&lt;/q&gt;), puis, si de plus, c'est également la dernière page — donc il n'y a qu'une page, alors on rajoutera un autre texte (&lt;q&gt;Fin du blog&lt;/q&gt;). Chacune des conditions est testée à l'aide d'une balise intitulée &lt;code&gt;&amp;lt;tpl:PaginationIf …&amp;gt;&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Au moment d'interpréter les balises &lt;code&gt;&amp;lt;tpl:…&amp;gt;&lt;/code&gt; pour les remplacer par le code PHP nécessaire, Dotclear 2 va trouver la première balise sur la ligne 1. C'est une balise ouvrante et il va ensuite chercher la première balise fermante de même nom. Celle-ci se trouve sur la ligne 6. Ce sont donc les lignes 2 à 5 qui vont dépendre de la condition testée à la ligne 1 :&lt;/p&gt;


&lt;pre&gt;1. &amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;
2.   &lt;strong&gt;&amp;lt;div id=&amp;quot;intro&amp;quot;&amp;gt;&lt;/strong&gt;
3.   &lt;strong&gt;&amp;lt;p&amp;gt;Début du blog&amp;lt;/p&amp;gt;&lt;/strong&gt;
4.   &lt;strong&gt;&amp;lt;tpl:PaginationIf end=&amp;quot;1&amp;quot;&amp;gt;&lt;/strong&gt;
5.     &lt;strong&gt;&amp;lt;p&amp;gt;Fin du blog&amp;lt;/p&amp;gt;&lt;/strong&gt;
6.   &amp;lt;/tpl:PaginationIf&amp;gt;
7.   &amp;lt;/div&amp;gt;
8. &amp;lt;/tpl:PaginationIf&amp;gt;&lt;/pre&gt;


&lt;p&gt;Bien sûr Dotclear 2 va traiter ces lignes pour éventuellement y chercher des balises &lt;em&gt;templates&lt;/em&gt; à remplacer, et il va trouver celle qui se trouve sur la ligne 4, seulement cette balise n'a pas de balise fermante associée et par conséquent sera ignorée.&lt;/p&gt;


&lt;p&gt;Une fois ce premier bloc de balise traité (lignes 1 à 6), Dotclear 2 va traiter la suite — c'est à dire les lignes 7 à 8, y trouver une balise fermante sur la ligne 8 mais comme aucune balise ouvrante n'a été trouvée auparavant, elle sera également ignorée :&lt;/p&gt;


&lt;p&gt;Conclusion nous allons nous retrouver avec le code suivant (l'emphase est mise sur les balises non traitées)&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-121-1&quot; id=&quot;rev-pnote-121-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; :&lt;/p&gt;


&lt;pre&gt;1. &amp;lt;?php if (page_courante == 1) : ?&amp;gt;
2.   &amp;lt;div id=&amp;quot;intro&amp;quot;&amp;gt;
3.   &amp;lt;p&amp;gt;Début du blog&amp;lt;/p&amp;gt;
4.   &lt;strong&gt;&amp;lt;tpl:PaginationIf end=&amp;quot;1&amp;quot;&amp;gt;&lt;/strong&gt;
5.     &amp;lt;p&amp;gt;Fin du blog&amp;lt;/p&amp;gt;
6.   &amp;lt;?php endif; ?&amp;gt;
7.   &amp;lt;/div&amp;gt;
8. &lt;strong&gt;&amp;lt;/tpl:PaginationIf&amp;gt;&lt;/strong&gt;&lt;/pre&gt;


&lt;p&gt;C'est ce code qui va être ensuite pris en charge par le serveur pour interpréter le code PHP inséré et il va ignorer les balises laissées par Dotclear 2, éventuellement en vous gratifiant d'un petit message au passage. Bref pas glop !&lt;/p&gt;


&lt;p&gt;Donc pour résumer, si vous utilisez une balise ouvrante quelque part, pensez à insérer la balise fermante correspondante avant de la réutiliser. Parfois cette limitation peut poser problème et je vous expliquerai dans un prochain billet comment écrire vos propres balises pour palier ce problème.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-121-1&quot; id=&quot;pnote-121-1&quot;&gt;1&lt;/a&gt;] La ligne 1 est un exemple de code PHP plausible mais n'est pas la ligne réellement insérée par Dotclear 2. J'ai préféré mettre quelque chose de simple pour éviter d'encombrer la démonstration.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 3. les deux formes de balises</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-3-les-deux-formes-de-balises</link>
    <guid isPermaLink="false">urn:md5:850120ff9e9a73e057415a6eb94abf23</guid>
    <pubDate>Mon, 09 Jul 2007 22:55:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Je continue ma petite série sur les &lt;em&gt;templates&lt;/em&gt; utilisés pour les thèmes de Dotclear 2. Je vous avais parlé dans &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/Balises-:-1-Introduction-aux-balises-de-Dotclear-2&quot; hreflang=&quot;fr&quot;&gt;ce premier billet&lt;/a&gt; des deux formes de balises spécifiques aux templates :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;celles qui sont sous la forme {{tpl:…}}&lt;/li&gt;
&lt;li&gt;celles qui sont sous la forme &amp;lt;tpl:…&amp;gt; et &amp;lt;/tpl:…&amp;gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ces balises sont remplacées par Dotclear 2 par des instructions &lt;acronym title=&quot;PHP Hypertext Processor&quot;&gt;PHP&lt;/acronym&gt; qui seront ensuite traitées par le serveur.&lt;/p&gt;


&lt;p&gt;La première forme est principalement utilisée pour générer du contenu comme par exemple l'affichage de la description du blog dans l'entête avec la balise suivante :&lt;/p&gt;


&lt;pre&gt;{{tpl:BlogDescription}}&lt;/pre&gt;


&lt;p&gt;Que va faire Dotclear 2 avec cette balise ? Et bien il va simplement la remplacer par le code PHP suivant :&lt;/p&gt;


&lt;pre&gt;&amp;lt;?php echo context::global_filter($core-&amp;gt;blog-&amp;gt;desc,0,0,0,0,0); ?&amp;gt;&lt;/pre&gt;


&lt;p&gt;Ensuite le serveur interprètera cette instruction qui sert à récupérer la description du blog dans la base de donnée et à l'afficher&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-120-1&quot; id=&quot;rev-pnote-120-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;La deuxième forme, composée de deux balises, une ouvrante (&lt;code&gt;&amp;lt;tpl:…&amp;gt;&lt;/code&gt;) et une fermante (&lt;code&gt;&amp;lt;/tpl:…&amp;gt;&lt;/code&gt;), permet principalement de traiter un contenu HTML&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-120-2&quot; id=&quot;rev-pnote-120-2&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt; seulement si une condition est remplie (balise de test) ou autant de fois que nécessaire (balise de boucle).&lt;/p&gt;


&lt;p&gt;Deux exemples, un pour pour chaque type :&lt;/p&gt;


&lt;p&gt;Imaginons que je souhaite afficher un texte uniquement si on se trouve sur la page numéro 1 du blog et pas sur les suivantes. Je vais utiliser le code suivant dans mon thème :&lt;/p&gt;


&lt;pre&gt;&amp;lt;tpl:PaginationIf start=&amp;quot;1&amp;quot;&amp;gt;
  &amp;lt;p&amp;gt;Un joli texte affiché uniquement sur la première page.&amp;lt;/p&amp;gt;
&amp;lt;/tpl:PaginationIf&amp;gt;&lt;/pre&gt;


&lt;p&gt;La première balise permet de tester une condition, ici &lt;q&gt;Est-on au &lt;em&gt;début&lt;/em&gt; de la pagination, c'est-à-dire sur la page 1 ?&lt;/q&gt;. Ensuite nous trouvons le contenu qui sera traité uniquement si la condition est remplie, puis une balise qui indique la fin de ce qui est dépendant de la condition testée.&lt;/p&gt;


&lt;p&gt;Imaginons maintenant que je souhaite afficher les 10 derniers billets d'une catégorie. Je vais utiliser le code suivant :&lt;/p&gt;


&lt;pre&gt;&amp;lt;tpl:Entries category=&amp;quot;Flash&amp;quot; lastn=&amp;quot;10&amp;quot;&amp;gt;
  …
  &lt;em&gt;affichage du contenu du billet (titre, introduction, …)&lt;/em&gt;
  …
&amp;lt;/tpl:Entries&amp;gt;&lt;/pre&gt;


&lt;p&gt;La première balise permet de définir ce qu'on veut récupérer, ici les 10 derniers billets (&lt;code&gt;lastn=&amp;quot;10&amp;quot;&lt;/code&gt;) de la catégorie Flash (&lt;code&gt;category=&amp;quot;Flash&amp;quot;&lt;/code&gt;). Puis pour chacun de ces 10 billets, tout ce qui se trouve jusqu'à la balise de fin (&lt;code&gt;&amp;lt;/tpl:Entries&amp;gt;&lt;/code&gt;) sera répété.&lt;/p&gt;


&lt;p&gt;J'espère que c'est suffisamment clair pour tout le monde. Si vous avez tout compris jusqu'ici et bien vous savez tout (ou presque) du système de template de Dotclear 2. Je vous parlerai bientôt de ce qu'on peut faire avec tout ça, des quelques précautions qu'il faut prendre et tout ça sur un exemple concret&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-120-3&quot; id=&quot;rev-pnote-120-3&quot;&gt;3&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-120-1&quot; id=&quot;pnote-120-1&quot;&gt;1&lt;/a&gt;] L'instruction PHP &lt;code&gt;echo&lt;/code&gt; est utilisée pour afficher quelque chose dans la page que l'on est en train de visualiser.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-120-2&quot; id=&quot;pnote-120-2&quot;&gt;2&lt;/a&gt;] Ce contenu peut également comporter des balises &lt;em&gt;templates&lt;/em&gt;, des deux formes.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-120-3&quot; id=&quot;pnote-120-3&quot;&gt;3&lt;/a&gt;] Il s'agit de mon futur thème Dotclear 2, mais chut, personne n'est au courant !&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 2. les commentaires invisibles et le PHP dans les thèmes</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-2-les-commentaires-invisibles-et-le-PHP-dans-les-themes</link>
    <guid isPermaLink="false">urn:md5:df86e0ac7e1f439db2a322d285b6fbdd</guid>
    <pubDate>Mon, 09 Jul 2007 22:39:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Vous savez maintenant qu'il y a une étape de plus dans le traitement des thèmes avec Dotclear 2. Avant d'aller plus loin dans les explications sur ces fameuses balises &lt;em&gt;template&lt;/em&gt; dont je vous parlais précédemment (voir &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/Balises-:-1-Introduction-aux-balises-de-Dotclear-2&quot; hreflang=&quot;fr&quot;&gt;ce billet&lt;/a&gt;), deux petites remarques :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pas la peine de mettre des instructions en PHP dans les fichiers du thème vu qu'elles sont supprimées par Dotclear 2 lors du traitement.&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-119-1&quot; id=&quot;rev-pnote-119-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; Si vous avez besoin de fonctions particulières en PHP pour obtenir ce que vous souhaitez, c'est prévu dans Dotclear 2 et je vous en dirai rapidement comment le faire.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Les commentaires HTML ayant la forme &lt;code&gt;&amp;lt;!-- # … --&amp;gt;&lt;/code&gt; — notez le &lt;code&gt;#&lt;/code&gt; au début — seront également supprimés pendant le traitement. Ce qui veut dire que vous pouvez — c'est même fortement conseillé — commenter à loisir toutes les modifications que vous ferez sans pour cela surcharger la page qui résultera du traitement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un exemple étant plus parlant, voilà un exemple de fichier HTML :&lt;/p&gt;


&lt;pre&gt;1. &amp;lt;div id=&amp;quot;intro&amp;quot;&amp;gt;
2.
3. &amp;lt;!-- # Affichage du résultat d'un appel de fonction PHP --&amp;gt;
4. &amp;lt;?php echo dcMyTemplate::myFunction(); ?&amp;gt;
5.
6. &amp;lt;!-- Debut du bloc --&amp;gt;
7. &amp;lt;p&amp;gt;Lorem Ipsum …&amp;lt;/p&amp;gt;
8. &amp;lt;/div&amp;gt;&lt;/pre&gt;


&lt;p&gt;Et voilà ce qu'il en ressortira une fois passé dans les fourches caudines de Dotclear 2 :&lt;/p&gt;


&lt;pre&gt;1. &amp;lt;div id=&amp;quot;intro&amp;quot;&amp;gt;
2. 
3. 
4.
5.
6. &amp;lt;!-- Debut du bloc --&amp;gt;
7. &amp;lt;p&amp;gt;Lorem Ipsum …&amp;lt;/p&amp;gt;
8. &amp;lt;/div&amp;gt;&lt;/pre&gt;


&lt;p&gt;Les lignes 3 et 4 qui contenaient respectivement un commentaire masquable (avec le &lt;code&gt;#&lt;/code&gt; au début) et du code PHP ont été supprimées. Vous remarquerez que le commentaire de la ligne 6 est resté tel quel et qu'il sera donc visible dans le code HTML final de la page.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-119-1&quot; id=&quot;pnote-119-1&quot;&gt;1&lt;/a&gt;] Bien sûr il y a un moyen de désactiver ceci, ce qui permettra l'interprétation du code par le serveur, mais cela reste spécifique à votre installation et n'est en aucun cas la configuration standard. Il est donc illusoire de vouloir distribuer un thème nécessitant ce changement de configuration.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Balises : 1. Introduction aux balises de Dotclear 2</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/09/Balises-%3A-1-Introduction-aux-balises-de-Dotclear-2</link>
    <guid isPermaLink="false">urn:md5:1352d0e31127ee006c12e3e651fc2ca9</guid>
    <pubDate>Mon, 09 Jul 2007 22:35:00 +0200</pubDate>
    <dc:creator>Franck</dc:creator>
        <category>Thèmes</category>
        <category>templates</category>    
    <description>    &lt;p&gt;Voilà un premier billet à propos des thèmes de Dotclear 2 et plus particulièrement au sujet des balises &lt;em&gt;templates&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;Un thème Dotclear 1 est constitué de fichiers &lt;acronym title=&quot;PHP Hypertext Processor&quot;&gt;PHP&lt;/acronym&gt; directement interprétés par le serveur pour générer la page HTML qui sera affichée&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#pnote-118-1&quot; id=&quot;rev-pnote-118-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;, alors qu'un thème Dotclear 2 est constitué de fichiers &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt; contenant des balises spéciales qui seront traitées par Dotclear 2 pour générer des fichiers PHP qui seront ensuite, comme Dotclear 1, interprétés par le serveur pour générer la page HTML qui sera affichée.&lt;/p&gt;


&lt;p&gt;C'est clair ? Comment ça non ? Bon d'accord, comme une image vaut pas mal de mots, voilà un petit schéma qui montre la différence :&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://dissitou.klafoutis.org/public/images/Y2007/balises/DC2_A.png&quot; alt=&quot;Différences entre DC1 et DC2&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;À savoir :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Le serveur comprend le langage PHP et est capable de l'interpréter pour produire finalement une page HTML&lt;/li&gt;
&lt;li&gt;Le navigateur ne comprend &lt;strong&gt;que&lt;/strong&gt; le langage HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le traitement supplémentaire, noté [1] sur le schéma, est fait par Dotclear 2 juste avant l'interprétation du code PHP par le serveur, noté [2] sur le schéma. Le résultat de ce traitement supplémentaire est d'ailleurs conservé dans un répertoire &lt;em&gt;cache&lt;/em&gt; (voir le dossier &lt;code&gt;tmp&lt;/code&gt; et son contenu) pour gagner du temps les fois suivantes.&lt;/p&gt;


&lt;p&gt;Que fait Dotclear 2 pendant cette étape 1 ? Et bien il recherche et remplace deux types de balises présentes dans les fichiers HTML du thème :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;celles qui sont sous la forme &lt;code&gt;{{tpl:…}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;celles qui sont sous la forme &lt;code&gt;&amp;lt;tpl:…&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;/tpl:…&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je vous expliquerai à quoi elles servent dans un prochain billet.&lt;/p&gt;


&lt;p&gt;Pour en savoir plus :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;À propos de l'étrange conversation entre le serveur et votre navigateur, je vous conseille &lt;a href=&quot;http://www.kozlika.org/kozeries/post/2006/11/25/652-ca-se-passe-comme-ca&quot; hreflang=&quot;fr&quot;&gt;ce billet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;La &lt;a href=&quot;http://doc.dotclear.net/2.0/resources/themes&quot; hreflang=&quot;fr&quot;&gt;documentation&lt;/a&gt; officielle bien sûr&lt;/li&gt;
&lt;li&gt;Tous les billets indispensables chez &lt;a href=&quot;http://dissitou.klafoutis.org/&quot; hreflang=&quot;fr&quot;&gt;Mme la fée&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Le &lt;a href=&quot;http://www.dotclear.net/forum/&quot; hreflang=&quot;fr&quot;&gt;forum&lt;/a&gt;, en cherchant un peu&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/07/09/#rev-pnote-118-1&quot; id=&quot;pnote-118-1&quot;&gt;1&lt;/a&gt;] J'ai décrit dans &lt;a href=&quot;http://franck.paul.free.fr/dotclear/?2005/04/21/141-cinematique-de-dotclear&quot; hreflang=&quot;fr&quot;&gt;ce billet&lt;/a&gt; comment ceci fonctionne.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Faire l'inventaire</title>
    <link>http://dissitou.klafoutis.org/post/2007/07/01/Faire-linventaire</link>
    <guid isPermaLink="false">urn:md5:af6d6ac8db1e8b376e3e9a370f9cae45</guid>
    <pubDate>Sun, 01 Jul 2007 10:57:00 +0200</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Débuter avec Dotclear 2.0</category>
            
    <description>    &lt;p&gt;Le blog est installé, il est en ligne et tout fonctionne correctement. Si vous êtes satisfait de ce premier blog et du thème que vous avez choisi &lt;a href=&quot;http://www.campingclairdelune.fr/tests/?gallery/dotclear/themes-dc-2#gallery&quot;&gt;parmi ceux disponibles&lt;/a&gt; (un tutoriel indique &lt;a href=&quot;http://doc.dotclear.net/2.0/admin/themes#installer-un-theme&quot;&gt;comment installer un nouveau thème&lt;/a&gt;), il ne vous reste plus qu'à rédiger vos billets, en vous référant au &lt;a href=&quot;http://doc.dotclear.net/2.0/usage&quot;&gt;manuel d'utilisation&lt;/a&gt; pour découvrir plus avant votre outil et les fonctionnalités de l'interface d'édition du billet. De façon générale d'ailleurs, survoler la doc, même si vous ne l'apprenez pas par cœur, vous permettra de vous souvenir vaguement « avoir lu quelque part quelque chose là-dessus » dont vous pourriez avoir besoin ultérieurement. Si le manuel ne répond pas à vos questions, rendez-vous &lt;a href=&quot;http://www.dotclear.net/forum/&quot;&gt;sur le forum&lt;/a&gt;, il se trouvera bien quelqu'un pour vous orienter.&lt;/p&gt;


&lt;p&gt;Si vous ne vous sentez pas encore tout à fait chez vous, vous pouvez procéder à des personnalisations. Ne cherchez pas à tout changer d'un coup, surtout si vous débutez (mais pas que). Procédez par petites étapes successives afin de maîtriser les changements que vous opérez et pouvoir revenir en arrière facilement car vous vous souviendrez de la manip que vous venez de faire.&lt;/p&gt;


&lt;h3&gt;Ce qu'il vous faut savoir&lt;/h3&gt;


&lt;p&gt;Pour éviter les grosses bêtises et surtout faciliter votre travail, avoir une idée générale du fonctionnement et de l'organisation de la mécanique qui pilote votre blog peut vous être fort utile.&lt;/p&gt;


&lt;h4&gt;Le fonctionnement global&lt;/h4&gt;


&lt;p&gt;Si vous avez suivi le conseil ci-dessus et que vous avez regardé la doc, vous avez sûrement lu le &lt;a href=&quot;http://doc.dotclear.net/2.0/overview/how-does-it&quot;&gt;comment ça marche ?&lt;/a&gt;. Je le répète ici sommairement pour les feignasses : tout ce qui concerne le contenu du blog est stocké dans une base de données placée sur un serveur spécifique (le fameux « serveur sql » dont on vous demande le nom et les login et mot de passe lors de l'installation) ; ce qui se trouve sur votre serveur de fichiers (ou serveur ftp) ce sont tous les fichiers qui s'occupent du traitement et de la présentation de ces données.&lt;/p&gt;


&lt;h4&gt;Les fichiers de Dotclear&lt;/h4&gt;


&lt;p&gt;Situés donc, sur votre serveur de fichiers, ils sont regroupés dans le répertoire &lt;strong&gt;dotclear&lt;/strong&gt; (ou tout autre nom que vous lui aurez donné lors de l'install). Parcourons-les rapidement (en souligné, les noms de sous-répertoires) :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;ins&gt;admin&lt;/ins&gt; : contient tous les fichiers de l'administration du blog. &lt;em&gt;Pas touche.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;cache&lt;/ins&gt; : un répertoire qui stocke des informations au fur et à mesure pour éviter à dotclear d'avoir à tout « recalculer » à chaque fois. Il se vide périodiquement quand il a atteint sa taille maximale, vous n'aurez en principe pas à vous en occuper.&lt;/li&gt;
&lt;li&gt;CHANGELOG : un fichier informatif qui accompagne chaque version de dotclear et indique ce qui a été modifié depuis la version précédente. &lt;em&gt;Pas touche.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;db&lt;/ins&gt; : je ne sais même pas à quoi ça sert, c'est vous dire si vous pouvez laisser tomber et ne pas vous en préoccuper...&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;inc&lt;/ins&gt; : le cœur du moteur. C'est là que se situent tous les outils de traitement, évidemment : &lt;em&gt;pas touche&lt;/em&gt; (note : on verra que certains fichiers peuvent néanmoins réclamer une attention particulière mais nous n'en sommes pas là).&lt;/li&gt;
&lt;li&gt;index.php : la page de démarrage ; elle sert de centre d'aiguillage vers votre (ou vos) blog(s). (Note : si vous connaissez un peu le html, ne faites pas l'erreur de croire qu'il s'agit de la page d'accueil comme c'est généralement le cas des pages ainsi nommées.)&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;locales&lt;/ins&gt; : contient tous les fichiers de traduction permettant de basculer sur une interface dans une autre langue ou d'afficher les termes standards des thèmes dans la langue du blog. Pour le moment, ce répertoire contient par défaut les répertoire de l'anglais et du français. Les traducteurs vers d'autres langues ajoutent ici d'autres sous-répertoires.&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;plugins&lt;/ins&gt; : contient les répertoires d'extensions des fonctionnalités du blog. Lorsqu'on ajoute un plugin, son répertoire vient se placer ici. Il vous faudra d'ailleurs parfois le faire manuellement si la configuration de votre hébergeur interdit l'installation automatique.&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;public&lt;/ins&gt; : c'est le répertoire des médias : images, sons, vidéos, fichiers que vous souhaitez mettre en pièce jointe, etc. On les atteint via le ftp ou depuis l'interface d'administration -&amp;gt; Gestionnaire de médias.&lt;/li&gt;
&lt;li&gt;&lt;ins&gt;themes&lt;/ins&gt; : répertoire des thèmes, autrement dit des fichiers déterminant la présentation du blog. C'est ici que 90% du travail de personnalisation s'effectue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;On commence par...&lt;/h3&gt;


&lt;p&gt;Quelle pourrait être la première étape de personnalisation ?&lt;/p&gt;


&lt;h4&gt;Tout un blog bac à sable...&lt;/h4&gt;


&lt;p&gt;Pourquoi ne pas créer tout de suite un second blog qui vous servira de bac à sable ? Dotclear 2 offre la possibilité de créer facilement plusieurs blogs sur la même installation. Vous pourrez ainsi y trafiquer tout à loisir sans craindre de casser autre chose qu'un laboratoire et vos lecteurs continueront de lire tranquillement vos billets sans être gênés par vos expérimentations. Si vous optez pour cette solution, &lt;a href=&quot;http://doc.dotclear.net/2.0/admin/multiblog&quot;&gt;créez un deuxième blog&lt;/a&gt; et par exemple importez-y &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/01/09/Aorakits-%3A-3-Un-blog-de-test&quot;&gt;un blog de test&lt;/a&gt;. Voilà, votre chantier est prêt.&lt;/p&gt;


&lt;h4&gt;... ou au moins un nouveau thème&lt;/h4&gt;


&lt;p&gt;L'étape ci-dessus n'est en aucun cas obligatoire. Vous pouvez tout à fait travailler directement à vos personnalisations si créer un nouveau blog spécialement dédié vous semble inutile ou compliqué. A vous de voir. Vous pouvez alors passer directement au paragraphe suivant :&lt;/p&gt;


&lt;h4&gt;Et en tous les cas, créer un nouveau thème&lt;/h4&gt;


&lt;p&gt;On l'a vu, l'essentiel des personnalisations passe par des modifications de thème. Le billet suivant traitera donc de l'articulation d'un thème, des fichiers qui le composent et de l'étape préalable à toute personnalisation de celui-ci.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Bonjour, c'est pour un sondage...</title>
    <link>http://dissitou.klafoutis.org/post/2007/04/21/Bonjour-cest-pour-un-sondage</link>
    <guid isPermaLink="false">urn:md5:4342fee45356582d9fa4ecb58401f184</guid>
    <pubDate>Sat, 21 Apr 2007 05:46:00 +0000</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Trucs divers</category>
            
    <description>    &lt;p&gt;La rédaction de la &lt;a href=&quot;http://doc.dotclear.net&quot;&gt;documentation&lt;/a&gt; pour les versions 1.2 et 2.0 de Dotclear arrivant à son terme (du moins pour les parties dont je peux m'occuper), je vais pouvoir reprendre les tutoriels pour dc 2.0 ici. J'en vois quatre catégories possibles pour ce qui concerne les thèmes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Portage des thèmes de 1.2 vers 2.0&lt;/li&gt;
&lt;li&gt;Comment personnaliser un thème existant (en partant de celui par défaut par exemple) ?&lt;/li&gt;
&lt;li&gt;Un thème en kit (dans l'esprit de &lt;a href=&quot;http://dotclear.khlevina.info/kit&quot;&gt;celui pour 1.2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Créer un thème pour Dotclear de A à Z.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Par quoi je commence ? Ou vous avez d'autres besoins / souhaits non compris dans l'un des quatre sujets précédents ?&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Et je recrute aussi.&lt;/strong&gt; Par ailleurs, pour ceux qui voudraient donner un coup de main, j'ai quelques idées sur la question :)&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Total Validator</title>
    <link>http://dissitou.klafoutis.org/post/2007/04/10/Total-Validator</link>
    <guid isPermaLink="false">urn:md5:506e6ab5d9e07fb060b6ec4848cf01de</guid>
    <pubDate>Tue, 10 Apr 2007 19:22:00 +0200</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Trucs divers</category>
        <category>css</category><category>mais elle a bien raison quand même</category><category>outils online</category>    
    <description>    &lt;p&gt;Pinaise les gens, je viens de trouver l'arme ultime, le couteau suisse de la validation, le top du must : &lt;a href=&quot;http://www.totalvalidator.com/index.html&quot;&gt;Total Validator&lt;/a&gt;. C'est pas trop d'la bombe de balle ? (Via &lt;a href=&quot;http://veerle.duoh.com/blog/&quot;&gt;Veerle Blog&lt;/a&gt;.)&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Apportez votre pierre à l'édifice !</title>
    <link>http://dissitou.klafoutis.org/post/2007/03/08/Apportez-votre-pierre-a-ledifice</link>
    <guid isPermaLink="false">urn:md5:7eb707fd4103324c2dfca439bc04f473</guid>
    <pubDate>Thu, 08 Mar 2007 10:22:00 +0000</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Trucs divers</category>
        <category>documentation</category>    
    <description>    &lt;p&gt;Vous avez constaté des trous dans la &lt;a href=&quot;http://doc.dotclear.net/2.0/&quot;&gt;documentation de Dotclear&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Vous y avez relevé des erreurs ou fautes d'orthographe ?&lt;/p&gt;


&lt;p&gt;Vous trouvez telle explication peu claire ou incomplète, telle formulation à revoir ?&lt;/p&gt;


&lt;p&gt;Vous avez installé un blog sur un autre hébergement que ceux &lt;a href=&quot;http://doc.dotclear.net/2.0/hebergeurs&quot;&gt;déjà listés&lt;/a&gt; et vous pourriez rédiger un pas à pas sur &lt;a href=&quot;http://doc.dotclear.net/2.0/hosting/free.fr&quot;&gt;l'un&lt;/a&gt; &lt;a href=&quot;http://doc.dotclear.net/2.0/hosting/hosteur&quot;&gt;de&lt;/a&gt; &lt;a href=&quot;http://doc.dotclear.net/2.0/hosting/lost-oasis&quot;&gt;ces&lt;/a&gt; &lt;a href=&quot;http://doc.dotclear.net/2.0/hebergeurs/ovh&quot;&gt;modèles&lt;/a&gt; ?&lt;/p&gt;


&lt;p&gt;Vous avez installé plusieurs blogs avec une autre méthode que &lt;a href=&quot;http://doc.dotclear.net/2.0/admin/multiblog&quot;&gt;celles-ci&lt;/a&gt; ?&lt;/p&gt;


&lt;p&gt;Vous avez des suggestions diverses et variées ?&lt;/p&gt;


&lt;p&gt;Contribuez à l'amélioration de la documentation, envoyez vos mails à documentation(@)dotclear(.)net. Quel que soit votre niveau vous pouvez nous aider, ne serait-ce qu'en expérimentant son utilisation.&lt;/p&gt;


&lt;p&gt;Et si vous faites partie des pressés pour la sortie de la release, sachez qu'elle ne se fera pas sans que la doc soit complète, vous pouvez donc faire avancer le schmilblick vous aussi ;)&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Je ne vous laisserai pas vous lancer sans avoir insisté sur deux-trois trucs importants</title>
    <link>http://dissitou.klafoutis.org/post/2007/02/01/Je-ne-vous-laisserai-pas-vous-lancer-sans-avoir-insiste-sur-deux-trois-trucs-importants</link>
    <guid isPermaLink="false">urn:md5:51bc531fab803e55d36b0285753b67ed</guid>
    <pubDate>Thu, 01 Feb 2007 20:52:00 +0100</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Débuter avec Dotclear 2.0</category>
        <category>elle sait pas quoi inventer pour emmerder le monde</category><category>mais elle a bien raison quand même</category>    
    <description>    &lt;p&gt;Non parce que vraiment, vous pouvez lire en diagonale tout ce que vous voudrez mais là je vais carrément vous donner des ordres :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sauvegardez souvent, sauvegardez proprement.&lt;/li&gt;
&lt;li&gt;Soyez toujours capables de revenir en arrière.&lt;/li&gt;
&lt;li&gt;Ne vous lancez jamais dans aucune modification sans du temps et de la zénitude devant vous.&lt;/li&gt;
&lt;li&gt;Faites un pas après l'autre.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ça vous l'écrivez en gros sur une feuille, vous le signez avec votre sang et vous me l'envoyez sous contrôle d'huissier. Je détaille.&lt;/p&gt;


&lt;h3&gt;Les sauvegardes&lt;/h3&gt;

&lt;p&gt;Quel que soit le soin que vous apporterez à votre blog, vous ne serez jamais à l'abri d'une fausse manip, d'un coup de grisou chez votre hébergeur, d'un acte malveillant (beaucoup plus rares que les légendes urbaines le racontent mais ça existe). Parfois vous pourrez réparer et parfois non. Et dans ce cas seule la sauvegarde que vous aurez précieusement conservée par devers vous vous permettra de redonner à votre blog allure &lt;del&gt;humaine&lt;/del&gt; bloguienne.&lt;/p&gt;


&lt;p&gt;Ce qu'il faut sauvegarder :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le contenu de votre blog (billets, utilisateurs, commentaires...)&lt;/li&gt;
&lt;li&gt;les medias (images, mp3, séquences vidéo...)&lt;/li&gt;
&lt;li&gt;les fichiers personnalisés de présentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je ne vous explique pas &lt;a href=&quot;http://doc.dotclear.net/2.0/administration/sauvegarde&quot;&gt;comment&lt;/a&gt; ni &lt;a href=&quot;http://doc.dotclear.net/2.0/presentation/comment_ca_marche&quot;&gt;pourquoi&lt;/a&gt; puisque tout ça est dans la &lt;a href=&quot;http://doc.dotclear.net/2.0&quot;&gt;documentation&lt;/a&gt;. Retenez juste que dès l'ouverture de votre blog il vous faudra le faire régulièrement. A mon sens, selon la fréquence à laquelle vous publiez entre une fois par semaine et une fois par mois est le minimum pour le contenu et les medias. Pour les fichiers personnalisés il vous suffira de faire une sauvegarde systématique de tous vos changements au fur et à mesure. En principe ces fichiers ne sont pas modifiés tous les quatre matins.&lt;/p&gt;


&lt;h4&gt;Soyez toujours capables de revenir en arrière&lt;/h4&gt;

&lt;p&gt;A chaque fois que vous devrez intervenir sur des fichiers placés dans votre espace web, faites-en une copie de l'état &lt;em&gt;avant&lt;/em&gt; vos changements et conservez-la sur votre disque dur. Vous pourrez ainsi bidouiller en toute tranquillité avec la sécurité de pouvoir remettre l'ancienne version du fichier si vous avez fait trop de bêtises.&lt;/p&gt;


&lt;p&gt;Ne vous lancez jamais dans les modifications directes sans cette précaution, même, &lt;em&gt;surtout&lt;/em&gt; quand vous aurez pris de l'assurance. C'est à ce moment-là que vous vous direz à la fois que vous savez vachement bien ce que vous faites et que vous pouvez vous lancer dans les modifs les plus hardies. Eh bien c'est à ce moment-là que vous devrez le plus être capables de revenir en arrière ;)&lt;/p&gt;


&lt;h4&gt;Du temps, du calme&lt;/h4&gt;

&lt;p&gt;Les aménagements de blog c'est comme pour tous types de travaux : on se dit qu'on aura pour une heure et on y est encore trois heures plus tard. Et comme on n'avait prévu qu'une heure et qu'on a d'autres choses à faire, on s'énerve, on va trop vite, on ne prend pas assez de précautions... et on fait de grosses bêtises qui demanderont encore plus d'heures à rectifier.&lt;/p&gt;


&lt;p&gt;N'intervenez sur votre blog que quand vous disposez du triple de temps que vous y prévoyez !&lt;/p&gt;


&lt;h4&gt;Un pas après l'autre&lt;/h4&gt;

&lt;p&gt;Ne faites pas plusieurs changements importants à la fois. N'en faites qu'un, testez si tout va bien, passez au suivant.&lt;/p&gt;


&lt;p&gt;Quand vous installerez Dotclear, faites une installation basique, exactement comme expliqué dans le tutoriel. Testez. Si tout va bien, alors vous pourrez créer un deuxième blog, ou faire des redirections ou passer de tel type d'URL à tel autre, ou essayer de retirer « index.php » de l'adresse, ou installer un plugin, un thème, etc.&lt;/p&gt;


&lt;p&gt;Quand vous installerez un plugin, laissez-lui ses paramétrages par défaut, testez que tout va bien. Revenez-y seulement après pour vos réglages personnels.&lt;/p&gt;


&lt;p&gt;Si vous installez un autre thème, installez-le dans sa version originelle, testez que tout va bien. Passez ensuite aux personnalisations, une par une, en testant à chaque fois.&lt;/p&gt;


&lt;p&gt;Vous voyez le principe ? Ça ira beaucoup plus vite pour identifier à quelle étape s'est produit l'erreur et y remédier, vous y gagnerez du temps en plus et de l'énervement en moins.&lt;/p&gt;


&lt;h3&gt;Et tout de suite&lt;/h3&gt;

&lt;p&gt;Vous créez un répertoire sur votre disque dur : &lt;code&gt;MonBlog&lt;/code&gt;. C'est votre centre névralgique anti-migraines. Vous y placerez une version intacte de &lt;code&gt;dotclear&lt;/code&gt;, un sous-répertoire &lt;code&gt;sauvegardes&lt;/code&gt; dans lequel vous créerez un sous-répertoire genre &lt;code&gt;sauv070201&lt;/code&gt; pour chaque sauvegarde hebdomadaire, un répertoire &lt;code&gt;modifs&lt;/code&gt; avec pareil un sous-répertoire par date et les fichiers avant intervention.&lt;/p&gt;


&lt;p&gt;C'est une question d'habitude, et ça vaut vraiment le coup pour être tranquilles !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Aorakits en thèmes paramétrables</title>
    <link>http://dissitou.klafoutis.org/post/2007/01/30/Aorakits-en-themes</link>
    <guid isPermaLink="false">urn:md5:2f232a789c4f763139835b4ca8ec457a</guid>
    <pubDate>Tue, 30 Jan 2007 16:54:00 +0100</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Thèmes</category>
            
    <description>    &lt;p&gt;Dans le billet consacré aux &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/01/03/Aorakit-des-structures-pour-vos-themes&quot;&gt;structures prêtes à l'emploi pour Dotclear 2.0&lt;/a&gt;, j'ai ajouté au téléchargement de la feuille de style la possibilité de télécharger sous forme de thème en « prêt à personnaliser » chacune de ces structures.&lt;/p&gt;


&lt;p&gt;Installez-le en le décompressant dans le répertoire &lt;code&gt;/themes&lt;/code&gt; de votre blog.&lt;/p&gt;


&lt;p&gt;Vous y trouverez le fichier &lt;code&gt;layout.css&lt;/code&gt; correspondant à la structure choisie, le fichier &lt;code&gt;style.css&lt;/code&gt; comportant l'import de ce layout et toutes les balises courantes d'un thème pour Dotclear 2.0, le fichier &lt;code&gt;_define.php&lt;/code&gt; à modifier pour y placer le nom que vous aurez donné à votre nouveau thème et votre signature.&lt;/p&gt;


&lt;p&gt;Le fichier config.php et le répertoire /locales ont été mis en place pour que vous puissiez éditer la feuille de style directement depuis le Tableau de bord -&amp;gt; Paramètres des thèmes -&amp;gt; Sélection de l'Aorakit choisi -&amp;gt; Onglet Paramètres du thème.&lt;/p&gt;


&lt;p&gt;N'hésitez pas à me signaler d'éventuelles erreurs : j'ai procédé un peu « à la chaîne » pour les préparer, j'ai pu faire quelques bourdes au passage (je me connais ;)) !&lt;/p&gt;


&lt;p&gt;Enjoy !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Ce dont vous aurez besoin avant de télécharger Dotclear 2.0</title>
    <link>http://dissitou.klafoutis.org/post/2007/01/29/Ce-dont-vous-aurez-besoin-avant-de-telecharger-Dotclear-20</link>
    <guid isPermaLink="false">urn:md5:59c678d14634066856b0fd36405ed6c7</guid>
    <pubDate>Mon, 29 Jan 2007 10:42:00 +0100</pubDate>
    <dc:creator>Kozlika</dc:creator>
        <category>Débuter avec Dotclear 2.0</category>
            
    <description>&lt;p&gt;Vous avez examiné &lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/01/28/Choisir-son-outil-de-blog&quot;&gt;les différentes possibilités&lt;/a&gt; qui s'offrent à vous pour ouvrir un blog et avez choisi d'adopter Dotclear. Quelles sont les conditions à réunir pour pouvoir vous lancer ?&lt;/p&gt;    &lt;h3&gt;Bon allez, je me lance, par quoi je commence ?&lt;/h3&gt;


&lt;h4&gt;Un hébergement&lt;/h4&gt;

&lt;p&gt;Pour pouvoir faire tourner un blog Dotclear (ou tout autre site web d'ailleurs), le préalable est de disposer d'un espace de stockage en ligne sur lequel vous mettrez vos pages pour qu'elles soient accessibles sur le web. Les prestataires qui mettent à disposition ces espaces s'appellent des &lt;strong&gt;hébergeurs&lt;/strong&gt;.&lt;/p&gt;


&lt;p&gt;Une erreur fréquente lorsqu'on débarque dans cette aventure est de confondre le prestataire qui vous permet de vous connecter à Internet, appelé &lt;strong&gt;fournisseur d'accès internet (FAI)&lt;/strong&gt; et &lt;strong&gt;hébergeur&lt;/strong&gt;. Confusion tout à fait compréhensible puisque beaucoup de FAI proposent également un service d'hébergement. Cependant, rien ne vous contraint à choisir le même pour les deux services. Ce qui devra gouverner votre choix d'hébergeur c'est avant tout qu'il réponde aux prérequis nécessaires au bon fonctionnement de l'application choisie.&lt;/p&gt;


&lt;p&gt;Ces prérequis sont &lt;a href=&quot;http://doc.dotclear.net/2.0/administration/installation#prerequis&quot;&gt;listés dans la documentation&lt;/a&gt;. Tous les hébergeurs proposent une page d'information sur la mise à disposition de ceci ou cela sur leur hébergement. Consultez cette page, si vous n'y comprenez goutte, envoyez-leur un mail pour le leur demander. Nous testons au fur et à mesure des « retours d'expérience » des utilisateurs les &lt;a href=&quot;http://doc.dotclear.net/2.0/hebergeurs#tester_votre_hebergeur&quot;&gt;hébergements compatibles&lt;/a&gt; avec Dotclear 2.0, vous pouvez choisir votre hébergeur dans cette liste, ce qui vous épargnera le doute :)&lt;/p&gt;


&lt;h4&gt;Un nom de domaine&lt;/h4&gt;


&lt;p&gt;Il vous faudra également une « &lt;strong&gt;URL&lt;/strong&gt; » : ce qu'on tapera dans la barre d'adresse du navigateur pour aller chez vous. Votre hébergeur vous en fournira une par défaut en « sous-domaine » de chez lui, qui ressemblera à &lt;code&gt;http://monlogin.hebergeur.fr&lt;/code&gt;. Certains, comme Free par exemple, ne vous laisseront d'ailleurs pas d'autre choix : toutes les adresses des sites hébergées par Free sont de cette forme.&lt;/p&gt;


&lt;p&gt;Mais la plupart des autres vous proposeront si vous le souhaitez de servir d'intermédiaire à l'achat d'un &lt;strong&gt;nom de domaine&lt;/strong&gt; rien que pour vous. Là encore ne confondez pas les deux services : vous pouvez acheter un nom de domaine chez un prestataire spécifique (le plus connu en France est &lt;a href=&quot;http://www.gandi.net&quot;&gt;Gandi&lt;/a&gt;) et héberger vos pages ailleurs. Assurez-vous cependant que votre hébergeur accepte cette procédure (c'est presque toujours le cas).&lt;/p&gt;


&lt;p&gt;Avoir un nom de domaine n'est pas une obligation, comme je vous le disais ci-dessus tous les hébergeurs mettront à votre disposition une URL en sous-domaine de chez eux. En revanche si j'en parle ici c'est qu'il est beaucoup plus simple si vous en souhaitez un rien-qu'à-vous de vous en occuper avant de lancer votre blog !&lt;/p&gt;


&lt;h4&gt;Quelques outils&lt;/h4&gt;


&lt;h5&gt;Un client FTP&lt;/h5&gt;

&lt;p&gt;Vous aurez besoin d'envoyer des fichiers depuis votre disque dur vers l'espace que vous aura fourni votre hébergeur et d'en récupérer depuis cet espace vers votre disque dur (par exemple pour y apporter des modifications). Il faut pour cela un logiciel spécifique qui se charge du transport de l'un à l'autre. Le terme générique est « &lt;strong&gt;client FTP&lt;/strong&gt; ». Au fait, puisqu'on en parle, attention avec « FTP », c'est le pur machin en jargon informatique qui paume car il ne veut pas toujours dire la même chose selon le contexte où il est employé. Il sera ainsi employé pour désigner votre espace web chez l'hébergeur &lt;em&gt;(t'as quoi sur ton ftp ?)&lt;/em&gt;, un procédé de transfert &lt;em&gt;(tu l'as envoyé en ftp ?)&lt;/em&gt; et ce fameux logiciel de transport dont je vous parlais à l'instant &lt;em&gt;(tu utilises quoi comme ftp ?)&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;Il en existe des gratuits pour toutes les plates-formes. Un consensus semble se faire autour de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.framasoft.net/article1011.html&quot;&gt;Filezilla&lt;/a&gt; (Windows)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.framasoft.net/article2759.html&quot;&gt;gFTP&lt;/a&gt; (Linux)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.framasoft.net/article3551.html&quot;&gt;Cyberduck&lt;/a&gt; (Mac)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour ma part, j'utilise &lt;a href=&quot;http://www.osxfacile.com/transmit.html&quot;&gt;Transmit&lt;/a&gt;&lt;sup&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/01/29/#pnote-109-1&quot; id=&quot;rev-pnote-109-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; (Mac, autour de 25 euros) dont je trouve la prise en main et l'ergonomie très aisées.&lt;/p&gt;


&lt;h5&gt;Un éditeur&lt;/h5&gt;


&lt;p&gt;Vous aurez des fichiers à modifier. Je vous recommande fortement de vous munir d'un &lt;strong&gt;éditeur de texte&lt;/strong&gt; qui ne soit NI un traitement de texte NI un éditeur html. L'un comme l'autre ajoutent de leur propre initiative des caractères visibles ou invisibles ou « corrigent » automatiquement les données qui mettront la pagaille dans votre blog. Au pire il vaut mieux utiliser le bloc-notes de Windows ou Text-Edit de Mac.&lt;/p&gt;


&lt;p&gt;Là encore il en existe de gratuits et très bien fichus, notamment en coloriant la syntaxe, ce qui en facilite la lecture et la modification. En voici quelques-uns :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.framasoft.net/article2579.html&quot;&gt;Notepad++&lt;/a&gt; ou &lt;a href=&quot;http://www.framasoft.net/article1988.html&quot;&gt;SciTE&lt;/a&gt; (Windows)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.framasoft.net/article4310.html&quot;&gt;Smultron&lt;/a&gt; (Mac)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Un bon carnet d'adresses&lt;/h4&gt;


&lt;p&gt;Quelques adresses à consulter et à garder sous le coude vous seront précieuses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;a href=&quot;http://doc.dotclear.net&quot;&gt;documentation de Dotclear&lt;/a&gt; est votre premier point de rendez-vous.&lt;/li&gt;
&lt;li&gt;Si vous n'y avez pas trouvé vos réponses, le &lt;a href=&quot;http://www.dotclear.net/forum/&quot;&gt;forum d'entraide&lt;/a&gt; vous y aidera.&lt;/li&gt;
&lt;li&gt;Les informations de sortie de nouvelle version ou de mises à jour à effectuer sont publiées &lt;a href=&quot;http://www.dotclear.net/log/&quot;&gt;sur le blog de news&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://dissitou.klafoutis.org/post/2007/01/29/#rev-pnote-109-1&quot; id=&quot;pnote-109-1&quot;&gt;1&lt;/a&gt;] Je vous fais passer par ce lien qui explique bien ce qu'est le FTP.&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>