<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.callmepep.org/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xml:lang="fr">
  
  <title type="html">Turbinagaz.com</title>
  <subtitle type="html">Dotclear, des idées idiotes, des expérimentations : ça se passe comme ça chez Turbinagaz.com.</subtitle>
  
  <link href="http://www.turbinagaz.com/" rel="alternate" type="text/html" title="Dotclear, des idées idiotes, des expérimentations : ça se passe comme ça chez Turbinagaz.com." />
  <updated>2010-03-11T16:01:20+01:00</updated>
  <author>
    <name>Pep</name>
  </author>
  <id>urn:md5:f72d4ce3d062980a34d634c37c6f6daa</id>
  <generator uri="http://www.dotclear.org/">Dotclear</generator>
  
    
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.callmepep.org/bricoland" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="bricoland" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><entry>
    <title>On dirait bien...</title>
    <link href="http://www.turbinagaz.com/post/2010/01/21/On-dirait-bien..." rel="alternate" type="text/html" title="On dirait bien..." />
    <id>urn:md5:fca37d5b516888ace61999a41bd17130</id>
    <updated>2010-01-21T16:51:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Defensio</dc:subject>
        <dc:subject>antispam</dc:subject><dc:subject>API</dc:subject><dc:subject>defensio</dc:subject><dc:subject>suivi</dc:subject>    
    <content type="html">    &lt;p&gt;... qu'il va falloir que je me remette un peu au travail côté plugins, au moins un peu contraint et forcé.&lt;/p&gt;


&lt;p&gt;Après plusieurs semaines de tests, le service &lt;a href="http://blog.defensio.com/2010/01/21/introducing-defensio-2-0/" hreflang="en"&gt;Defensio annonce officiellement son passage en version 2.0&lt;/a&gt;. Pour l'occasion, l'API du service connait un vrai lifting et introduit la possibilité d'échanges asynchrones.&lt;/p&gt;


&lt;p&gt;Tout motivé que je suis, j'ai récupéré &lt;a href="http://defensio.com/api" hreflang="en"&gt;les nouvelles spécifications de cette API v2&lt;/a&gt;. Il ne me reste donc plus qu'à la lire, la comprendre, la tester et de mettre à jour le plugin associé pour Dotclear.&lt;/p&gt;


&lt;p&gt;Qui a dit qu'on n'était pas rendu ?! ;-)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/KfjqEK8VdLo" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2010/01/21/On-dirait-bien...#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/37</wfw:commentRss>
      </entry>
    
  <entry>
    <title>En bref</title>
    <link href="http://www.turbinagaz.com/post/2010/01/08/En-bref" rel="alternate" type="text/html" title="En bref" />
    <id>urn:md5:31251ccf5e5f45d9539f06eba2a8c05c</id>
    <updated>2010-01-08T15:01:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>News</dc:subject>
        <dc:subject>coulisses</dc:subject><dc:subject>refonte</dc:subject>    
    <content type="html">    &lt;p&gt;Suite du déballage des cartons&amp;nbsp;: les différents liens présents dans les billets et concernant les téléchargements ont été actualisés et sont désormais fonctionnels et les nouvelles adresses d'abonnements sont en service (toujours via FeedBurner).&lt;/p&gt;


&lt;p&gt;Bien que les anciennes adresses de flux restent actives pour quelques semaines encore, je vous invite à modifier vos lecteurs pour privilégier les nouvelles au plus tôt. A savoir&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://feeds.turbinagaz.com/turbinagaz"&gt;http://feeds.turbinagaz.com/turbinagaz&lt;/a&gt; pour le fil des billets,&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.turbinagaz.com/turbinagaz-comments"&gt;http://feeds.turbinagaz.com/turbinagaz-comments&lt;/a&gt; pour le fil des commentaires.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les peintures vont rester en l'état pour un moment encore&amp;nbsp;: pas trop de temps pour cela, et surtout une inspiration proche de zéro. Et puis il faudrait, en premier lieu, que je commence par ranger correctement le peu de choses à (re)mettre en ligne.&lt;/p&gt;


&lt;p&gt;A peine trois bricoles et c'est déjà le bordel ambiant...&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/OvuB1k-lsAI" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2010/01/08/En-bref#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/34</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Hello Goodbye</title>
    <link href="http://www.turbinagaz.com/post/2010/01/01/Hello-Goodbye" rel="alternate" type="text/html" title="Hello Goodbye" />
    <id>urn:md5:e95c4b28dbb36c34b0081f7605a0b248</id>
    <updated>2010-01-01T20:11:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>News</dc:subject>
        <dc:subject>annonce</dc:subject><dc:subject>coulisses</dc:subject><dc:subject>refonte</dc:subject>    
    <content type="html">    &lt;p&gt;Furtivement, j'ai profité de ce changement d'année pour déménager ce petit blog consacré à &lt;a href="http://dotclear.net/"&gt;Dotclear&lt;/a&gt;, en le renommant pour l'occasion.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Au revoir &lt;q&gt;Bricoland Drive&lt;/q&gt;, bonjour &lt;q&gt;Turbinagaz&lt;/q&gt;.&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Période de fêtes oblige, comme j'avais également pas mal d'autres chats à fouetter, le dépaquetage des affaires s'est fait dans la hâte. Vous aurez donc droit à un beau bordel ambiant pendant quelques semaines, un habillage provisoire, des liens brisés et des redirections qui ne redirigeront pas (ou mal). Comprenez donc qu'il est préférable de ne rien bookmarker, de ne pas toucher aux abonnements, etc. On reparlera de cela en temps voulu.&lt;/p&gt;


&lt;p&gt;Et puis, dans le fond, OSEF&amp;nbsp;! Il n'est pas question ici d'affaires d'état&amp;nbsp;: superficialité, futilité et fun restent et resteront parmi les principales caractéristiques de &lt;del&gt;Bricoland Drive&lt;/del&gt;Turbinagaz.&lt;/p&gt;


&lt;p&gt;Bon, c'est pas le tout. Faut que je file, il y a des restes à finir.&lt;br /&gt;
Ah, d'ailleurs...&lt;/p&gt;


&lt;p&gt;Mes meilleurs vœux pour 2010. ;)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/UCKQ0-Cl8wQ" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2010/01/01/Hello-Goodbye#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/33</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Les derniers jours de Bricoland Drive</title>
    <link href="http://www.turbinagaz.com/post/2009/12/21/Les-derniers-jours-de-Bricoland-Drive" rel="alternate" type="text/html" title="Les derniers jours de Bricoland Drive" />
    <id>urn:md5:e7acc2ae3d1101147e83da309f194636</id>
    <updated>2009-12-21T16:29:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>News</dc:subject>
        <dc:subject>ailleurs</dc:subject><dc:subject>annonce</dc:subject><dc:subject>coulisses</dc:subject>    
    <content type="html">    &lt;p&gt;Oyez, oyez&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Tout est dans le titre&amp;nbsp;: &lt;q&gt;Bricoland Drive&lt;/q&gt; vit ses derniers jours, ici et sous cette forme.&lt;/p&gt;


&lt;p&gt;Par contre, cela ne signifie pas que ce blog va disparaitre. Il va simplement changer de serveur, de domaine et probablement de nom.&lt;/p&gt;


&lt;p&gt;La mutation s'effectuera quelque part entre maintenant et la fin de ce mois de décembre. La transition devrait se faire dans la douceur (ou presque), avec la mise en place de redirections et la publication d'un état des (nouveaux) lieux. D'ici quelques jours, les commentaires et trackbacks ne seront donc plus possibles, n'en soyez donc pas surpris.&lt;/p&gt;


&lt;p&gt;A bientôt pour la suite, et bonnes fêtes à tous.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/kn3AMX4xKlc" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/12/21/Les-derniers-jours-de-Bricoland-Drive#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/32</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Microsoft, IIS et PHP sur Windows</title>
    <link href="http://www.turbinagaz.com/post/2009/11/20/Microsoft%2C-IIS-et-PHP-sur-Windows" rel="alternate" type="text/html" title="Microsoft, IIS et PHP sur Windows" />
    <id>urn:md5:7ce124f4cc5b692d50ba1f779dae2f57</id>
    <updated>2009-11-20T17:05:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Trucs bizarres</dc:subject>
        <dc:subject>fastcgi</dc:subject><dc:subject>iis</dc:subject><dc:subject>microsoft</dc:subject><dc:subject>php</dc:subject><dc:subject>wincache</dc:subject><dc:subject>windows</dc:subject>    
    <content type="html">    &lt;p&gt;Depuis quelques temps, Microsoft semble faire du pied à PHP et sa communauté. Après avoir très longtemps poussé sa plateforme IIS/ASP(.Net) face à la plateforme LAMP, Microsoft a commencé à changer son fusil d'épaule &lt;a href="http://www.microsoft.com/presspass/press/2006/oct06/10-31MSZendPR.mspx" hreflang="en"&gt;en annonçant un partenariat avec Zend, fin 2006&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Afin de faire oublier le triste tableau qu'offrait le couple IIS/PHP (environnement souvent instable et peu performant), de véritables efforts ont été faits pour obtenir une cohabitation plus harmonieuse&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;développement et mise à disposition d'&lt;a href="http://www.iis.net/expand/FastCGI" hreflang="en"&gt;un support FastCGI&lt;/a&gt;&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/11/20/Microsoft%2C-IIS-et-PHP-sur-Windows#pnote-31-1" id="rev-pnote-31-1"&gt;1&lt;/a&gt;]&lt;/sup&gt;,&lt;/li&gt;
&lt;li&gt;développement d'&lt;a href="http://www.microsoft.com/sqlserver/2005/en/us/PHP-Driver.aspx" hreflang="en"&gt;un pilote PHP pour l'accès natif aux SGBDRs SQL Server 200x&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;mais également le développement d'une extension PHP, &lt;a href="http://www.iis.net/expand/WinCacheForPHP" hreflang="en"&gt;Wincache&lt;/a&gt;, alternative pour plateforme Windows de l'extension APC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et pour faciliter l'installation de tout ce beau monde (&lt;a href="http://www.iis.net/downloads" hreflang="en"&gt;entre autres&lt;/a&gt;&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/11/20/Microsoft%2C-IIS-et-PHP-sur-Windows#pnote-31-2" id="rev-pnote-31-2"&gt;2&lt;/a&gt;]&lt;/sup&gt;), Microsoft livre dorénavant une solution nommée &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web Plateform Installer&lt;/a&gt;. Il ne s'agit de rien d'autre qu'un assistant visuel vous permettant de naviguer dans une liste de composants disponibles pour votre environnement et de faire votre marché à grands coups de clics. Difficile de faire plus simple.&lt;/p&gt;


&lt;p&gt;Pour en revenir à l'extension Wincache, elle sort aujourd'hui &lt;a href="http://ruslany.net/2009/11/wincache-extension-1-0-for-php-release-to-web/" hreflang="en"&gt;officiellement en version 1.0 stable&lt;/a&gt;, avec pour l'occasion &lt;a href="http://fr.php.net/wincache" hreflang="en"&gt;une mise à jour de son entrée dans la documentation officielle de PHP&lt;/a&gt; et l'arrivée de &lt;a href="http://pecl.php.net/package/wincache/" hreflang="en"&gt;sa section dans PECL&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Je l'utilisais depuis quelques semaines en version préliminaire et en étais assez content en terme de performances ressenties, sans pour autant savoir de quoi il en retournait vraiment. Mais comme le Web est un endroit magnifique, et que c'est jour de release, &lt;a href="http://techportal.ibuildings.com/2009/11/19/php-on-windows-the-wincache-1-0-benchmark/" hreflang="en"&gt;techPortal propose un rapide benchmark de Wincache 1.0&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Sur ce, je ferme cette longue parenthèse un peu hors-sujet - mais s'inscrivant dans le contexte &lt;a href="http://www.turbinagaz.com/post/2009/11/06/Dotclear-2-mais...-saveur-Microsoft"&gt;du précédent billet&lt;/a&gt; - et retourne de ce pas dans le monde normal. :)&lt;/p&gt;
&lt;div class="footnotes"&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/11/20/Microsoft%2C-IIS-et-PHP-sur-Windows#rev-pnote-31-1" id="pnote-31-1"&gt;1&lt;/a&gt;] Désormais embarqué par défaut dans les livraisons IIS 7.X&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/11/20/Microsoft%2C-IIS-et-PHP-sur-Windows#rev-pnote-31-2" id="pnote-31-2"&gt;2&lt;/a&gt;] Notez que pour l'occasion, je découvre - stupéfait - cette extension exotique qu'est &lt;a href="http://www.helicontech.com/ape/" hreflang="en"&gt;APE&lt;/a&gt;. Il va absolument falloir que je teste ce machin !&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/HKwqwDCQ6Jo" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/11/20/Microsoft%2C-IIS-et-PHP-sur-Windows#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/31</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Dotclear 2 mais... saveur Microsoft</title>
    <link href="http://www.turbinagaz.com/post/2009/11/06/Dotclear-2-mais...-saveur-Microsoft" rel="alternate" type="text/html" title="Dotclear 2 mais... saveur Microsoft" />
    <id>urn:md5:d8d56b94ea680d955492473b30dcad49</id>
    <updated>2009-11-06T14:33:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Trucs bizarres</dc:subject>
        <dc:subject>annonce</dc:subject><dc:subject>iis</dc:subject><dc:subject>microsoft</dc:subject><dc:subject>suivi</dc:subject><dc:subject>support</dc:subject>    
    <content type="html">    &lt;p&gt;Quelle idée saugrenue&amp;nbsp;! Et pourtant, je suis bien décidé à garder un œil sur le comportement de Dotclear 2.x en environnement Microsoft.&lt;/p&gt;


&lt;p&gt;Mais encore faut-il préciser ce que j'entends par environnement Microsoft&amp;nbsp;: il ne s'agit pas de l'utilisation d'une pile &lt;a href="http://www.wampserver.com/"&gt;Wampserver&lt;/a&gt;, mais bel et bien de l'utilisation de Dotclear 2.x sur des serveurs &lt;a href="http://www.iis.net/"&gt;IIS&lt;/a&gt;. Oui, vous avez bien lu. :)&lt;/p&gt;


&lt;p&gt;J'ai beau ne pas être un adepte de cette plateforme, je me dois de reconnaitre qu'elle figure parmi les principales du marché des serveurs Web et qu'en de telles conditions elle ne peut être ignorée. C'est donc une question de pragmatisme, avant tout, qui guidera cette démarche. Mais n'oublions pas non plus une grande part de curiosité et un fond d'intérêt professionnel.&lt;/p&gt;


&lt;p&gt;Maintenant, comment cela se traduira-t-il dans les faits&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;Pour l'heure, le programme n'est que guère ambitieux&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;s'assurer du bon fonctionnement de Dotclear 2.x sur les versions courantes de IIS, à savoir 5.x/6.x et 7.x,&lt;/li&gt;
&lt;li&gt;obtenir peu à peu une bonne vue d'ensemble des performances et des limitations de Dotclear 2.x dans cet environnement,&lt;/li&gt;
&lt;li&gt;acquérir quelques connaissances afin de pouvoir apporter des réponses sensées à d'éventuelles questions sur &lt;a href="http://forum.dotclear.net/"&gt;le forum&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;voir s'il devient nécessaire de pousser plus avant le support des solutions Microsoft, et d'engager le cas échéant des développements supplémentaires.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tout cela n'aura sans doute jamais le moindre impact marquant quant au projet Dotclear dans son ensemble. Tout au plus pourra-t-on envisager de voir apparaitre quelques patches et/ou aménagements discrets, ainsi que quelques compléments à la documentation actuelle.&lt;/p&gt;


&lt;p&gt;La suite au prochain épisode&amp;nbsp;?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/viM4UpIRVog" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/11/06/Dotclear-2-mais...-saveur-Microsoft#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/30</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Dotclear 2 et les bonnes pratiques Opquast</title>
    <link href="http://www.turbinagaz.com/post/2009/10/29/Dotclear-2-et-les-bonnes-pratiques-Opquast" rel="alternate" type="text/html" title="Dotclear 2 et les bonnes pratiques Opquast" />
    <id>urn:md5:f54cabb56ebc469a1cc20233b73ff8bc</id>
    <updated>2009-10-29T11:16:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>News</dc:subject>
        <dc:subject>ailleurs</dc:subject><dc:subject>annonce</dc:subject><dc:subject>opquast</dc:subject>    
    <content type="html">    &lt;p&gt;Il fallait s'y attendre, l'ami Franck a récidivé.&lt;/p&gt;


&lt;p&gt;Pour les quelques vauriens qui ne suivraient pas &lt;a href="http://open-time.net/"&gt;son blog&lt;/a&gt;, Franck s'est de nouveau lancé dans un match &lt;q&gt;Dotclear vs Opquast&lt;/q&gt; en confrontant cette fois la version actuelle de &lt;a href="http://dotclear.net/"&gt;Dotclear&lt;/a&gt; 2.1.x aux &lt;a href="http://fr.opquast.com/bonnes-pratiques/"&gt;bonnes pratiques recommandées par Opquast&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://open-time.net/post/2009/10/28/Opquast-10-vs-Dotclear-21-Bilan"&gt;Un premier bilan&lt;/a&gt; de ce travail méticuleux est désormais en ligne.&lt;/p&gt;


&lt;p&gt;Pour l'occasion, &lt;a href="http://dev.dotclear.org/2.0/query?status=assigned&amp;amp;status=closed&amp;amp;status=new&amp;amp;status=reopened&amp;amp;order=priority&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=milestone&amp;amp;col=component&amp;amp;keywords=~opquast"&gt;une poignée de tickets&lt;/a&gt; a également été soumise par Franck pour la suite du développement de Dotclear 2.x. A venir également, un ensemble de checklists à destination des différents profils susceptibles d'intervenir sur un blog propulsé par Dotclear 2.x.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://open-time.net/tag/opquast"&gt;Affaire à suivre de près&lt;/a&gt;, donc.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/7MyMPOsFgSE" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/10/29/Dotclear-2-et-les-bonnes-pratiques-Opquast#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/29</wfw:commentRss>
      </entry>
    
  <entry>
    <title>S'offrir le temps de la réflexion</title>
    <link href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion" rel="alternate" type="text/html" title="S'offrir le temps de la réflexion" />
    <id>urn:md5:6aab10bb720d2b03a3e58bdba5198347</id>
    <updated>2009-10-16T14:31:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Quincaillerie</dc:subject>
        <dc:subject>_public.php</dc:subject><dc:subject>astuce à 2 balles</dc:subject><dc:subject>quick-n-dirty</dc:subject>    
    <content type="html">    &lt;p&gt;Au moment de coder, nous avons tous nos défauts. Plus ou moins nombreux, plus ou moins importants, plus ou moins évitables.&lt;/p&gt;


&lt;p&gt;Il y a en certains qu'on peut corriger ou atténuer avec un peu de pratique, de discipline, de rigueur et quelques bonnes pratiques. Mais il y en a certains qui vous collent à la peau, et qui - malgré vos efforts - viennent pourrir vos séances d'écriture. Je pense que personne n'y échappe vraiment totalement.&lt;/p&gt;


&lt;p&gt;Pour ma part, c'est mon naturel tête en l'air et mes doigts crochus qui me tendent régulièrement des pièges. Deux bons gros défauts, bien vicieux, qui n'attendent que les moments un peu plus détendus pour venir frapper en dessous de la ceinture&amp;nbsp;: c'est-à-dire dans les parties de code les plus routinières.&lt;/p&gt;


&lt;p&gt;Ils prennent la forme d'oublis idiots de choses pourtant évidentes, ou de fautes de frappe, les uns comme les autres m'étant gentiment signifiés par de doux messages d'insultes au moment des tests&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#pnote-745-1" id="rev-pnote-745-1"&gt;1&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;Ah, évidemment, bien souvent, ce n'est rien de grave. Du pas bien méchant pas trop embêtant. Mais systématiquement, c'est une perte de temps d'autant plus frustrante que l'erreur l'ayant engendrée est stupide.&lt;/p&gt;


&lt;p&gt;Figurez-vous que lorsque je développe un bout de quelque chose pour Dotclear, c'est souvent dans les zones banales que sont l'enregistrement de behaviors ou de balises de templates que ça se produit. Une typo dans le nom du callback par ci, l'oubli de la déclaration d'une nouvelle balise par là, etc. Rageant.&lt;/p&gt;


&lt;p&gt;Il y a donc quelques temps déjà; j'ai décidé de m'éviter ces peines lors de la mise au point des plugins ou thèmes. J'ai donc opté pour l'approche feignasse.&lt;/p&gt;


&lt;p&gt;Comme pour le cas des templates, par exemple&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#pnote-745-2" id="rev-pnote-745-2"&gt;2&lt;/a&gt;]&lt;/sup&gt;, je nomme mes méthodes de classe du même nom que la balise résultante (au préfixe &lt;code&gt;tpl&lt;/code&gt; près, bien entendu), je me suis dit que &lt;a href="http://fr2.php.net/manual/fr/language.oop5.reflection.php#language.oop5.reflection.reflectionclass"&gt;la réflexion disponible en PHP5&lt;/a&gt; allait être mon amie.&lt;/p&gt;


&lt;p&gt;Je me suis donc bâti une petite trousse à outils que j'utilise dans les premières étapes d'un développement. Dans cette trousse, j'ai de quoi m'épargner les séances de &lt;code&gt;$core-&amp;gt;tpl-&amp;gt;addBlock/addValue(...)&lt;/code&gt;, &lt;code&gt;$core-&amp;gt;addBehavior(...)&lt;/code&gt;, et autres sections répétitives de code sans réelle valeur.&lt;/p&gt;


&lt;p&gt;J'en livre ici un petit exemple&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#pnote-745-3" id="rev-pnote-745-3"&gt;3&lt;/a&gt;]&lt;/sup&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre class="brush: php"&gt;class datk
{
	public static function registerTemplates($classname)
	{
		global $core;
		
		if (trim($classname) == '') {
			throw new Exception('Aucun nom de classe.');
		}
		
		$class = new ReflectionClass($classname);
				
		if ($class-&amp;gt;isAbstract()) {
			throw new Exception('Classe abstraite : '.$classname);
		}

		$methods = $class-&amp;gt;getMethods();
		foreach ($methods as $method)	{
			if ($method-&amp;gt;isPublic() &amp;amp;&amp;amp; $method-&amp;gt;isStatic()) {
				$parameters = $method-&amp;gt;getParameters();
				if ($nb_parameters = count($parameters)) {
					$name = $method-&amp;gt;getName();
					if ($nb_parameters == 1) {
						$core-&amp;gt;tpl-&amp;gt;addValue($name,array($classname,$name));
					}
					elseif ($nb_parameters == 2) {
						$core-&amp;gt;tpl-&amp;gt;addBlock($name,array($classname,$name));
					} 
				}
			}
		}
	}
}&lt;/pre&gt;


&lt;p&gt;Je me retrouve alors à faire un simple appel&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#pnote-745-4" id="rev-pnote-745-4"&gt;4&lt;/a&gt;]&lt;/sup&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre class="brush: php"&gt;datk::registerTemplates('maClasseTemplate');&lt;/pre&gt;

&lt;p&gt;en lieu et place d'un litanie exténuante, et terreau fertile pour mes défauts, de &lt;code&gt;$core-&amp;gt;tpl-&amp;gt;addMachin()&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;C'est bête et sans aucun doute inutile pour bon nombre d'entre vous. Mais vous n'avez pas idée du nombre de poignées de minutes que ça m'épargne&amp;nbsp;!&lt;/p&gt;
&lt;div class="footnotes"&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#rev-pnote-745-1" id="pnote-745-1"&gt;1&lt;/a&gt;] Dans le meilleur des cas...&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#rev-pnote-745-2" id="pnote-745-2"&gt;2&lt;/a&gt;] Puisque je fais de plus en plus souvent la même chose avec les behaviors.&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#rev-pnote-745-3" id="pnote-745-3"&gt;3&lt;/a&gt;] Frelaté, tout de même : j'ai regroupé dans cet exemple plusieurs méthodes que j'utilise véritablement. Ah ben, oui, par endroit, chez moi, ça génère vraiment le code... :-)&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#rev-pnote-745-4" id="pnote-745-4"&gt;4&lt;/a&gt;] Quel menteur, ce type ! Il faut bien gérer l'inclusion du machin quelque part, hein...&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/MmRHxjKgB30" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/10/16/S-offrir-le-temps-de-la-r%C3%A9flexion#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/27</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Quick and Dirty</title>
    <link href="http://www.turbinagaz.com/post/2009/10/14/Quick-and-Dirty" rel="alternate" type="text/html" title="Quick and Dirty" />
    <id>urn:md5:3b36e9467cceddf2942d297abe11e960</id>
    <updated>2009-10-14T12:11:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>News</dc:subject>
            
    <content type="html">    &lt;p&gt;C'est un peu le nouveau mode de publication que j'ai envie de mettre en place par ici.&lt;/p&gt;


&lt;p&gt;C'est, d'ailleurs, un peu ce que j'ai commencé à faire avec les deux misérables billets publiés en septembre&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Petite-m%C3%A9thode-utilitaire-pour-convertir-un-recordset-en-XML"&gt;Petite méthode utilitaire pour convertir un recordset en XML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas"&gt;Quand on aime, on ne compte pas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En gros, ne plus hésiter à publier des notes dans un mode un peu brut de décoffrage et parfois encore à compléter.&lt;/p&gt;


&lt;p&gt;C'est plus particulièrement vrai avec le premier lien, puisqu'il s'agit véritablement d'une bidouille avant tout destinée à faire des tests ou à &lt;q&gt;prototyper&lt;/q&gt; des bouts d'échanges par Ajax.&lt;/p&gt;


&lt;p&gt;Je ne pense pas qu'un tel morceau de code serve un jour à un utilisateur final. Mais étant donné que ce code là existe et me sert, j'estime qu'il est partageable, m'asseyant alors sur la quête d'un code élégant et/ou optimal.&lt;/p&gt;


&lt;p&gt;Si l'idée me plait bien, je dois tout de même avouer n'avoir aucune connaissance des &lt;q&gt;attentes&lt;/q&gt; des quelques lecteurs de &lt;q&gt;Bricoland Drive&lt;/q&gt;. Je me dis qu'en signalant clairement l'état rugueux de certaines notes, cela ne devrait pas poser problème à la plupart d'entre vous&amp;nbsp;: vous saurez trier le bon grain de l'ivraie.&lt;/p&gt;


&lt;p&gt;Mais qu'en est-il vraiment&amp;nbsp;?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/yQ2libpYstQ" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/10/14/Quick-and-Dirty#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/26</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Quand on aime, on ne compte pas ?</title>
    <link href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas" rel="alternate" type="text/html" title="Quand on aime, on ne compte pas ?" />
    <id>urn:md5:d2b6ebd94a95bc02966fff56cc9e1623</id>
    <updated>2009-09-16T19:14:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Quincaillerie</dc:subject>
        <dc:subject>_public.php</dc:subject><dc:subject>astuce à 2 balles</dc:subject><dc:subject>templates</dc:subject>    
    <content type="html">&lt;p&gt;Même si je veux bien accorder crédit à cet adage, il peut tout de même être
- parfois - bien utile de compter.&lt;/p&gt;
&lt;p&gt;D'ailleurs, avez-vous remarqué que le jeu de balises pour templates que
Dotclear 2.x embarque par défaut ne dispose pas d'un compteur d'entrées
générique ?&lt;/p&gt;
&lt;p&gt;En cas de besoin, il suffit de recourir à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;quelques séances de copier/coller&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas#pnote-741-1" id="rev-pnote-741-1" name="rev-pnote-741-1"&gt;1&lt;/a&gt;]&lt;/sup&gt;,&lt;/li&gt;
&lt;li&gt;une tournée d'élagage,&lt;/li&gt;
&lt;li&gt;une poignée d'enrobage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On se retrouve alors en présence d'une nouvelle balise
&lt;code&gt;{{tpl:EntriesCount}}&lt;/code&gt; permettant de retourner le nombre d'entrées
en fonction du contexte d'utilisation ou des filtres retenus. Ces fameux
filtres étant pour la plupart les options que vous connaissez déjà pour la
balise de bloc &lt;code&gt;&amp;lt;tpl:Entries&amp;gt;&lt;/code&gt;, vous devriez vite trouver vos
marques.&lt;/p&gt;
&lt;p&gt;Voici donc de quoi compléter votre trousseau &lt;a href="http://lab.dotclear.org/wiki/plugin/moreTpl"&gt;moreTpl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;NB :&lt;br /&gt;
A consommer avec modération : cet extrait de code n'a pas été testé très
rigoureusement. Prenez donc le temps de le mettre en œuvre sur votre espace de
développement avant de songer à le passer en production&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas#pnote-741-2" id="rev-pnote-741-2" name="rev-pnote-741-2"&gt;2&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;EDIT 21/09/2009 :&lt;br /&gt;
&lt;del&gt;Dans le doute, et afin de gérer l'absence de contexte, une poignée de @ a
été parsemée sur le code existant afin de limiter le risque de levée de
&lt;code&gt;NOTICE&lt;/code&gt;.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Le copier/coller, c'est &lt;strong&gt;vraiment&lt;/strong&gt; mal : voici donc une
version plus saine.&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas#pnote-741-3" id="rev-pnote-741-3" name="rev-pnote-741-3"&gt;3&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;
&lt;div class="footnotes"&gt;
&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas#rev-pnote-741-1" id="pnote-741-1" name="pnote-741-1"&gt;1&lt;/a&gt;] Oui,
c'est mal. :-)&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas#rev-pnote-741-2" id="pnote-741-2" name="pnote-741-2"&gt;2&lt;/a&gt;] Mais
cette remarque reste valable également pour tout nouveau code, même
prétendument testé. N'est-ce pas ?&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas#rev-pnote-741-3" id="pnote-741-3" name="pnote-741-3"&gt;3&lt;/a&gt;] Il va
tout de même falloir que je pense à remettre les mains dans YASH tellement le
résultat est discutable.&lt;/p&gt;
&lt;/div&gt;    &lt;pre class="brush: php"&gt;
class myLovelyTemplates
{
        public static function EntriesCount($attr)
        {
                $p = &amp;quot;if (!is_array(\$params)) \$params = array();
&amp;quot;;

                if (isset($attr['author'])) {
                        $p .= &amp;quot;\$params['user_id'] = '&amp;quot;.addslashes($attr['author']).&amp;quot;';
&amp;quot;;
                }

                if (isset($attr['category'])) {
                        $p .= &amp;quot;\$params['cat_url'] = '&amp;quot;.addslashes($attr['category']).&amp;quot;';
&amp;quot;;
                        $p .= &amp;quot;context::categoryPostParam(\$params);
&amp;quot;;
                }

                if (isset($attr['no_category'])) {
                        $p .= &amp;quot;\$params['sql'] .= ' AND P.cat_id IS NULL ';
&amp;quot;;
                        $p .= &amp;quot;unset(\$params['cat_url']);
&amp;quot;;
                }

                if (!empty($attr['type'])) {
                        $p .= &amp;quot;\$params['post_type'] = preg_split('/\s*,\s*/','&amp;quot;.addslashes($attr['type']).&amp;quot;',-1,PREG_SPLIT_NO_EMPTY);
&amp;quot;;
                }

                if (isset($attr['tag'])) {
                        $p .= 
                                &amp;quot;\$params['from'] .= ', '.\$core-&amp;gt;prefix.'meta META ';
&amp;quot;.
                                &amp;quot;\$params['sql'] .= 'AND META.post_id = P.post_id ';
&amp;quot;.
                                &amp;quot;\$params['sql'] .= \&amp;quot;AND META.meta_type = 'tag' \&amp;quot;;
&amp;quot;.
                                &amp;quot;\$params['sql'] .= \&amp;quot;AND META.meta_id = '&amp;quot;.$GLOBALS['core']-&amp;gt;con-&amp;gt;escape($attr['tag']).&amp;quot;' \&amp;quot;;
&amp;quot;;
                }

                if (empty($attr['no_context'])) {
                        $p .=
                                'if ($_ctx-&amp;gt;exists(&amp;quot;users&amp;quot;)) { '.
                                        &amp;quot;\$params['user_id'] = \$_ctx-&amp;gt;users-&amp;gt;user_id; &amp;quot;.
                                &amp;quot;}
&amp;quot;;

                        $p .=
                                'if ($_ctx-&amp;gt;exists(&amp;quot;categories&amp;quot;)) { '.
                                        &amp;quot;\$params['cat_id'] = \$_ctx-&amp;gt;categories-&amp;gt;cat_id; &amp;quot;.
                                &amp;quot;}
&amp;quot;;

                        $p .=
                                'if ($_ctx-&amp;gt;exists(&amp;quot;archives&amp;quot;)) { '.
                                        &amp;quot;\$params['post_year'] = \$_ctx-&amp;gt;archives-&amp;gt;year(); &amp;quot;.
                                        &amp;quot;\$params['post_month'] = \$_ctx-&amp;gt;archives-&amp;gt;month(); &amp;quot;.
                                        &amp;quot;unset(\$params['limit']); &amp;quot;.
                                &amp;quot;}
&amp;quot;;

                        $p .=
                                'if ($_ctx-&amp;gt;exists(&amp;quot;langs&amp;quot;)) { '.
                                        &amp;quot;\$params['post_lang'] = \$_ctx-&amp;gt;langs-&amp;gt;post_lang; &amp;quot;.
                                &amp;quot;}
&amp;quot;;

                        $p .=
                                'if (isset($_search)) { '.
                                        &amp;quot;\$params['search'] = \$_search; &amp;quot;.
                                &amp;quot;}
&amp;quot;;

                        $p .=
                                'if ($_ctx-&amp;gt;exists(&amp;quot;meta&amp;quot;)) { '.
                                        &amp;quot;\$params['from'] .= ', '.\$core-&amp;gt;prefix.'meta META ';
&amp;quot;.
                                        &amp;quot;\$params['sql'] .= 'AND META.post_id = P.post_id ';
&amp;quot;.
                                        &amp;quot;\$params['sql'] .= \&amp;quot;AND META.meta_type = 'tag' \&amp;quot;;
&amp;quot;.
                                        &amp;quot;\$params['sql'] .= \&amp;quot;AND META.meta_id = '\&amp;quot;.\$core-&amp;gt;con-&amp;gt;escape(\$_ctx-&amp;gt;meta-&amp;gt;meta_id).\&amp;quot;' \&amp;quot;;
&amp;quot;.
                                &amp;quot;}
&amp;quot;;
                }

                if (isset($attr['selected'])) {
                        $p .= &amp;quot;\$params['post_selected'] = &amp;quot;.(integer) (boolean) $attr['selected'].&amp;quot;;&amp;quot;;
                }

                return
                        &amp;quot;&amp;lt;?php
&amp;quot;.
                        $p.
                        '$_ctx-&amp;gt;post_params = $params;'.&amp;quot;
&amp;quot;.
                        '$_ctx-&amp;gt;posts = $core-&amp;gt;blog-&amp;gt;getPosts($params,true); unset($params);'.&amp;quot;
&amp;quot;.
                        'echo $_ctx-&amp;gt;posts-&amp;gt;f(0);'.&amp;quot;
&amp;quot;.
                        '$_ctx-&amp;gt;posts = null; $_ctx-&amp;gt;post_params = null;'.&amp;quot;
&amp;quot;.
                        &amp;quot;?&amp;gt;
&amp;quot;;
        }
}

$core-&amp;gt;tpl-&amp;gt;addValue('EntriesCount',array('myLovelyTemplates','EntriesCount'));
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/Kav3faMHfJ8" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/09/16/Quand-on-aime%2C-on-ne-compte-pas#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/25</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Petite méthode utilitaire pour convertir un recordset en XML</title>
    <link href="http://www.turbinagaz.com/post/2009/09/16/Petite-m%C3%A9thode-utilitaire-pour-convertir-un-recordset-en-XML" rel="alternate" type="text/html" title="Petite méthode utilitaire pour convertir un recordset en XML" />
    <id>urn:md5:4489a76cfb7498f4ac3c3786e57f129c</id>
    <updated>2009-09-16T16:25:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Quincaillerie</dc:subject>
        <dc:subject>astuce à 2 balles</dc:subject><dc:subject>quick-n-dirty</dc:subject>    
    <content type="html">&lt;p&gt;Ça vaut ce que ça vaut, et ce n'était pas l'élégance qui primait lors de l'écriture de cette mini-classe mono-méthode.&lt;/p&gt;


&lt;p&gt;Vous me pardonnerez donc, je l'espère, l'aspect un rien brut de décoffrage de la solution, mais je pense qu'il peut être intéressant de la partager telle quelle. Pas de documentation non plus, cet embryon de code devrait parler de lui-même.&lt;/p&gt;


&lt;p&gt;N'hésitez pas à me faire part de vos améliorations.&lt;/p&gt;    &lt;pre class="brush: php"&gt;class rsUtils
{
	/**
	 * Create a XML chunk from a standard record object.
	 *
	 * @param		record	A standard record object (Cf. Clearbricks dbLayer)
	 * @param		array 	An array of properties to exclude from the dump (default to an empty array)
	 * @return	        string	A string containing the XML chunk.
	 *
	 */
	public static function recordsetToXML($rs,$exclude = array())
	{
		if (!$rs || !$rs instanceof record) {
			throw new Exception(__('Not a valid record object'));
		}
		
		$columns = $rs-&amp;gt;columns();
		if (is_array($exclude)) {
			$columns = array_diff($columns,$exclude);
		}
		
		$xml = &amp;quot;&amp;lt;recordset&amp;gt;
&amp;quot;;
		while ($rs-&amp;gt;fetch()) {
			$xml .= &amp;quot;&amp;lt;record&amp;gt;
&amp;quot;;
			foreach ($columns as $col) {
				$xml .= sprintf('&amp;lt;%1$s&amp;gt;&amp;lt;![CDATA[%2$s]]&amp;gt;&amp;lt;/%1$s&amp;gt;'.&amp;quot;
&amp;quot;,$col,$rs-&amp;gt;f($col));
			}
			$xml .= &amp;quot;&amp;lt;/record&amp;gt;
&amp;quot;;
		}
		$xml .= &amp;quot;&amp;lt;/recordset&amp;gt;
&amp;quot;;
		return $xml;
	}
}&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/k2PtPYslwDs" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/09/16/Petite-m%C3%A9thode-utilitaire-pour-convertir-un-recordset-en-XML#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/24</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Plugin dayMode 1.0</title>
    <link href="http://www.turbinagaz.com/post/2009/03/31/Plugin-dayMode-1.0" rel="alternate" type="text/html" title="Plugin dayMode 1.0" />
    <id>urn:md5:2387c21d57cdb45c5df482d49b418f5b</id>
    <updated>2009-03-31T15:06:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>dayMode</dc:subject>
        <dc:subject>dayMode</dc:subject><dc:subject>plugin</dc:subject><dc:subject>suivi</dc:subject>    
    <content type="html">    &lt;p&gt;Le temps de la release est (enfin) arrivé&amp;nbsp;: à compter de ce jour, le plugin &lt;q&gt;dayMode&lt;/q&gt; se voit attribuer l'appellation &lt;q&gt;&lt;strong&gt;stable&lt;/strong&gt;&lt;/q&gt;.&lt;/p&gt;


&lt;p&gt;Pour l'occasion, le code source et le support de cette branche seront désormais hébergés sur &lt;a href="http://lab.dotclear.org/" hreflang="en"&gt;Dotclear Lab&lt;/a&gt;, comme &lt;a href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks" hreflang="fr"&gt;je l'ai récemment signalé&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Cela signifie que tout détenteur d'&lt;a href="http://dotclear.org/my/" hreflang="en"&gt;un compte Dotclear&lt;/a&gt; pourra ainsi&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ouvrir des tickets au sujet de ce plugin, soit pour signaler un bug, soit faire des demandes d'évolutions mineures,&lt;/li&gt;
&lt;li&gt;compléter la documentation sur &lt;a href="http://lab.dotclear.org/wiki/plugin/dayMode" hreflang="en"&gt;la page wiki dédiée&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Modifications&lt;/h3&gt;

&lt;p&gt;Les changements apportés dans cette version sont&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le passage à une licence GNU/GPL v2, strictement.&lt;/li&gt;
&lt;li&gt;L'activation du mode d'archives journalières se fait désormais depuis le panneau des &lt;q&gt;Paramètres du blog&lt;/q&gt;, et non plus depuis une page d'administration spécifique.&lt;/li&gt;
&lt;li&gt;Le fichier template spécifique aux archives journalières, &lt;code&gt;default-templates/archive_day.html&lt;/code&gt; a été mis à niveau pour prendre en compte les évolutions apparues dans le thème par défaut de Dotclear 2.1 (balises meta pour les robots, ajout des marqueurs Dublin Core, etc.).&lt;/li&gt;
&lt;li&gt;La classe CSS du &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; devient &lt;code&gt;.dc-archive-day&lt;/code&gt; et remplace ainsi l'ancienne classe &lt;code&gt;.dc-archive-month&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Le niveau de permission nécessaire à l'activation des archives journalières - et la gestion du widget calendrier qui lui est associé - est l'administrateur de blog et non plus le super-administrateur.&lt;/li&gt;
&lt;li&gt;Les types de billets sont maintenant correctement filtrés&amp;nbsp;: les pages, entrées de galeries ou pages related ne sont plus prises en compte lors de la détermination des entrées journalières.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Téléchargement&lt;/h3&gt;

&lt;p&gt;Pour le téléchargement, merci de passer par &lt;a href="http://plugins.dotaddict.org/dc2/details/dayMode" hreflang="fr"&gt;la fiche correspondante sur DotAddict.org&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/9iRFk4hABa4" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/03/31/Plugin-dayMode-1.0#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/23</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Inventaire et réorganisation des stocks</title>
    <link href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks" rel="alternate" type="text/html" title="Inventaire et réorganisation des stocks" />
    <id>urn:md5:cae2633874e3a2bd45476d06cf2e6003</id>
    <updated>2009-03-27T17:31:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>News</dc:subject>
            
    <content type="html">    &lt;p&gt;Voilà un moment que le fil de news de &lt;q&gt;Bricoland Drive&lt;/q&gt; n'avait pas
clignoté. Comme quoi, il ne faut jamais désespérer : tout finit par
arriver, même le plus improbable. :-)&lt;/p&gt;
&lt;p&gt;Passé le choc de ce non-événement, lançons-nous dans l'explication plein
texte du titre.&lt;/p&gt;
&lt;h3&gt;L'inventaire&lt;/h3&gt;
&lt;p&gt;Il est grand temps que je prenne le temps de faire le tour des morceaux
épars de code, afin de séparer le bon grain de l'ivraie, de virer ce qui n'a
plus vraiment lieu d'être, de repérer ce qui manque et pourrait avoir une place
convenable dans cette section.&lt;/p&gt;
&lt;p&gt;Ce n'est pas une tâche trop pénible. Un peu ingrate, soit. Mais pas pénible.
Plus que tout, elle est nécessaire pour le bon déroulement des étapes à
suivre.&lt;/p&gt;
&lt;p&gt;Actuellement, le Trac attenant au &lt;q&gt;Bricoland Drive&lt;/q&gt; n'a que très peu de
visibilité et présente une utilité toute relative, puisque m'étant personnelle.
Sous le Trac, le SVN&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks#pnote-687-1" id="rev-pnote-687-1" name="rev-pnote-687-1"&gt;1&lt;/a&gt;]&lt;/sup&gt; et là, on trouve deux zones bien distinctes du
côté des plugins pour Dotclear 2 : une branche &lt;q&gt;current&lt;/q&gt; et une
branche &lt;q&gt;trunk&lt;/q&gt;. Sans plus d'explication, la situation n'est pas bien
claire de l'extérieur.&lt;/p&gt;
&lt;p&gt;Dans les faits, &lt;q&gt;current&lt;/q&gt; contient les sources de versions diffusées
&lt;q&gt;officiellement&lt;/q&gt;&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks#pnote-687-2" id="rev-pnote-687-2" name="rev-pnote-687-2"&gt;2&lt;/a&gt;]&lt;/sup&gt;, alors que &lt;q&gt;trunk&lt;/q&gt; contient les sources de
versions expérimentales ou d'extensions en cours de devenir, normalement
distribuées un peu sous le manteau directement par ici.&lt;/p&gt;
&lt;h3&gt;Réorganisation des stocks&lt;/h3&gt;
&lt;p&gt;Puisque vous suivez (ou consultez) ce blog, j'en déduis que vous portez un
certain intérêt aux plugins pour Dotclear. Aussi n'avez vous pu louper &lt;a href="http://fr.dotclear.org/blog/post/2008/12/31/Dotclear-Lab" hreflang="fr"&gt;l'annonce en toute fin d'année 2008&lt;/a&gt; de l'ouverture d'un
&lt;q&gt;incubateur&lt;/q&gt; officiel : &lt;a href="http://lab.dotclear.org/" hreflang="en"&gt;Dotclear Lab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J'ai donc décidé de déplacer peu à peu les versions considérées comme
stables de mes plugins vers ce nouveau service. Le déménagement se fera donc
plugin après plugin, en profitant de l'occasion pour renuméroter toutes les
versions de 0.x en 1.0 après dépoussiérage.&lt;/p&gt;
&lt;p&gt;Le premier plugin concerné sera &lt;q&gt;dayMode&lt;/q&gt;, qui est passé cette semaine
&lt;a href="http://lab.dotclear.org/wiki/plugin/dayMode" hreflang="en"&gt;dans les
tuyaux du Dotclear Lab&lt;/a&gt;. D'autres suivront, tranquillement, dans les
semaines qui viennent.&lt;/p&gt;
&lt;p&gt;J'utiliserai donc &lt;q&gt;le Lab&lt;/q&gt; pour y héberger et assurer le support des
extensions que je diffuse officiellement. Il s'agira d'une branche de
maintenance destinée à la correction de bugs ou l'ajout de fonctionnalités
mineures exclusivement.&lt;/p&gt;
&lt;p&gt;Concernant les modifications et/ou les évolutions plus importantes, cela se
passera toujours dans ma propre cuisine, qui sera liftée et réaménagée pour
l'occasion. D'ailleurs, il est fort probable que cette cuisine passera en accès
restreint, et sera réservée à quelques habitués et beta-testeurs
privilégiés.&lt;/p&gt;
&lt;p&gt;D'ores et déjà, vous pouvez noter en gros quelque part que les adresses
pointant vers le(s) Trac(s) actuels de &lt;q&gt;Bricoland Drive&lt;/q&gt; disparaitront
très rapidement.&lt;/p&gt;
&lt;h3&gt;Mais encore ?&lt;/h3&gt;
&lt;p&gt;Cette réorganisation du fond de commerce pourrait bien s'accompagner d'une
nouvelle décoration pour la boutique elle-même.&lt;/p&gt;
&lt;p&gt;Il est vrai que cette dernière n'est pas particulièrement pratique à
parcourir&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks#pnote-687-3" id="rev-pnote-687-3" name="rev-pnote-687-3"&gt;3&lt;/a&gt;]&lt;/sup&gt;, et il serait dommage de ne pas capitaliser sur
la meilleure répartition entre stable et expérimental qu'apportera le
cloisonnement entre &lt;q&gt;Dotclear Lab&lt;/q&gt; et le Trac d'ici-bas.&lt;/p&gt;
&lt;p&gt;Mais là, c'est une autre histoire et, comme souvent, m'avancer sur ce sujet
me parait beaucoup trop prématuré. ;-)&lt;/p&gt;
&lt;div class="footnotes"&gt;
&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks#rev-pnote-687-1" id="pnote-687-1" name="pnote-687-1"&gt;1&lt;/a&gt;] Et
non la plage !&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks#rev-pnote-687-2" id="pnote-687-2" name="pnote-687-2"&gt;2&lt;/a&gt;]
Généralement par le biais du &lt;a href="http://plugins.dotaddict.org/" hreflang="fr"&gt;référentiel de plugins de DotAddict.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks#rev-pnote-687-3" id="pnote-687-3" name="pnote-687-3"&gt;3&lt;/a&gt;]
N'est-ce pas, brol ?&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/JOPqBD7kjcQ" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2009/03/27/Inventaire%2C-r%C3%A9organisation-des-stocks#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/22</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Chronique d'une mort annoncée</title>
    <link href="http://www.turbinagaz.com/post/2008/12/18/Chronique-d-une-mort-annonc%C3%A9e" rel="alternate" type="text/html" title="Chronique d'une mort annoncée" />
    <id>urn:md5:bff2a5487425be95c438741ef279e85d</id>
    <updated>2008-12-18T16:19:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>News</dc:subject>
            
    <content type="html">    &lt;p&gt;S'il était évident pour quiconque que ça ne bougeait plus trop du côté des
plugins pour Dotclear 1.x, il manquait toutefois une confirmation officielle.
Alors là voici :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avec &lt;a href="http://fr.dotclear.org/blog/post/2008/11/27/Dotclear-1.4" hreflang="fr"&gt;l'arrêt programmé du support de la branche 1.x du projet Dotclear&lt;/a&gt;, il
en sera de même pour les plugins Dotclear 1.x que je mettais à disposition
jusqu'à maintenant.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il faut bien que je reconnaisse que l'aspect Dotclear 1.x n'a jamais
vraiment eu droit au chapitre sur le &lt;q&gt;Bricoland Drive&lt;/q&gt;. Ce ne sera donc
une surprise pour personne.&lt;/p&gt;
&lt;p&gt;En résumé&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aucune nouvelle version de ces plugins ne verra le jour.&lt;/li&gt;
&lt;li&gt;Le seul support assuré pour ces derniers, jusqu'à la mort définitive de
Dotclear 1.x, portera sur la correction d'éventuels problèmes de sécurité.&lt;/li&gt;
&lt;li&gt;Les liens de téléchargements actuellement présents disparaitront et la
section &lt;q&gt;&lt;a href="http://plugins.dotaddict.org/dc1/" hreflang="fr"&gt;Plugins
pour Dotclear 1&lt;/a&gt;&lt;/q&gt; sur &lt;a href="http://dotaddict.org/" hreflang="fr"&gt;DotAddict.org&lt;/a&gt; deviendra le seul lieu pour récupérer ces plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je pense que cette décision ne pénalisera pas grand monde.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/nOWthMS9auI" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2008/12/18/Chronique-d-une-mort-annonc%C3%A9e#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/21</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Plugin Sitemaps 1.0-RC2</title>
    <link href="http://www.turbinagaz.com/post/2008/11/05/Plugin-Sitemaps-1.0-RC2" rel="alternate" type="text/html" title="Plugin Sitemaps 1.0-RC2" />
    <id>urn:md5:53321a59e226d45b4c3cfcb0100de330</id>
    <updated>2008-11-05T16:40:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Sitemaps</dc:subject>
        <dc:subject>annonce</dc:subject><dc:subject>plugin</dc:subject><dc:subject>sitemaps</dc:subject><dc:subject>suivi</dc:subject>    
    <content type="html">    &lt;p&gt;C'est l'heure du dépoussiérage pour le plugin Sitemaps.&lt;/p&gt;


&lt;p&gt;Au programme&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Correction de la gestion des settings. Les versions précédentes péchaient par approximation, entrainant parfois des effets de bord étranges sur des installations multiblogs.&lt;/li&gt;
&lt;li&gt;Possibilité de faire figurer les liens vers les pages &lt;q&gt;tag&lt;/q&gt;. Au même titre que pour les catégories, je pense que ce n'est pas forcément une bonne idée de faire figurer ces entrées dans un sitemap.xml. Néanmoins, la demande est là et ce choix revient maintenant à chacun.&lt;/li&gt;
&lt;li&gt;Avec l'introduction récente des services&lt;q&gt; Webmasters&lt;/q&gt; respectifs de Yahoo! et Microsoft Live Search, il est désormais possible de pinguer autre chose que le seul service de Google.&lt;/li&gt;
&lt;li&gt;L'interface d'administration a légèrement été revue, principalement pour intégrer proprement les nouvelles préférences pour la notification par ping.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cette version a été développée et testée exclusivement sur un Dotclear 2.1, mais devrait fonctionner sans souci avec tout Dotclear 2.0 et supérieur.&lt;/p&gt;


&lt;p&gt;En l'état, cette RC2 devrait rapidement se transformer en version finale, sauf bug(s) majeur(s). Je préfère tout de même lui laisser le temps d'une tournée de tests par vos soins, vous les fidèles du &lt;q&gt;Bricoland Drive&lt;/q&gt;, avant d'effectuer la mise à jour sur &lt;a href="http://dotaddict.org/" hreflang="fr"&gt;DotAddict.org&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://download.turbinagaz.com/dc2/plugins/dev/plugin-sitemaps-1.0-RC2.zip"&gt;L'archive ZIP est disponible ici&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/c-W2F_q-nfk" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2008/11/05/Plugin-Sitemaps-1.0-RC2#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/20</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Juste comme ça, en passant ...</title>
    <link href="http://www.turbinagaz.com/post/2008/11/03/Juste-comme-%C3%A7a%2C-en-passant-..." rel="alternate" type="text/html" title="Juste comme ça, en passant ..." />
    <id>urn:md5:d7eeab7734ec6b80698c99008a3d7e1d</id>
    <updated>2008-11-03T17:59:00+01:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Quincaillerie</dc:subject>
            
    <content type="html">    &lt;p&gt;Pour ceux qui auraient encore besoin d'installer des plugins disponibles uniquement au format PKG.GZ  sur des releases récentes de Dotclear 2.x , vous trouverez désormais dans un sombre recoin de ces lieux &lt;a href="http://www.turbinagaz.com/toolbox/pkz2zip" hreflang="fr"&gt;un convertisseur PKG.GZ vers ZIP&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;C'est de l'archi-minimaliste, sans garantie, mais ça pourrait en dépanner quelques uns.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/t7wKHmD90P0" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2008/11/03/Juste-comme-%C3%A7a%2C-en-passant-...#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/19</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Les thèmes hérités dans Dotclear 2.1 : un rapide aperçu.</title>
    <link href="http://www.turbinagaz.com/post/2008/10/23/Les-themes-herites-dans-Dotclear-21-%3A-un-rapide-apercu" rel="alternate" type="text/html" title="Les thèmes hérités dans Dotclear 2.1 : un rapide aperçu." />
    <id>urn:md5:cf7fa658c6082dcd64a2394007143e2d</id>
    <updated>2008-10-23T20:02:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Sous le capot</dc:subject>
        <dc:subject>_public.php</dc:subject><dc:subject>nouveauté</dc:subject><dc:subject>templates</dc:subject><dc:subject>thème</dc:subject><dc:subject>urlhandlers</dc:subject>    
    <content type="html">&lt;p&gt;Parmi &lt;a href="http://www.dotclear.net/blog/post/2008/10/14/Au-programme-de-la-21" hreflang="fr"&gt;les nouveautés qui seront introduites lors de la sortie de Dotclear
2.1&lt;/a&gt; figure une première ébauche d'un système d'héritage entre thèmes.&lt;/p&gt;
&lt;p&gt;Pour l'instant, la présentation de cette fonctionnalité a été plutôt
sommaire :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;q&gt;Un thème va pouvoir hériter des templates et des éventuelles balises
supplémentaires d'un autre. Si vous avez besoin de dériver un thème pour n'en
changer que le style, vous pourrez maintenant le faire sans avoir à recopier
tous les templates du premier.&lt;/q&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maintenant que nous ne sommes plus qu'à une grosse semaine de la sortie de
la nouvelle version de Dotclear, il me semble bon de prendre un peu de temps
pour revenir sur le sujet.&lt;/p&gt;
&lt;p&gt;Au moins en attendant que le &lt;q&gt;commando pédagogique&lt;/q&gt; de Dotclear nous
ponde une documentation digne de ce nom... ;-)&lt;/p&gt;    &lt;h3&gt;Posons d'abord le décor&lt;/h3&gt;
&lt;p&gt;Que nous ne nous mèprenions pas : l'idée de thèmes hérités n'est pas
nouvelle et encore moins révolutionnaire.&lt;/p&gt;
&lt;p&gt;De fait, il s'agit simplement de décliner un nouveau thème depuis un thème
existant, sans avoir à tout réécrire ou copier, surtout en matière de templates
et de comportements. Pour la suite de ce billet, nous établirons les termes
suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le thème &lt;q&gt;&lt;strong&gt;enfant&lt;/strong&gt;&lt;/q&gt; : il s'agit de notre nouveau
thème, qui reposera sur une grosse part d'existant fournie par un autre
thème.&lt;/li&gt;
&lt;li&gt;Le thème &lt;q&gt;&lt;strong&gt;parent&lt;/strong&gt;&lt;/q&gt; : c'est ce fameux thème qui
nous fournit déjà une base solide que nous nous contenterons de compléter et/ou
de spécialiser dans notre nouveau thème &lt;q&gt;enfant&lt;/q&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous avez déjà créé des thèmes pour Dotclear 2, vous devez déjà
comprendre pourquoi l'idée des thèmes hérités n'est pas nouvelle.&lt;/p&gt;
&lt;p&gt;Non ? Allons... Relisez bien les deux petites définitions.&lt;/p&gt;
&lt;p&gt;Et oui : en standard, un thème Dotclear 2 hérite systématiquement du
thème &lt;q&gt;default&lt;/q&gt;. Rappelez-vous que si votre thème ne fournit pas des
versions spécifiques des templates &lt;code&gt;home.html&lt;/code&gt;,
&lt;code&gt;post.html&lt;/code&gt;, &lt;code&gt;category.html&lt;/code&gt;, etc. , Dotclear 2 utilisera
alors les versions de ces fichiers présentes dans le thème &lt;q&gt;default&lt;/q&gt; pour
effectuer un rendu des pages.&lt;/p&gt;
&lt;p&gt;En résumé : actuellement, tout thème personnalisé est déjà un thème
&lt;q&gt;enfant&lt;/q&gt; du thème par défaut de Dotclear 2.&lt;/p&gt;
&lt;p&gt;La nouveauté dans Dotclear 2.1 tient qu'il sera désormais possible de
préciser &lt;strong&gt;explicitement&lt;/strong&gt; et &lt;strong&gt;librement&lt;/strong&gt; cette
relation &lt;q&gt;parent&lt;/q&gt;/&lt;q&gt;enfant&lt;/q&gt;. Vous pourrez alors dire que votre nouveau
thème &lt;q&gt;B&lt;/q&gt; hérite du thème &lt;q&gt;A&lt;/q&gt;, plutôt que du thème
&lt;q&gt;default&lt;/q&gt;.&lt;/p&gt;
&lt;h3&gt;Comment les choses s'emboitent&lt;/h3&gt;
&lt;p&gt;Ou, plus exactement, comment elles s'enchainent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Séquence de chargement du thème &lt;q&gt;B&lt;/q&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si le thème &lt;q&gt;A&lt;/q&gt; fournit un fichier &lt;code&gt;_public.php&lt;/code&gt;, ce
dernier est chargé.&lt;/li&gt;
&lt;li&gt;Ensuite, si le thème &lt;q&gt;B&lt;/q&gt; fournit lui aussi un fichier
&lt;code&gt;_public.php&lt;/code&gt;, celui-ci est chargé à son tour.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ainsi, si :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de nouvelles balises de templates,&lt;/li&gt;
&lt;li&gt;de nouveaux gestionnaires d'URL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ont été définis et sont utilisés dans le thème &lt;q&gt;A&lt;/q&gt;, ils seront
également directement disponibles dans le thème &lt;q&gt;B&lt;/q&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ordre de recherche d'un fichier template lors du rendu&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si B dispose du fichier demandé, ce dernier sera utilisé.&lt;/li&gt;
&lt;li&gt;Sinon, si A dispose du fichier demandé, celui de A servira au rendu.&lt;/li&gt;
&lt;li&gt;Sinon, Dotclear 2.1.x fera la recherche habituelle :
&lt;ol&gt;
&lt;li&gt;d'abord dans le thème par défaut (&lt;q&gt;default&lt;/q&gt;),&lt;/li&gt;
&lt;li&gt;puis dans les autres chemins possibles susceptibles d'avoir été ajoutés par
des plugins.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Autres fichiers de thème (CSS, Javascript, images ...)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A l'heure actuelle, aucune notion d'héritage n'est disponible à ce niveau.
En tout cas, pas en standard.&lt;/p&gt;
&lt;p&gt;Ce qui signifie que tout marqueur &lt;code&gt;{{tpl:BlogThemeURL}}&lt;/code&gt; pointera
systématiquement vers l'URL de &lt;q&gt;B&lt;/q&gt;, même si ce dernier n'apparait que dans
un template fourni par &lt;q&gt;A&lt;/q&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Limitation à un - et un seul - niveau d'héritage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Autant vous avertir tout de suite : le système d'héritage des thèmes
est &lt;strong&gt;volontairement&lt;/strong&gt; bridé à un seul niveau et un seul lien de
parenté.&lt;/p&gt;
&lt;p&gt;Sachez donc que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un thème ne peut hériter que d'un autre thème et un seul&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/10/23/Les-themes-herites-dans-Dotclear-21-%3A-un-rapide-apercu#pnote-630-1" id="rev-pnote-630-1" name="rev-pnote-630-1"&gt;1&lt;/a&gt;]&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Un thème ne peut pas hériter d'un thème qui lui-même hérite d'un autre
thème&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/10/23/Les-themes-herites-dans-Dotclear-21-%3A-un-rapide-apercu#pnote-630-2" id="rev-pnote-630-2" name="rev-pnote-630-2"&gt;2&lt;/a&gt;]&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Comment ça s'utilise&lt;/h3&gt;
&lt;p&gt;J'imagine - j'espère - que c'est la dernière question que vous vous posez.
:-)&lt;/p&gt;
&lt;p&gt;Déclarer explicitement un thème &lt;q&gt;B&lt;/q&gt; comme &lt;q&gt;enfant&lt;/q&gt; d'un thème
&lt;q&gt;A&lt;/q&gt; est très simple. Il faudra simplement bien se mettre en tête que la
relation entre deux thèmes s'expriment en utilisant les identifiants internes
(en gros les noms des dossiers), et non leurs noms communs (&lt;em&gt;aka&lt;/em&gt; les
libellés).&lt;/p&gt;
&lt;p&gt;Tout se passe alors dans le fichier &lt;code&gt;_define.php&lt;/code&gt; du thème
&lt;q&gt;enfant&lt;/q&gt; :&lt;/p&gt;
&lt;pre class="brush: php"&gt;
$this-&amp;gt;registerModule(
        /* Name */                      &amp;quot;Mon superbe thème&amp;quot;,
        /* Description*/                &amp;quot;Exemple d'un thème enfant basé sur Blue Silence&amp;quot;,
        /* Author */                    &amp;quot;Pep&amp;quot;,
        /* Version */                   '1.0',
        /* Id du Parent */              'blueSilence'
);
&lt;/pre&gt;
&lt;div class="footnotes"&gt;
&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/10/23/Les-themes-herites-dans-Dotclear-21-%3A-un-rapide-apercu#rev-pnote-630-1" id="pnote-630-1" name="pnote-630-1"&gt;1&lt;/a&gt;] Pas
d'&lt;q&gt;héritage multiple&lt;/q&gt;, comme on dit dans certaines contrées malfamées.&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/10/23/Les-themes-herites-dans-Dotclear-21-%3A-un-rapide-apercu#rev-pnote-630-2" id="pnote-630-2" name="pnote-630-2"&gt;2&lt;/a&gt;]
Enfin, rien dans Dotclear 2.1 ne vous empêchera d'en tenter l'expérience, mais
vous serez forcément déçu du résultat. :-)&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/Dr722JjoBpw" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2008/10/23/Les-themes-herites-dans-Dotclear-21-%3A-un-rapide-apercu#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/17</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Template personnalisé par catégorie : au tour des billets</title>
    <link href="http://www.turbinagaz.com/post/2008/10/17/Template-personnalise-par-categorie-%3A-au-tour-des-billets" rel="alternate" type="text/html" title="Template personnalisé par catégorie : au tour des billets" />
    <id>urn:md5:14ca6152ed2373866d7fb808bfce2621</id>
    <updated>2008-10-17T17:03:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>Fiches pratiques</dc:subject>
            
    <content type="html">&lt;p&gt;J'avais abordé, il y a déjà quelques temps, cette histoire de &lt;a href="http://www.turbinagaz.com/post/2008/04/29/Template-personnalise-par-categorie" hreflang="fr"&gt;template personnalisé par catégorie&lt;/a&gt;. Mais à l'époque, je m'étais contenté de fournir un moyen d'utiliser un balisage XHTML différent pour la partie liste.&lt;/p&gt;


&lt;p&gt;En travaillant sur le prochain habillage de &lt;q&gt;Bricoland Drive&lt;/q&gt;, je me suis rendu compte que j'avais besoin d'aller au-delà&amp;nbsp;: j'aimerais bien pouvoir jouer sur la structure des billets rattachés à une catégorie donnée. Pourquoi s'en priver puisque le principe est le même, et que ça se fait en 2 coups de cuillères à pot.&lt;/p&gt;


&lt;p&gt;Encore une fois, il n'y a absolument rien de sorcier là dedans. Mais comme j'ai reçu aujourd'hui même une demande par mail portant sur cet aspect là, autant laisser une trace publique.&lt;/p&gt;    &lt;p&gt;Reprenons donc le chemin de ce cher fichier &lt;strong&gt;_public.php&lt;/strong&gt;, présent dans notre thème depuis l'épisode précédent.&lt;/p&gt;


&lt;p&gt;Tout ce que nous avons à faire, c'est de lui ajouter la prise en charge du mode &lt;code&gt;post&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;On commence donc par y placer l'interception des URLs correspondant à ce mode, en faisant pointer la réponse vers la méthode personnalisée que nous fournirons tout de suite après&amp;nbsp;:&lt;/p&gt;
&lt;pre class="brush: php"&gt;$core-&amp;gt;url-&amp;gt;register('post','post','^post/(.+)$', array('myURLHandlers','post'));&lt;/pre&gt;

&lt;p&gt;Nous ajoutons maintenant la nouvelle méthode &lt;code&gt;post()&lt;/code&gt; dans notre classe &lt;code&gt;myURLHandlers&lt;/code&gt;, une fois de plus en ayant recours à un vilain copier/coller depuis le fichier &lt;strong&gt;dotclear/inc/public/lib.urlhandlers.php&lt;/strong&gt;. Et nous n'en modifierons que l'essentiel, c'est-à-dire la partie finale destinée à appeler le rendu du template.&lt;/p&gt;


&lt;p&gt;Le code d'origine&amp;nbsp;:&lt;/p&gt;
&lt;pre class="brush: php"&gt;# The entry
self::serveDocument('post.html');
exit;&lt;/pre&gt;

&lt;p&gt;n'aura qu'à faire place à celui-ci&amp;nbsp;:&lt;/p&gt;
&lt;pre class="brush: php"&gt;# The entry
$tpl = 'post.html';
if ($_ctx-&amp;gt;posts-&amp;gt;cat_id) {
	$alt_tpl = 'post-cat'.strtolower($_ctx-&amp;gt;posts-&amp;gt;cat_id).'.html';
	if ($core-&amp;gt;tpl-&amp;gt;getFilePath($alt_tpl)) {
		$tpl = $alt_tpl;
	}
}
self::serveDocument($tpl);
exit;&lt;/pre&gt;

&lt;p&gt;Voilà. Nous y sommes. Ou presque... :-)&lt;/p&gt;


&lt;p&gt;&lt;q&gt;Presque&lt;/q&gt; parce que maintenant que Dotclear 2 nous permet une jolie prévisualisation &lt;em&gt;in situ&lt;/em&gt; d'un billet en cours de rédaction, il pourrait être sympa que cette dernière prenne en compte notre modification. Une fois encore, l'ajout de ce petit raffinement sera réglé par copier/coller (&lt;em&gt;* sic *&lt;/em&gt;) .&lt;/p&gt;


&lt;p&gt;Au final, notre nouveau &lt;strong&gt;_public.php&lt;/strong&gt; hérite de cette tête&amp;nbsp;:&lt;/p&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php
if (!defined('DC_RC_PATH')) die;
$core-&amp;gt;url-&amp;gt;register('category','category','^category/(.+)$',array('myURLHandlers','category'));
$core-&amp;gt;url-&amp;gt;register('post','post','^post/(.+)$',array('myURLHandlers','post'));
$core-&amp;gt;url-&amp;gt;register('preview','preview','^preview/(.+)$',array('myURLHandlers','preview'));

class myURLHandlers extends dcUrlHandlers
{
	public static function category($args)
	{
		$_ctx =&amp;amp; $GLOBALS['_ctx'];
		$core =&amp;amp; $GLOBALS['core'];
		
		$n = self::getPageNumber($args);
		
		if ($args == '' &amp;amp;&amp;amp; !$n) {
			self::p404();
		}
		
		$params['cat_url'] = $args;
		$params['post_type'] = 'post';
		
		$_ctx-&amp;gt;categories = $core-&amp;gt;blog-&amp;gt;getCategories($params);
		
		if ($_ctx-&amp;gt;categories-&amp;gt;isEmpty()) {
			self::p404();
		} else {
			if ($n) {
				$GLOBALS['_page_number'] = $n;
			}
			$tpl = 'category-'.$_ctx-&amp;gt;categories-&amp;gt;cat_id.'.html';
			if (!$core-&amp;gt;tpl-&amp;gt;getFilePath($tpl)) {
				$tpl = 'category.html';
			}
			self::serveDocument($tpl);
			exit;
		}
	}
	
	public static function post($args)
	{
		if ($args == '') {
			self::p404();
		}
		
		$_ctx =&amp;amp; $GLOBALS['_ctx'];
		$core =&amp;amp; $GLOBALS['core'];
		
		$core-&amp;gt;blog-&amp;gt;withoutPassword(false);
		
		$params = new ArrayObject();
		$params['post_url'] = $args;
		
		$_ctx-&amp;gt;posts = $core-&amp;gt;blog-&amp;gt;getPosts($params);
		
		$_ctx-&amp;gt;comment_preview = new ArrayObject();
		$_ctx-&amp;gt;comment_preview['content'] = '';
		$_ctx-&amp;gt;comment_preview['rawcontent'] = '';
		$_ctx-&amp;gt;comment_preview['name'] = '';
		$_ctx-&amp;gt;comment_preview['mail'] = '';
		$_ctx-&amp;gt;comment_preview['site'] = '';
		$_ctx-&amp;gt;comment_preview['preview'] = false;
		$_ctx-&amp;gt;comment_preview['remember'] = false;
		
		$core-&amp;gt;blog-&amp;gt;withoutPassword(true);
		
		
		if ($_ctx-&amp;gt;posts-&amp;gt;isEmpty())
		{
			# No entry
			self::p404();
		}
		
		$post_id = $_ctx-&amp;gt;posts-&amp;gt;post_id;
		$post_password = $_ctx-&amp;gt;posts-&amp;gt;post_password;
		
		# Password protected entry
		if ($post_password != '')
		{
			# Get passwords cookie
			if (isset($_COOKIE['dc_passwd'])) {
				$pwd_cookie = unserialize($_COOKIE['dc_passwd']);
			} else {
				$pwd_cookie = array();
			}
			
			# Check for match
			if ((!empty($_POST['password']) &amp;amp;&amp;amp; $_POST['password'] == $post_password)
			|| (isset($pwd_cookie[$post_id]) &amp;amp;&amp;amp; $pwd_cookie[$post_id] == $post_password))
			{
				$pwd_cookie[$post_id] = $post_password;
				setcookie('dc_passwd',serialize($pwd_cookie),0,'/');
			}
			else
			{
				self::serveDocument('password-form.html','text/html',false);
				exit;
			}
		}
		
		$post_comment =
			isset($_POST['c_name']) &amp;amp;&amp;amp; isset($_POST['c_mail']) &amp;amp;&amp;amp;
			isset($_POST['c_site']) &amp;amp;&amp;amp; isset($_POST['c_content']) &amp;amp;&amp;amp;
			$_ctx-&amp;gt;posts-&amp;gt;commentsActive();
		
		# Posting a comment
		if ($post_comment)
		{
			# Spam trap
			if (!empty($_POST['f_mail'])) {
				http::head(412,'Precondition Failed');
				header('Content-Type: text/plain');
				echo &amp;quot;So Long, and Thanks For All the Fish&amp;quot;;
				exit;
			}
			
			$name = $_POST['c_name'];
			$mail = $_POST['c_mail'];
			$site = $_POST['c_site'];
			$content = $_POST['c_content'];
			$preview = !empty($_POST['preview']);
			
			if ($content != '')
			{
				if ($core-&amp;gt;blog-&amp;gt;settings-&amp;gt;wiki_comments) {
					$core-&amp;gt;initWikiComment();
				} else {
					$core-&amp;gt;initWikiSimpleComment();
				}
				$content = $core-&amp;gt;wikiTransform($content);
				$content = $core-&amp;gt;HTMLfilter($content);
			}
			
			$_ctx-&amp;gt;comment_preview['content'] = $content;
			$_ctx-&amp;gt;comment_preview['rawcontent'] = $_POST['c_content'];
			$_ctx-&amp;gt;comment_preview['name'] = $name;
			$_ctx-&amp;gt;comment_preview['mail'] = $mail;
			$_ctx-&amp;gt;comment_preview['site'] = $site;
			
			if ($preview)
			{
				$_ctx-&amp;gt;comment_preview['preview'] = true;
			}
			else
			{
				# Post the comment
				$cur = $core-&amp;gt;con-&amp;gt;openCursor($core-&amp;gt;prefix.'comment');
				$cur-&amp;gt;comment_author = $name;
				$cur-&amp;gt;comment_site = html::clean($site);
				$cur-&amp;gt;comment_email = html::clean($mail);
				$cur-&amp;gt;comment_content = $content;
				$cur-&amp;gt;post_id = $_ctx-&amp;gt;posts-&amp;gt;post_id;
				$cur-&amp;gt;comment_status = $core-&amp;gt;blog-&amp;gt;settings-&amp;gt;comments_pub ? 1 : -1;
				$cur-&amp;gt;comment_ip = http::realIP();
				
				$redir = $_ctx-&amp;gt;posts-&amp;gt;getURL();
				$redir .= strpos($redir,'?') !== false ? '&amp;amp;' : '?';
				
				try
				{
					if (!text::isEmail($cur-&amp;gt;comment_email)) {
						throw new Exception(__('You must provide a valid email address.'));
					}

					# --BEHAVIOR-- publicBeforeCommentCreate
					$core-&amp;gt;callBehavior('publicBeforeCommentCreate',$cur);
					if ($cur-&amp;gt;post_id) {					
						$comment_id = $core-&amp;gt;blog-&amp;gt;addComment($cur);
					
						# --BEHAVIOR-- publicAfterCommentCreate
						$core-&amp;gt;callBehavior('publicAfterCommentCreate',$cur,$comment_id);
					}
					
					if ($cur-&amp;gt;comment_status == 1) {
						$redir_arg = 'pub=1';
					} else {
						$redir_arg = 'pub=0';
					}
					
					header('Location: '.$redir.$redir_arg);
					exit;
				}
				catch (Exception $e)
				{
					$_ctx-&amp;gt;form_error = $e-&amp;gt;getMessage();
					$_ctx-&amp;gt;form_error;
				}
			}
		}
		
		# The entry
		$tpl = 'post.html';
		if ($_ctx-&amp;gt;posts-&amp;gt;cat_id) {
			$alt_tpl = 'post-cat'.strtolower($_ctx-&amp;gt;posts-&amp;gt;cat_id).'.html';
			if ($core-&amp;gt;tpl-&amp;gt;getFilePath($alt_tpl)) {
				$tpl = $alt_tpl;
			}
		}
		self::serveDocument($tpl);
		exit;
	}
	
	public static function preview($args)
	{
		$core = $GLOBALS['core'];
		if (!preg_match('#^(.+?)/([0-9a-z]{40})/(.+?)$#',$args,$m)) {
			self::p404();
		}
		$user_id = $m[1];
		$user_key = $m[2];
		$post_url = $m[3];
		if (!$core-&amp;gt;auth-&amp;gt;checkUser($user_id,null,$user_key)) {
			self::p404();
		}
		
		self::post($post_url);
		exit;
	}
}
?&amp;gt;&lt;/pre&gt;

&lt;p&gt;Ainsi, pour effectuer le rendu d'un billet&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nous regardons d'abord si le billet appartient à une catégorie&lt;/li&gt;
&lt;li&gt;Si c'est le cas, nous demandons à Dotclear 2 de nous dire si un fichier template nommé &lt;code&gt;post-cat##.html&lt;/code&gt; existe (où &lt;code&gt;##&lt;/code&gt; représente l'identifiant numérique de la catégorie).&lt;/li&gt;
&lt;li&gt;Si Dotclear 2 nous répond positivement, c'est ce template là qui sera rendu.&lt;/li&gt;
&lt;li&gt;Dans tous les autres cas, nous continuerons à servir un &lt;code&gt;post.html&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une fois de plus, c'est un jeu d'enfant.&lt;/p&gt;


&lt;p&gt;Néanmoins, les plus pointilleux d'entre vous auront remarqué une chose flagrante&amp;nbsp;: cette solution n'est pas élégante, puisqu'elle impose de recourir à de vilains copier/coller. Nous sommes donc bien loin du principe &lt;acronym title="Don&amp;#039;t Repeat Yourself"&gt;DRY&lt;/acronym&gt;&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/10/17/Template-personnalise-par-categorie-%3A-au-tour-des-billets#pnote-16-1" id="rev-pnote-16-1"&gt;1&lt;/a&gt;]&lt;/sup&gt;, et sommes peut-être bien en face d'une faiblesse de conception de ce côté là de Dotclear 2.&lt;/p&gt;


&lt;p&gt;Mais là, c'est une autre histoire et le &lt;q&gt;Bricoland Drive&lt;/q&gt; n'est sans doute pas le lieu le plus approprié. ;-)&lt;/p&gt;
&lt;div class="footnotes"&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/10/17/Template-personnalise-par-categorie-%3A-au-tour-des-billets#rev-pnote-16-1" id="pnote-16-1"&gt;1&lt;/a&gt;] Pour les moins pointilleux - mais néanmoins curieux - d'entre vous, reportez-vous à : &lt;a href="http://en.wikipedia.org/wiki/DRY_code" hreflang="en"&gt;http://en.wikipedia.org/wiki/DRY_code&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/gI7Vz54Oprg" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2008/10/17/Template-personnalise-par-categorie-%3A-au-tour-des-billets#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/16</wfw:commentRss>
      </entry>
    
  <entry>
    <title>La nouvelle version de dc1redirect est arrivée</title>
    <link href="http://www.turbinagaz.com/post/2008/09/05/La-nouvelle-version-de-dc1redirect-est-arrivee" rel="alternate" type="text/html" title="La nouvelle version de dc1redirect est arrivée" />
    <id>urn:md5:b74e5ef3b50d02d14fa0b6dee2f3ccec</id>
    <updated>2008-09-05T02:23:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>DC1 Redirect</dc:subject>
        <dc:subject>annonce</dc:subject><dc:subject>dc1redirect</dc:subject><dc:subject>plugin</dc:subject><dc:subject>suivi</dc:subject>    
    <content type="html">    &lt;p&gt;... mais, comme &lt;a href="http://www.turbinagaz.com/post/2008/08/23/A-quand-la-reprise-d-activite-sur-Bricoland-Drive" hreflang="fr"&gt;prévu et annoncé précédemment&lt;/a&gt;, elle se trouve de nouveau dans le giron &lt;a href="http://dotclear.net/" hreflang="fr"&gt;dotclear.net&lt;/a&gt;. C'est désormais là-bas que vous pourrez en &lt;a href="http://dev.dotclear.net/2.0/browser/plugins/dc1redirect"&gt;suivre l'évolution&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://neokraft.net/" hreflang="fr"&gt;Olivier&lt;/a&gt; vient donc de signer &lt;a href="http://plugins.dotaddict.org/dc2/details/dc1redirect" hreflang="fr"&gt;une release 1.0 de ce petit plugin&lt;/a&gt;, en vue de compléter le nécessaire pour les migrations de Dotclear 1.x à Dotclear 2.0.x. Au passage, l'incompatibilité avec &lt;a href="http://plugins.dotaddict.org/dc2/details/alias" hreflang="fr"&gt;le plugin alias&lt;/a&gt;, qui avait été relevée par &lt;a href="http://mudry.org/blog/" hreflang="fr"&gt;Julien&lt;/a&gt;,  n'est plus.&lt;/p&gt;


&lt;p&gt;Les liens et informations encore présents par ici concernant cette extension seront mis à jour en conséquence.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/dD_BOu3ZR4c" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2008/09/05/La-nouvelle-version-de-dc1redirect-est-arrivee#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/15</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Arrivée surprise d'un petit nouveau : feedEntries</title>
    <link href="http://www.turbinagaz.com/post/2008/09/01/Arrivee-surprise-d-un-petit-nouveau-%3A-feedEntries" rel="alternate" type="text/html" title="Arrivée surprise d'un petit nouveau : feedEntries" />
    <id>urn:md5:d284a7de862950af131dd2046bd208d1</id>
    <updated>2008-09-01T15:04:00+02:00</updated>
    <author><name>Pep</name></author>
        <dc:subject>feedEntries</dc:subject>
        <dc:subject>annonce</dc:subject><dc:subject>feedEntries</dc:subject><dc:subject>plugin</dc:subject><dc:subject>suivi</dc:subject><dc:subject>templates</dc:subject>    
    <content type="html">    &lt;p&gt;Voici un petit plugin tout simple, tout bête qui ne figurait pas dans mon programme de ces jours, mais qui s'y est invité par la force des choses.&lt;/p&gt;


&lt;p&gt;Comme j'ai rencontré ce besoin sur un projet personnel, j'ai dû me bricoler le nécessaire pour pouvoir disposer de balises templates afin de présenter - en dehors du simple widget &lt;q&gt;Lecteur de nouvelles&lt;/q&gt; de Dotclear2 - le contenu d'un flux externe.&lt;sup&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/09/01/Arrivee-surprise-d-un-petit-nouveau-%3A-feedEntries#pnote-13-1" id="rev-pnote-13-1"&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;


&lt;p&gt;En résumé&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ce petit plugin n'a aucune interface d'administration et ne nécessite aucune configuration particulière.&lt;/li&gt;
&lt;li&gt;Toute la partie récupération et analyse du flux externe repose sur des classes déjà fournies par Dotclear2&amp;nbsp;: aucune librairie supplémentaire n'est donc nécessaire.&lt;/li&gt;
&lt;li&gt;Le jeu de balises fourni est disponible dans n'importe quel contexte (home, post, etc.).&lt;/li&gt;
&lt;li&gt;On peut intégrer plusieurs flux dans une même page, mais ils devront chacun disposer de leur propre boucle de traitement&amp;nbsp;: ce plugin n'a rien à voir avec un agrégateur de type &lt;q&gt;Planet&lt;/q&gt;.&lt;/li&gt;
&lt;li&gt;Pour l'instant, la seule documentation se résume aux quelques commentaires présents dans le fichier _public.php.&lt;/li&gt;
&lt;li&gt;Je pense déjà à l'ajout d'une nouvelle fonctionnalité qui pourrait être bien utile, mais je préfère pour l'instant me contenter de valider l'essentiel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour les pré-requis, vous commencez à connaitre la musique&amp;nbsp;: c'est pour du &lt;strong&gt;Dotclear 2.0.x&lt;/strong&gt;.&lt;br /&gt;
Si vous êtes intéressé, il ne vous reste plus qu'à &lt;a href="http://download.turbinagaz.com/dc2/plugins/dev/plugin-feedEntries-1.0-RC1.zip"&gt;télécharger le ZIP (version 1.0-RC1 (4 Ko))&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Vos retours seront les bienvenus.&lt;/p&gt;
&lt;div class="footnotes"&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href="http://www.turbinagaz.com/post/2008/09/01/Arrivee-surprise-d-un-petit-nouveau-%3A-feedEntries#rev-pnote-13-1" id="pnote-13-1"&gt;1&lt;/a&gt;] Pour ceux qui auraient un peu de mal à voir de quoi je parle, il s'agit &lt;q&gt;grosso merdo&lt;/q&gt; d'un équivalent de ce qui existait pour Dotclear 1.x et connu en tant que &lt;q&gt;RSS Reader&lt;/q&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/bricoland/~4/XJndcUTe25E" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://www.turbinagaz.com/post/2008/09/01/Arrivee-surprise-d-un-petit-nouveau-%3A-feedEntries#comment-form</wfw:comment>
      <wfw:commentRss>http://www.turbinagaz.com/feed/atom/comments/13</wfw:commentRss>
      </entry>
  
</feed>
