<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://planete.drupalfr.org" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>planete drupalfr -</title>
 <link>http://planete.drupalfr.org/frontpage</link>
 <description>The basic front page view.</description>
 <language>en</language>
<item>
 <title>Partie II – Plus loin dans le référencement</title>
 <link>http://planete.drupalfr.org/node/865</link>
 <description>&lt;p&gt;Ce que nous venons de faire était simple mais pourtant ces actions étaient essentielles. Maintenant nous allons aller un petit peu plus loin et passer à des choses plus marrantes.
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;XML sitemaps&lt;/h3&gt;
&lt;p&gt;La création d’un site map ou en français d’un plan de site va permettre d’indiquer facilement aux moteurs de recherche le contenu qu’il leur est possible d’explorer sur notre site.&lt;/p&gt;
&lt;p&gt;Un Site map est une cartographie d&amp;#8217;adresses des différents contenus qui composent votre site Internet auxquels on ajoute des informations, de précieuses méta-données.&lt;/p&gt;
&lt;p&gt;Pour réaliser un site map facilement vous pouvez utiliser les modules Site map ou XML site map qui ont été conçu pour répondre aux spécifications de sitemaps.org.&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;hvw_&quot; title=&quot;Mettre en place un sitemap sur votre site.&quot; href=&quot;http://juliendubreuil.fr/drupal/creation-plan-de-site-ou-sitemap-pour-drupal&quot; rel=&quot;nofollow&quot;&gt;Mettre en place un sitemap sur votre site.&lt;/a&gt;&lt;br /&gt;
Modules requis : &lt;a id=&quot;v8v6&quot; title=&quot;site map&quot; href=&quot;http://drupal.org/project/site_map&quot; rel=&quot;nofollow&quot;&gt;site map&lt;/a&gt; ou &lt;a id=&quot;cbar&quot; title=&quot;xml site map&quot; href=&quot;http://drupal.org/project/xmlsitemap&quot; rel=&quot;nofollow&quot;&gt;xml site map&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;
&lt;h3&gt;Robots txt&lt;/h3&gt;
&lt;p&gt;Lorsqu&amp;#8217;un moteur de recherche analyse votre site web on dit que celui-ci indexe votre contenu, ce robot d&amp;#8217;indexation est appelé Crawler (&amp;laquo;&amp;nbsp;Butineurs&amp;nbsp;&amp;raquo;). Il fonctionne comme un internaute, il navigue de lien en lien, analyse le contenu et indexe les mots clés qu&amp;#8217;il rencontre dans le but de capitaliser le plus de page web possible.&lt;/p&gt;
&lt;p&gt;Afin de préciser au Crawler ce qu&amp;#8217;il doit ou ce qu&amp;#8217;il n&amp;#8217;a pas le droit d&amp;#8217;indexer on utilise un fichier nommé Robot.txt contenant des règles d&amp;#8217;autorisation ou d&amp;#8217;exclusion. Ce fichier est la première chose lue par le moteur d&amp;#8217;indexation lors de son passage sur votre site. Si toutefois vous n&amp;#8217;aviez pas de fichier Robots.txt sur votre site, le Crawler considèrera qu&amp;#8217;il peut analyser tout le contenu de votre site.&lt;/p&gt;
&lt;p&gt;Notez que dans l&amp;#8217;archive de Drupal que vous avez téléchargée, il y a déja un fichier Robots.txt&lt;/p&gt;
&lt;p&gt;Pour plus de renseignements sur la configuration du fichier je vous renvoie sur &lt;a id=&quot;ob5m&quot; title=&quot;wikipédia&quot; href=&quot;http://fr.wikipedia.org/wiki/Robots.txt&quot; rel=&quot;nofollow&quot;&gt;wikipédia&lt;/a&gt; et sur &lt;a id=&quot;&quot; title=&quot;annuaires-info&quot; href=&quot;http://www.annuaire-info.com/robots-txt/fichier/&quot; rel=&quot;nofollow&quot;&gt;annuaire-info&lt;/a&gt; pour quelques exemples.&lt;/p&gt;
&lt;p&gt;Avec Drupal il y a un module pour presque tout, alors il existe un module pour gérer le fichier robots.txt depuis l&amp;#8217;interface d&amp;#8217;administration, mais notez que ce module est surtout utile dans le cas de gestion de multi-site ou vous auriez un fichier par site.
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Global redirect&lt;/h3&gt;
&lt;p&gt;Dans la premiere partie de cet article nous avons mis en place les &amp;laquo;&amp;nbsp;belles urls&amp;nbsp;&amp;raquo; afin d&amp;#8217;avoir des urls de type http://monsite.fr/drupal-référencement. A ce stade nous nous retrouvons avec un problème de duplication de contenu. En effet Drupal ne desactive pas l&amp;#8217;ancienne adresse et le contenu devient accessible par deux adresses.&lt;br /&gt;
Cet action est dangeureuse, Google n&amp;#8217;aime pas ça et il assigne cela à de la multiplication artificielle de contenu qu&amp;#8217;il punit en inscrivant votre site à sa liste noire.&lt;/p&gt;
&lt;p&gt;Pour éliminer ce problème nous allons utiliser le module global redirect qui, au moment de l&amp;#8217;accès à une page, interrompera le chargement de celle-ci et redirigera vers l&amp;#8217;alias de la page.&lt;/p&gt;
&lt;p&gt;L&amp;#8217;administration du module se fait depuis la page [ Admin › configuration du site › globalredirect ] mais la configuration par défaut est parfaite.&lt;/p&gt;
&lt;p&gt;Modules requis : &lt;a id=&quot;mami&quot; title=&quot;global redirect&quot; href=&quot;http://drupal.org/project/globalredirect&quot; rel=&quot;nofollow&quot;&gt;global redirect&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;
&lt;h3&gt;Path redirect&lt;/h3&gt;
&lt;p&gt;Le nom de ce module parle de lui même. Path redirect permet de rediriger des urls vers un autre chemin interne ou externe. Ce qui est pratique lorsque votre contenu a bougé ou que vous souhaitez détourner le trafic vers une autre page.&lt;/p&gt;
&lt;p&gt;Pour créer une redirection c&amp;#8217;est très simple, il vous suffit de vous rendre sur la page dédiée : [ Admin › construction du site › urls redirigées ] d&amp;#8217;insérer l&amp;#8217;ancienne adresse, la nouvelle adresse et les variables à passer avec l&amp;#8217;url.&lt;/p&gt;
&lt;p&gt;Vous pouvez depuis le menu &amp;#8216;Paramètres&amp;#8217; choisir d&amp;#8217;informer l&amp;#8217;internaute qu&amp;#8217;il subit une redirection vers une autre page.&lt;/p&gt;
&lt;p&gt;Modules requis : &lt;a id=&quot;qcc0&quot; title=&quot;Path redirect&quot; href=&quot;http://drupal.org/project/path_redirect&quot; rel=&quot;nofollow&quot;&gt;Path redirect&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Search 404&lt;/h3&gt;
&lt;p&gt;Lorsque vous essayez d&amp;#8217;accéder à un contenu inexistant ou que l&amp;#8217;adresse url à changé Drupal vous affiche une page d&amp;#8217;erreur, c&amp;#8217;est la fameuse page 404.&lt;/p&gt;
&lt;p&gt;Le module seach 404 va nous permettre d&amp;#8217;aller plus loin dans l&amp;#8217;aide aux internautes puisqu&amp;#8217;il permet lorsqu&amp;#8217;une page est introuvable d&amp;#8217;exécuter une recherche en fonction de la demande initiale.&lt;/p&gt;
&lt;p&gt;Prenez par exemple la page &lt;a href=&quot;http://monsite.fr/does/not/exist&quot; title=&quot;http://monsite.fr/does/not/exist&quot; rel=&quot;nofollow&quot;&gt;http://monsite.fr/does/not/exist&lt;/a&gt;, search 404 va effectuer une recherche sur la phrase &amp;laquo;&amp;nbsp;does not exist&amp;nbsp;&amp;raquo;.&lt;/p&gt;
&lt;p&gt;L&amp;#8217;administration du module [ Admin › configuration du site › Search 404 settings ] permet de modifier le comportement du module lorsqu&amp;#8217;il trouve une réponse pour rediriger l&amp;#8217;internaute. Vous pouvez ainsi choisir de forcer l&amp;#8217;utilisateur à être redirigé vers la première réponse. Je déconseille fortement d&amp;#8217;activer cette option, car vos utilisateurs risquent de ne pas comprendre comment et pourquoi ils sont arrivés à cet endroit.&lt;/p&gt;
&lt;p&gt;Modules requis : &lt;a id=&quot;mv2k&quot; title=&quot;Search 404&quot; href=&quot;http://drupal.org/project/search404&quot; rel=&quot;nofollow&quot;&gt;Search 404&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
Vous êtes maintenant bien préparé pour mener votre combat au référencement. Mais installer des modules n&amp;#8217;est pas suffisant, il faut aussi surveiller et optimiser ce qui à été fait. Pour cela rendez-vous dans la troisième partie ou nous aborderons ce sujet qui vous donnera quelques pistes à étudier.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/666">Documentations</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/663">Julien</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/425">Modules</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/164">référencement</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/284">Tutoriels</category>
 <pubDate>Fri, 12 Mar 2010 13:36:48 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">865 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>module Display Suite</title>
 <link>http://planete.drupalfr.org/node/863</link>
 <description>&lt;p&gt;&lt;img src=&quot;http://biboo.net/sites/default/files/imagecache/bbfeeds-teaser/bbf-images/Display-Suite.png&quot; alt=&quot;&quot; title=&quot;&quot; class=&quot;imagecache imagecache-bbfeeds-teaser imagecache-default imagecache-bbfeeds-teaser_default&quot; width=&quot;150&quot; height=&quot;90&quot; /&gt;        &lt;/p&gt;
&lt;p&gt;Une superbe démonstration &lt;a href=&quot;http://drupal.org/project/ds&quot; rel=&quot;nofollow&quot;&gt;du module Display Suite&lt;/a&gt;. Ce module ressemble à un Panels appliqué à la node : il permet de construire des &quot;layouts de node&quot; en arrangeant à sa guise les champs CCK présents ... A module à explorer.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/676">Bob Christenson</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/736">display suite</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/669">drupal.6.x</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/670">Module démo</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/687">module externe</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/575">robin</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/671">tutoriel video drupal</category>
 <pubDate>Thu, 11 Mar 2010 19:02:11 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">863 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>module drupal : WYSIWYG</title>
 <link>http://planete.drupalfr.org/node/864</link>
 <description>&lt;p&gt;&lt;img src=&quot;http://biboo.net/sites/default/files/imagecache/book-thumbail/bookImage/wysiwyg-titleclip.png&quot; alt=&quot;&quot; title=&quot;&quot; class=&quot;imagecache imagecache-book-thumbail imagecache-default imagecache-book-thumbail_default&quot; width=&quot;150&quot; height=&quot;113&quot; /&gt;        &lt;/p&gt;
&lt;p&gt;
        Une petite démonstration en image du module &lt;a class=&quot;&quot; href=&quot;http://drupal.org/project/wysiwyg&quot; title=&quot;&quot; rel=&quot;nofollow&quot;&gt;WYSIWYG&lt;/a&gt; qui va vous permettre d&#039;installer des éditeurs wysiwyg externes sur votre champ&lt;br /&gt;
        Body ou autres champs CCK textarea ...
      &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://biboo.net/drupal-module-wysiwyg&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;en lire plus&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/669">drupal.6.x</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/670">Module démo</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/687">module externe</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/575">robin</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/671">tutoriel video drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/673">wysiwyg api</category>
 <pubDate>Thu, 11 Mar 2010 16:59:05 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">864 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>node reference</title>
 <link>http://planete.drupalfr.org/node/862</link>
 <description>&lt;p&gt;&lt;img src=&quot;http://biboo.net/sites/default/files/imagecache/bbfeeds-teaser/bbf-images/node-reference.png&quot; alt=&quot;&quot; title=&quot;&quot; class=&quot;imagecache imagecache-bbfeeds-teaser imagecache-default imagecache-bbfeeds-teaser_default&quot; width=&quot;150&quot; height=&quot;97&quot; /&gt;        &lt;/p&gt;
&lt;p&gt;Dans cette vidéo, Bob Christensen nous montre un exemple d&#039;utilisation du champ CCK &quot;Node reference&quot; (fourni par defaut avec CCK).&lt;br&gt;Grâce à l&#039;utilisation des modules &lt;a href=&quot;http://drupal.org/project/nodereference_url&quot; rel=&quot;nofollow&quot;&gt;Node Reference URL Widget&lt;/a&gt; et &lt;a href=&quot;http://drupal.org/project/views_attach&quot; rel=&quot;nofollow&quot;&gt;Views attach&lt;/a&gt;, l&#039;utilisateur pourra ajouter automatiquement des contenus &quot;relatifs&quot; à un article principal. Les contributions s&#039;affichent ensuite en dessous de l&#039;article principal à l&#039;aide de Views attach. Un peu complexe à comprendre, mais très intéressant comme approche ... à tester.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/676">Bob Christenson</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/733">CCK content construction kit</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/669">drupal.6.x</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/670">Module démo</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/687">module externe</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/734">node reference url widget</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/575">robin</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/671">tutoriel video drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/125">views</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/735">views attach</category>
 <pubDate>Thu, 11 Mar 2010 16:26:46 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">862 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Webdev | Aldebaran Robotics</title>
 <link>http://planete.drupalfr.org/node/861</link>
 <description>&lt;p&gt;Webdev        &lt;/p&gt;
&lt;p&gt;                    Aldebaran Robotics        &lt;/p&gt;
&lt;p&gt;              Employment type:&amp;nbsp;&lt;br /&gt;
                    Full time        &lt;/p&gt;
&lt;p&gt;              Telecommute:&amp;nbsp;&lt;br /&gt;
                    Not allowed        &lt;/p&gt;
&lt;p&gt;Aldebaran Robotics vend ses robots partout dans le monde et le web est notre principal outil de communication vers l’extérieur.&lt;br /&gt;
Composé de plusieurs sites dédiés, le déploiement web a besoin d’une sérieuse mise à niveau : entre le site grand public difficile à maintenir, des sites dédiés obsolètes et la volonté d’offrir de nouveaux services en ligne, le travail ne manque pas !&lt;/p&gt;
&lt;p&gt;Encadré par l’équipe communication, vous aurez la charge de tous ces développements et serez force de proposition sur les améliorations possibles de l’ensemble du déploiement.&lt;/p&gt;
&lt;p&gt;Profil recherché&lt;br /&gt;
Développeur web souple, maitrisant différents langages et CMS, vous saurez vous adapter aux contraintes de visibilité et de gestion de communauté, en proposant des solutions adaptées.&lt;/p&gt;
&lt;p&gt;Compétences requises&lt;br /&gt;
   Rigoureux, autonome et énergique&lt;br /&gt;
   Maitrise de Drupal et de Joomla&lt;br /&gt;
   Très bonnes compétences en css, html, Javascript et PHP&lt;br /&gt;
   Des compétences en Flash et autres technologies sont un plus.&lt;/p&gt;
&lt;p&gt;Poste à pourvoir immédiatement&lt;br /&gt;
Poste basé à Paris.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:parent@aldebaran-robotics.com&quot; rel=&quot;nofollow&quot;&gt;parent@aldebaran-robotics.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;                    &lt;a href=&quot;http://www.aldebaran-robotics.com&quot; rel=&quot;nofollow&quot;&gt;http://www.aldebaran-robotics.com&lt;/a&gt;        &lt;/p&gt;
&lt;p&gt; Fichier attachéTaille &lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;http://groups.drupal.org/files/_MG_4365.jpg&quot; rel=&quot;nofollow&quot;&gt;_MG_4365.jpg&lt;/a&gt;116.05 Ko &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.drupal.org/france&quot; rel=&quot;nofollow&quot;&gt;France&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/731">Bastien</category>
 <pubDate>Wed, 10 Mar 2010 15:38:33 +0000</pubDate>
 <dc:creator>Drupal Groupe France</dc:creator>
 <guid isPermaLink="false">861 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Drupal côté jardin</title>
 <link>http://planete.drupalfr.org/node/860</link>
 <description>&lt;p&gt;Bonjour,&lt;/p&gt;
&lt;p&gt;Il y a peu j&#039;ai reçu mon invitation pour tester &lt;a href=&quot;http://www.drupalgardens.com&quot; rel=&quot;nofollow&quot;&gt;Drupal Gardens&lt;/a&gt;. Comme le savent déjà &lt;a href=&quot;http://www.drupalistic.net/gardens-le-wordpresscom-de-drupal&quot; rel=&quot;nofollow&quot;&gt;nos plus fidèles lecteurs&lt;/a&gt;, Gardens est une initiative de la société Acquia, et consiste en une offre hébergée de Drupal 7. Comme sur Wordpress.com où en quelques instants vous créez votre blog Wordpress, Gardens permet d&#039;installer facilement puis de paramétrer (moins facilement) un site Drupal.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/451">drupal 7</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/629">Gardens</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/624">Marie-Hélène Wronecki</category>
 <pubDate>Tue, 09 Mar 2010 17:06:40 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">860 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Stage Développement | G-Nova</title>
 <link>http://planete.drupalfr.org/node/859</link>
 <description>&lt;p&gt;G-Nova        &lt;/p&gt;
&lt;p&gt;                    Stage Développement        &lt;/p&gt;
&lt;p&gt;              Employment type:&amp;nbsp;&lt;br /&gt;
                    Full time        &lt;/p&gt;
&lt;p&gt;              Employment type:&amp;nbsp;&lt;br /&gt;
                    Part time        &lt;/p&gt;
&lt;p&gt;              Telecommute:&amp;nbsp;&lt;br /&gt;
                    Not allowed        &lt;/p&gt;
&lt;p&gt;G-Nova, agence Nantaise dynamique en web-marketing cherche jeunes motards du web habitués aux arsouilles PHP/MySQL de 2 ans et +. La maîtrise de Drupal dans sa version 6 cylindres est vivement appréciée afin de s’intégrer rapidement à la bande.&lt;/p&gt;
&lt;p&gt;L’esprit Libre est un pré-requis tout comme la culture de l’open-source. L’implication dans la communauté Drupal est un plus.&lt;/p&gt;
&lt;p&gt;Vous n’hésitez pas à crier “Gaz !”, à relever les nouveaux défis et enrouler courbes après courbes, alors ce poste est fait pour vous !&lt;/p&gt;
&lt;p&gt;Cette offre s&#039;adresse à tout type de stage (alternance, stages, fin d&#039;études etc) et n&#039;est pas limitée dans le temps.&lt;/p&gt;
&lt;p&gt;                    &lt;a href=&quot;http://www.g-nova.fr&quot; rel=&quot;nofollow&quot;&gt;http://www.g-nova.fr&lt;/a&gt;        &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.drupal.org/rennes-bretagne&quot; rel=&quot;nofollow&quot;&gt;Rennes / Bretagne&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/126">france</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/698">GoZ</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/730">Nantes</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/237">stage</category>
 <pubDate>Tue, 09 Mar 2010 11:04:37 +0000</pubDate>
 <dc:creator>Drupal Groupe France</dc:creator>
 <guid isPermaLink="false">859 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Créer et appliquer un patch pour un module sous Linux</title>
 <link>http://planete.drupalfr.org/node/858</link>
 <description>&lt;p&gt;Il est parfois inévitable de devoir modifier un module contribué afin d&amp;#8217;étendre les possibilités de celui-ci ou tout simplement pour corriger quelque chose.&lt;br /&gt;
Dans tous les cas il ne faut pas modifier les fichiers du module et les mettre sur votre site parce qu&amp;#8217;à ce moment il vous sera compliqué de mettre à jour votre module. Imaginez le jour ou vous voudrez appliquer la nouvelle version de celui-ci, toutes vos modifications seront écrasées.&lt;/p&gt;
&lt;p&gt;Pour modifier correctement un module vous devez créer un patch que vous appliquerez par la suite au module original.&lt;/p&gt;
&lt;p&gt;Dans un premier temps nous allons voir comment générer notre patch puis comment l&amp;#8217;appliquer. Il existe plusieurs façons pour faire cela. La solution que je vous propose n&amp;#8217;est qu&amp;#8217;une solution parmi tant d&amp;#8217;autres.&lt;/p&gt;
&lt;p&gt;Comme exemple j&amp;#8217;ai pris la fonction facebook_status_activity() du module facebook_status ci-dessous. Cette fonction permet, lorsque le module activity est installé, d&amp;#8217;insérer des activités lorsqu&amp;#8217;un utilisateur a mis à jour son statut.&lt;/p&gt;
&lt;p&gt;function facebook_status_activity($owner, $poster, $status) {&lt;br /&gt;
  //If we&#039;re using Activity 2, this function doesn&#039;t need to be run.&lt;br /&gt;
  if (!module_exists(&#039;activity&#039;) || function_exists(&#039;activity_help&#039;)) {&lt;br /&gt;
    return FALSE;&lt;br /&gt;
  }&lt;br /&gt;
  //Privacy setting check.&lt;br /&gt;
  if (activity_user_privacy_optout($poster)) {&lt;br /&gt;
    return FALSE;&lt;br /&gt;
  }&lt;br /&gt;
  $data = array(&lt;br /&gt;
    &#039;owner&#039; =&amp;#62; theme(&#039;username&#039;, $owner),&lt;br /&gt;
    &#039;poster&#039; =&amp;#62; theme(&#039;username&#039;, $poster),&lt;br /&gt;
    &#039;status-unformatted&#039; =&amp;#62; check_plain($status-&amp;#62;status),&lt;br /&gt;
    &#039;status-themed&#039; =&amp;#62; theme(&#039;facebook_status_item&#039;, $status),&lt;br /&gt;
    &#039;status_time&#039; =&amp;#62; $status-&amp;#62;status_time,&lt;br /&gt;
  );&lt;br /&gt;
  $target_users_roles = array(&lt;br /&gt;
    ACTIVITY_ALL =&amp;#62; &#039;all&#039;,&lt;br /&gt;
    $owner-&amp;#62;uid =&amp;#62; &#039;owner&#039;,&lt;br /&gt;
  );&lt;br /&gt;
  //If $owner-&amp;#62;uid == $poster-&amp;#62;uid, this will just overwrite the owner role.&lt;br /&gt;
  $target_users_roles[$poster-&amp;#62;uid] = &#039;poster&#039;;&lt;br /&gt;
  activity_insert($poster-&amp;#62;uid, &#039;facebook_status&#039;, &#039;facebook_status&#039;, &#039;update&#039;, $data, $target_users_roles);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Avant tout, nous allons créer une copie de notre fichier que nous allons nommer facebook_status.origine.module et qui sera notre version de référence pour effectuer notre comparaison.&lt;/p&gt;
&lt;p&gt;Maintenant nous allons pouvoir apporter toutes nos modifications au fichier facebook_status.module. Dans notre cas nous allons ajouter une nouvelle entrée au tableau data, qui contiendra l&amp;#8217;id du statut.&lt;/p&gt;
&lt;p&gt;&#039;status-id&#039; =&amp;#62; $status-&amp;#62;sid.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;1. Repérer les différences avec la commande diff&lt;/h3&gt;
&lt;p&gt;A ce stade nous avons nos deux fichiers, l&amp;#8217;original et le modifié. La commande diff va nous permettre de voir la différence entre les deux fichiers :&lt;/p&gt;
&lt;p&gt;$ diff facebook_status.module.origine facebook_status.module&lt;br /&gt;
1558a1559&lt;br /&gt;
&amp;#62;     &#039;status-id&#039; =&amp;#62; $status-&amp;#62;sid,&lt;/p&gt;
&lt;p&gt;La comparaison entre la version originale et la nouvelle version nous indique qu&amp;#8217;entre la ligne 1558 et 1559 une différence a été trouvée. Ici c&amp;#8217;est une nouvelle ligne qui a été insérée, on peut le voir grâce au symbôle &amp;#8216;&amp;#62;&amp;#8217;. Dans le cas d&amp;#8217;une suppression le symbôle aurait été &amp;#8216;&amp;#60;&amp;#8217;.&lt;/p&gt;
&lt;p&gt;La commande diff permet également de connaître les différences entre les fichiers de deux répertoires. Pour cela, il suffit d&amp;#8217;ajouter le paramètre -r à la commande :&lt;/p&gt;
&lt;p&gt;diff -r facebook_status.module facebook_status_origine.module&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;2. Créer le fichier de patch&lt;/h3&gt;
&lt;p&gt;Nous allons maintenant créer un fichier contenant cette modification que l&amp;#8217;on pourra appliquer facilement par la suite. Nous allons réutiliser la fonction diff avec l&amp;#8217;option -u qui en plus de notre différence va nous donner les 3 lignes avant et après notre modification.&lt;/p&gt;
&lt;p&gt;$ diff -u facebook_status.module.origine facebook_status.module &amp;#62; facebook_status.module.patch&lt;br /&gt;
$ cat facebook_status.module.patch&lt;br /&gt;
--- facebook_status.module.origine    2010-03-04 15:47:47.000000000 +0100&lt;br /&gt;
+++ facebook_status.module    2010-03-01 14:16:47.000000000 +0100&lt;br /&gt;
@@ -1556,6 +1556,7 @@&lt;br /&gt;
   $data = array(&lt;br /&gt;
     &#039;owner&#039; =&amp;#62; theme(&#039;username&#039;, $owner),&lt;br /&gt;
     &#039;poster&#039; =&amp;#62; theme(&#039;username&#039;, $poster),&lt;br /&gt;
+    &#039;status-id&#039; =&amp;#62; $status-&amp;#62;sid,&lt;br /&gt;
     &#039;status-unformatted&#039; =&amp;#62; check_plain($status-&amp;#62;status),&lt;br /&gt;
     &#039;status-themed&#039; =&amp;#62; theme(&#039;facebook_status_item&#039;, $status),&lt;br /&gt;
     &#039;status_time&#039; =&amp;#62; $status-&amp;#62;status_time,&lt;/p&gt;
&lt;p&gt;Les différences trouvées ont été enregistrées dans un fichier nommé facebook_status.module.patch.&lt;/p&gt;&lt;/p&gt;
&lt;h3&gt;3. Patcher avec la commande patch&lt;/h3&gt;
&lt;p&gt;Maintenant que nous avons un fichier patch exploitable nous allons pouvoir l&amp;#8217;appliquer à la version originale de notre fichier. Vous pouvez supprimer le fichier facebook_status.module et renommer le fichier facebook_status.module.origine en facebook_status.module afin que les choses retournent à leur état initial ou tout simplement retélécharger le module.&lt;/p&gt;
&lt;p&gt;Pour mettre à jour notre fichier, rendez vous dans le repertoire du fichier à patcher et utilisez la commande patch :&lt;/p&gt;
&lt;p&gt;$ patch &amp;#60; facebook_status.module.patch&lt;br /&gt;
patching file facebook_status.module&lt;/p&gt;
&lt;p&gt;Votre fichier est maintenant patché, vous pouvez l&amp;#8217;ouvrir pour visualiser les modifications.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/161">Développement</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/663">Julien</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/180">linux</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/425">Modules</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/729">Patch</category>
 <pubDate>Mon, 08 Mar 2010 12:44:45 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">858 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Drupal 7 Code Sprint Montreal</title>
 <link>http://planete.drupalfr.org/node/857</link>
 <description>&lt;h2 class=&quot;title subtitle&quot;&gt;La communauté montréalaise se réunit pour faire avancer Drupal 7&lt;/h2&gt;
&lt;p&gt;                    &lt;a href=&quot;http://whiskyechobravo.com/blogue/drupal-7-code-sprint-montreal&quot; class=&quot;imagecache imagecache-small-nocrop imagecache-linked imagecache-small-nocrop_linked&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://whiskyechobravo.com/sites/whiskyechobravo.com/files/imagecache/small-nocrop/images/92/d7csmtl.jpg&quot; alt=&quot; Sylvain Aubé)&quot; title=&quot; Sylvain Aubé)&quot; class=&quot;imagecache imagecache-small-nocrop&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;        &lt;/p&gt;
&lt;p&gt;La communauté Drupal montréalaise s&#039;est réunie le 19 février pour apporter sa contribution à la tâche monumentale qu&#039;est la publication de la nouvelle mouture de Drupal. Comme vous le savez peut-être, il s&#039;agit d&#039;un effort entièrement collaboratif, puisque que contrairement aux logiciels publiés en entreprise, Drupal est entièrement rédigé par sa communauté, sur une base volontaire.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/249">Communauté</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/609">Évènement</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/610">Informatique libre</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/611">Le laboratoire</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/266">Montréal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/635">Planète Drupalfr</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/637">Sylvain Aubé</category>
 <pubDate>Fri, 05 Mar 2010 17:38:16 +0000</pubDate>
 <dc:creator>Echo Bravo</dc:creator>
 <guid isPermaLink="false">857 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Modifier les emails envoyés depuis votre site.</title>
 <link>http://planete.drupalfr.org/node/856</link>
 <description>&lt;p&gt;Pour compléter mon &lt;a id=&quot;l-l-&quot; title=&quot;précendent billet&quot; href=&quot;http://juliendubreuil.fr/drupal/envoyer-des-emails-depuis-un-module&quot; rel=&quot;nofollow&quot;&gt;précendent billet&lt;/a&gt; voici comment modifier les emails envoyés depuis votre site.&lt;/p&gt;
&lt;p&gt;Pour générer l&amp;#8217;envoi de mail depuis un module nous avons utilisé les fonctions &lt;a id=&quot;j55h&quot; title=&quot;hook_mail($key, &amp;amp;$message, $params)&quot; href=&quot;http://api.drupal.org/api/function/hook_mail/6&quot; rel=&quot;nofollow&quot;&gt;hook_mail()&lt;/a&gt; et &lt;a id=&quot;&quot; title=&quot;drupal_mail()&quot; href=&quot;http://api.drupal.org/api/function/drupal_mail&quot; rel=&quot;nofollow&quot;&gt;drupal_mail()&lt;/a&gt;. Pour la modification nous allons utiliser la fonction &lt;a id=&quot;xlin&quot; title=&quot;hook_mail_alter(&amp;amp;$message)&quot; href=&quot;http://api.drupal.org/api/function/hook_mail_alter/6&quot; rel=&quot;nofollow&quot;&gt;hook_mail_alter(&amp;#38;$message)&lt;/a&gt; afin d&amp;#8217;avoir un accès complet à tous les emails envoyés.&lt;/p&gt;
&lt;p&gt;La variable &lt;strong&gt;$message contient toutes les informations nécessaires à l&amp;#8217;envoi de l&amp;#8217;email&lt;/strong&gt; et à ce stade, l&amp;#8217;email à été formaté et est prêt à l&amp;#8217;envoi. Dans cette variable on retrouve donc les infos headers, le body, le sujet, les paramètres passés lors de la génération de l&amp;#8217;email et surtout l&amp;#8217;identifiant renseigné.&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est grâce à ce dernier que nous allons pouvoir identifier et modifier un email en particulier. &lt;strong&gt;Cette clé est constituée des deux prermiers paramètres fusionnés&lt;/strong&gt; passés à la fonction drupal_mail, soit dans notre cas MyModule et envoi_email.&lt;br /&gt;
Voici un exemple pour ajouter la signature de votre site au bas de notre email.&lt;/p&gt;
&lt;p&gt;function MyOtherModule_mail_alter(&amp;#38;$message) {&lt;br /&gt;
  if ($message[&#039;id&#039;] == &#039;MyModule_envoi_email&#039;) {&lt;br /&gt;
    $message[&#039;body&#039;] .= &quot;--\nMail envoyé depuis &quot; . variable_get(&#039;sitename&#039;, t(&#039;Drupal&#039;));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;$message[&#039;body&#039;] est un tableau, vous pouvez donc lui rajouter autant d&amp;#8217;entrées que vous voulez&lt;/p&gt;
&lt;p&gt;Edit : Suite à mes échanges avec Opi sur mon impossibilité à passer un tableau à la variable $message[&#039;body&#039;] j&amp;#8217;ai cherché ce qu&amp;#8217;il se passait. En fait, entre la déclaration de mon e-mail et la modification de celui-ci, le module htmlmail qui était installé sur mon drupal transformait le tableau en une chaîne de caractères :/&lt;br /&gt;
Si vous subissez le même problème, il suffit de modifier le poids de vos modules pour qu&amp;#8217;ils s&amp;#8217;exécutent dans l&amp;#8217;ordre voulu.&lt;/p&gt;
&lt;p&gt;Articles relatifs : &lt;a id=&quot;ge2e&quot; title=&quot;Envoyer des emails depuis un module&quot; href=&quot;http://juliendubreuil.fr/drupal/envoyer-des-emails-depuis-un-module&quot; rel=&quot;nofollow&quot;&gt;Envoyer des emails depuis un module&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/161">Développement</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/662">hook</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/663">Julien</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/725">Mail</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/170">module</category>
 <pubDate>Mon, 01 Mar 2010 12:40:59 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">856 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Représenter Drupal à la solution linux du 16 au 18 mars</title>
 <link>http://planete.drupalfr.org/node/853</link>
 <description>&lt;p&gt;Start:&amp;nbsp;&lt;br /&gt;
                    2010-03-16 09:00 - 2010-03-18 18:00 UTC        &lt;/p&gt;
&lt;p&gt;      Organizers:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;                    &lt;a href=&quot;http://groups.drupal.org/user/15442&quot; title=&quot;Voir le profil utilisateur.&quot; rel=&quot;nofollow&quot;&gt;JBI&lt;/a&gt;        &lt;/p&gt;
&lt;p&gt;                    &lt;a href=&quot;http://groups.drupal.org/user/37757&quot; title=&quot;Voir le profil utilisateur.&quot; rel=&quot;nofollow&quot;&gt;cravalec&lt;/a&gt;        &lt;/p&gt;
&lt;p&gt;                    User group meeting        &lt;/p&gt;
&lt;p&gt;Bonjour,&lt;/p&gt;
&lt;p&gt;Voulez vous présenter Drupal au salon solutions Linux ? 12 000 visiteurs en 2009 encore plus attendu en 2010...&lt;/p&gt;
&lt;p&gt;Si vous voulez être présent sur le stand ou simplement recevoir une invitation merci de compléter le formulaire en ligne.  &lt;a href=&quot;https://spreadsheets.google.com/viewform?formkey=dHVrbVlIWkNMbXVKMkJ4VmdZMzVLR2c6MA&quot; title=&quot;https://spreadsheets.google.com/viewform?formkey=dHVrbVlIWkNMbXVKMkJ4VmdZMzVLR2c6MA&quot; rel=&quot;nofollow&quot;&gt;https://spreadsheets.google.com/viewform?formkey=dHVrbVlIWkNMbXVKMkJ4Vmd...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si vous voulez nous donner un exemple de vos dernière réalisation Drupal : merci de m’envoyer un mail ingold . jb (a) gmail . com&lt;/p&gt;
&lt;p&gt;Bien cordialement. &lt;/p&gt;
&lt;p&gt;Jean-Baptiste Ingold&lt;br /&gt;
06 24 78 29 22&lt;/p&gt;
&lt;p&gt;PS Si vous êtes présents signalez nous en commentaire. &lt;/p&gt;
&lt;p&gt;Quelques chiffres sur le salon &lt;a href=&quot;http://www.solutionslinux.fr&quot; title=&quot;http://www.solutionslinux.fr&quot; rel=&quot;nofollow&quot;&gt;http://www.solutionslinux.fr&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;
• 150 000 invitations&lt;/p&gt;
&lt;p&gt;• 40 000 programmes de conférences&lt;/p&gt;
&lt;p&gt;• 420 000 e-mailings&lt;/p&gt;
&lt;p&gt;• une Campagne SMS&lt;/p&gt;
&lt;p&gt;• 12 000 Direct-badges aux pré-enregistrés 2009&lt;/p&gt;
&lt;p&gt;• + de 7 000 badges VIP envoyés aux décideurs grands comptes&lt;/p&gt;
&lt;p&gt;• suivi des visiteurs pré-enregistrés à J-15, J-8, J-2 et le jour J&lt;/p&gt;
&lt;p&gt;• une large couverture médiatique grâce à des partenariats forts : avec les fédérations, les associations professionnelles et les médias.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.drupal.org/france&quot; rel=&quot;nofollow&quot;&gt;France&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/207">jbi</category>
 <pubDate>Fri, 26 Feb 2010 14:04:17 +0000</pubDate>
 <dc:creator>Drupal Groupe France</dc:creator>
 <guid isPermaLink="false">853 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Koumbit implique la communauté Drupal pour le premier code sprint Drupal 7 de Montréal</title>
 <link>http://planete.drupalfr.org/node/852</link>
 <description>&lt;p&gt;C&#039;est dans une ambiance conviviale, agrémentée de snacks, de rafraîchissements, de bières et de pizzas gratuits que Koumbit a reçu, vendredi dernier, les volontaires du premier Code Sprint Drupal 7 de Montréal. En tout, une dizaine de travailleurs payés par Koumbit et près d&#039;une vingtaine d&#039;invités, des particuliers et des représentants d&#039;autres compagnies montréalaises, ont joint leurs efforts pour faire avancer le développement, la traduction et la documentation de la prochaine version de Drupal. Nous espérons que le succès de cette expérience encouragera d&#039;autres firmes à réaménager leur espace de travail, le temps d&#039;une journée, pour accommoder de nouveaux volontaires lors des prochains sprints, qu&#039;ils aient lieu à Montréal ou ailleurs dans le monde.&lt;/p&gt;
&lt;p&gt;Les événements Drupal locaux sont toujours une plaisante opportunité de rencontrer d&#039;autres membres de la communauté et d&#039;échanger autour d&#039;intérêts communs. Les « code sprints » sont particulièrement enrichissants car ils permettent aux participants de mettre leur tête dans le code et d&#039;apporter des améliorations concrètes. Ces sprints sont aussi une occasion inestimable de diffuser un savoir-faire qui favorise une meilleure appropriation de Drupal, des outils et des pratiques qui supportent le projet. Cette collaboration entre compétiteurs fortifie autant ses contributeurs que le produit qu&#039;elle cultive. Elle rend chacun mieux apte à s&#039;impliquer.&lt;/p&gt;
&lt;p&gt;Le coup de départ de cette journée, donné par Angie Byron (alias &lt;a href=&quot;http://www.webchick.net/&quot; rel=&quot;nofollow&quot;&gt;webchick&lt;/a&gt;) en matinée, a amené l&#039;ensemble des volontaires à se diviser en groupes ciblés selon leurs centres d&#039;intérêts : résolution de &lt;a href=&quot;http://drupal.org/project/issues/search/drupal?text=&amp;amp;assigned=&amp;amp;submitted=&amp;amp;participant=&amp;amp;status[]=Open&amp;amp;version[]=7.x&amp;amp;issue_tags_op=or&amp;amp;issue_tags=&quot; rel=&quot;nofollow&quot;&gt;problèmes&lt;/a&gt; du noyau Drupal 7, ajustements du côté client, documentation des &lt;a href=&quot;http://drupal.org/update/modules/6/7&quot; rel=&quot;nofollow&quot;&gt;changements&lt;/a&gt; aux APIs, &lt;a href=&quot;http://localize.drupal.org/&quot; rel=&quot;nofollow&quot;&gt;traduction&lt;/a&gt; vers le français et appropriation des &lt;a href=&quot;http://drupal.org/project/simpletest&quot; rel=&quot;nofollow&quot;&gt;outils&lt;/a&gt; de tests unitaires. Au fil de la journée, plusieurs d&#039;entre eux ont varié leurs défis; certains ont révisé de nouveaux thèmes proposés pour Drupal 7 et d&#039;autres se sont penchés sur le processus de mise à jour de Drupal 6 vers Drupal 7. En tout, près d&#039;une trentaine de problèmes abordés ont été notés par notre équipe. Plusieurs d&#039;entre eux peuvent être retracés sur drupal.org grâce à l&#039;étiquette &lt;a href=&quot;http://drupal.org/project/issues/search/drupal?text=&amp;amp;assigned=&amp;amp;submitted=&amp;amp;participant=&amp;amp;status[]=Open&amp;amp;status[]=1&amp;amp;status[]=13&amp;amp;status[]=8&amp;amp;status[]=14&amp;amp;status[]=15&amp;amp;status[]=2&amp;amp;status[]=4&amp;amp;status[]=16&amp;amp;status[]=3&amp;amp;status[]=5&amp;amp;status[]=6&amp;amp;status[]=7&amp;amp;issue_tags_op=or&amp;amp;issue_tags=%23D7csmtl%2CD7csmtl&quot; rel=&quot;nofollow&quot;&gt;#d7csmtl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Au-delà du résultat concret obtenu au terme de cette journée, nous espérons que cet effort aura su motiver de nouveaux contributeurs à s&#039;impliquer dans le développement de Drupal 7. Nous pensons que de tels événements aident à consolider la communauté Drupal montréalaise et à maintenir son effervescence. Koumbit est fier d&#039;avoir provoqué le mouvement. Ce n&#039;est donc pas sans un soupçon de défi que nous souhaitons que le succès de ce code sprint saura en inspirer d&#039;autres à répéter l&#039;expérience.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/616">Koumbit</category>
 <pubDate>Fri, 26 Feb 2010 02:37:03 +0000</pubDate>
 <dc:creator>Koumbit</dc:creator>
 <guid isPermaLink="false">852 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Premiers clics sous OpenAtrium 1-BETA4</title>
 <link>http://planete.drupalfr.org/node/854</link>
 <description>&lt;p&gt;&lt;img src=&quot;http://blog.fclement.info/system/files/images/sticker_atrium2_159x300.png&quot; alt=&quot;openatrium&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;Introduction&quot;&gt;1. Introduction&lt;/h2&gt;
&lt;/p&gt;
&lt;p&gt;Development Seed vient de passer sa plateforme collaborative basée sur Drupal 6 à la version 1.0-BETA4. Des chiffres, des lettres, une beta de plus... Oui, mais pas n’importe quelle beta !&lt;/p&gt;
&lt;p&gt;Outre la modification du thème avec ré-agencement des boutons, fil d’ariane, logo, diminution de la taille du header et bien d’autres permettant une visibilité accrue, la principale attente de cette nouvelle béta-mouture se trouve dans l’utilisation des versions 3.x des modules spaces et context, 2.x pour le module Admin et la suppression de FeedsAPI par Feeds.&lt;/p&gt;
&lt;p&gt;Nous allons faire un premier état des lieux en explorant le potentiel des nouvelles fonctionnalités ainsi que l’ergonomie de l&#039;interface disponibles juste après une installation basique (utilisation des modules activés par défaut uniquement).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.fclement.info/content/premiers-clics-sous-openatrium-1-beta4&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;en lire plus&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/698">GoZ</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/645">openatrium</category>
 <pubDate>Mon, 22 Feb 2010 13:35:36 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">854 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Installer OpenAtrium sous MAMP</title>
 <link>http://planete.drupalfr.org/node/847</link>
 <description>&lt;h2 id=&quot;Introduction&quot;&gt;1. Introduction&lt;/h2&gt;
&lt;p&gt;Avec la sortie de OpenAtrium 1.0-beta4, j&#039;ai bien entendu voulu le tester et ainsi pouvoir voir les améliorations apportées par rapport à la version précédente.&lt;/p&gt;
&lt;p&gt;Travaillant depuis peu sous Mac, j&#039;ai installé MAMP pour pouvoir faire mes tests rapidement en local (peut-être n&#039;est-ce pas la meilleure solution pour développer sous mac, je reste ouvert à toute proposition).&lt;/p&gt;
&lt;p&gt;Premier tour de roue, installation de drush et drush_make pour pouvoir suivre les étapes de l&#039;installation fournies par Development Seed : &lt;a href=&quot;http://openatrium.com/node/35&quot; title=&quot;http://openatrium.com/node/35&quot; rel=&quot;nofollow&quot;&gt;http://openatrium.com/node/35&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.fclement.info/content/installer-openatrium-sous-mamp&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;en lire plus&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/698">GoZ</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/716">Mac</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/645">openatrium</category>
 <pubDate>Sun, 21 Feb 2010 11:26:05 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">847 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Drupal.org ni Bazaar ni Subversif, mais sûrement GIT</title>
 <link>http://planete.drupalfr.org/node/846</link>
 <description>&lt;p&gt;
  Ceci étant dit, rien n&#039;est encore fait, mais il semblerait que nous en prenions &lt;a class=&quot;external&quot; target=&quot;_blank&quot; href=&quot;http://groups.drupal.org/node/48818?page=2#comment-133893&quot; rel=&quot;nofollow&quot;&gt;clairement le chemin&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
  Pour une part, il est clair que CVS peut être considéré à juste titre comme un gestionnaire de version pour le peu archaïque. Et il ne faut pas s&#039;en étonner, ce système a tout de même plus de 20 ans !
&lt;/p&gt;
&lt;p&gt;
  Pour revenir à nos moutons, nous étions beaucoup à nous demander quand drupal.org se déciderait à basculer le dépôt des modules contribution (et du core) sur quelque chose de plus moderne, comme au hasard, subversion. Manque de bol, la grande mode des gestionnaires de version distribués est passée par là, et subversion nous est passé sous le nez au profit de &lt;a target=&quot;_blank&quot; href=&quot;http://fr.wikipedia.org/wiki/GIT&quot; rel=&quot;nofollow&quot;&gt;GIT&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
  Alors qu&#039;est-ce qu&#039;un gestionnaire de version décentralisé ? Disons pour faire (très) simple que la grosse différence avec un centralisé est que sur votre machine, vous ne disposez plus d&#039;une copie de travail, mais d&#039;un dépôt local complet et opérationnel qui sait communiquer son état à des dépôts distants. Cela commence par récupérer d&#039;un dépôt distant (pull), pour y travailler comme d&#039;habitude (commit, update, etc.) et éventuellement, si vous avez les droits, remonter vos modifications sur un dépôt distant (push) qui peut être le même que celui du pull, ou un autre...
&lt;/p&gt;
&lt;p&gt;
  La gestion décentralisée de version permet donc à chacun, y compris de petites équipes, de travailler sur les sources d&#039;un projet tout en laissant à d&#039;autre le choix d&#039;intégrer ou pas les modifications au sein du projet central. C&#039;est en quelque sorte la notion de fork généralisé. Ce concept est très intéressant pour permettre à toute une communauté de s&#039;exprimer sur des projets d&#039;envergure comme le noyau Linux, ou dans une moindre mesure, Drupal Core. C&#039;est d&#039;ailleurs Torvald, &lt;a class=&quot;external&quot; target=&quot;_blank&quot; href=&quot;http://www.theregister.co.uk/2005/04/14/torvalds_attacks_tridgell/&quot; rel=&quot;nofollow&quot;&gt;après une saga autour du gestionnaire de version propriétaire BitKeeper&lt;/a&gt;,  qui a écrit les premières moutures de &lt;a target=&quot;_blank&quot; href=&quot;http://fr.wikipedia.org/wiki/GIT&quot; rel=&quot;nofollow&quot;&gt;GIT&lt;/a&gt;. Mais malgré ce que peut dire Torvald, les centralisés ne sont pas pour autant mort, et continuent à répondre à 99.9% des besoins d&#039;équipe de 1 à 10 personnes bossant sur de plus modestes projets. Et le revamping de CVS, subversion, rentre parfaitement dans ce cadre.
&lt;/p&gt;
&lt;p&gt;
   Entendons nous bien, je n&#039;ai absolument rien contre ce type de gestionnaire, et encore moins contre GIT que j&#039;envisage d&#039;adopter pour mes propres projets.  Mais autant je peux comprendre ce choix dans le cas du core de Drupal, autant pour la myriade de modules contribs, maintenus à grand peine par de petits développeurs dans leur coin (dont je fais parti) qui n&#039;ont pas que cela à foutre de jongler d&#039;un gestionnaire à l&#039;autre. Et si l&#039;on met ceci en perspective du fait que l&#039;adoption massive de Subversion en entreprise est enfin concrétisée, GIT un choix que je trouve un peu... lourd.
&lt;/p&gt;
&lt;p&gt;
  D&#039;autant plus lourd que ce produit, comme son concept de base, est très jeune. Cela veut dire apprendre un nouveau mode de fonctionnement pour ceux qui ont déjà eu du mal à passer à SVN, mais cela implique aussi une maturité plus faible sur des plate-formes comme eclipse  (qui est aussi la base de Zend Studio). Alors que Subversive arrive enfin à des performances et une stabilité potables, voilà que l&#039;on se retrouve avec EGit, un plugin qui n&#039;en finit pas d&#039;incuber, aux fonctionnalités pour le moins anémiques (pas de vue &quot;dépôt&quot; par exemple), et à la stabilité &quot;hasardeuse&quot; (régulièrement, un menu &quot;team&quot; déserté de toute fonction, le dossier .git visible dans l&#039;arbo, etc). Alors on peut tout gérer en ligne de commande hein, c&#039;est pas moi que ça va gêner, ou alors utiliser un &quot;machin&quot; comme tortoise, mais cela continue de me laisser dans l&#039;idée que ce choix est un tantinet &quot;geek&quot;.
&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/436">Articles</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/215">drupalfr.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/484">planetlibre.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/483">Yoran</category>
 <pubDate>Mon, 15 Feb 2010 19:12:13 +0000</pubDate>
 <dc:creator>arNuméral</dc:creator>
 <guid isPermaLink="false">846 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Le (délicat) problème des images dans Drupal</title>
 <link>http://planete.drupalfr.org/node/844</link>
 <description>&lt;p&gt;Vous avez sans doute déjà été confronté, dans votre découverte de Drupal, à une question aussi bête que « comment puis-je mettre des images dans mon site ». Cette question en recouvre plusieurs : comment insérer une image dans un texte, comment organiser les images chargées, comment réaliser un album … ? Toutes questions qui, dans Drupal, n’ont aucune réponse simple, au risque d’impatienter les débutants.&lt;/p&gt;
&lt;h3&gt;
&lt;/h3&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/242">images</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/624">Marie-Hélène Wronecki</category>
 <pubDate>Mon, 15 Feb 2010 10:41:13 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">844 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Drupal 7 : avis et retour d&#039;expérience</title>
 <link>http://planete.drupalfr.org/node/842</link>
 <description>&lt;p&gt;Drupal 7 est toujours en cours de développement (ou plutôt en cours  de finition), néanmoins une version alpha à été publiée : l&#039;occasion  idéale de faire joujou avec la prochaine mouture de &lt;a href=&quot;http://narno.com/tag/drupal&quot; rel=&quot;nofollow&quot;&gt;Drupal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je pense  que nombreux sont ceux qui attendent cette nouvelle version, très  prometteuse, tout particulièrement en terme d&#039;ergonomie et d&#039;&lt;a href=&quot;http://www.d7ux.org&quot; rel=&quot;nofollow&quot;&gt;interface   utilisateur&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A défaut de rédiger un billet critique  basée sur mes essais de la version alpha (je manque de courage et de temps),  j&#039;ai compilé quelques articles et billets traitant du sujet :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://arnumeral.fr/articles/drupal/drupal-7-les-nouveautes&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;Drupal   7, les nouveautés&lt;/em&gt;&lt;/a&gt; : Yoran, par anticipation (juin 2009)  annonçait les nouveautés que nous réservait la version 7 de Drupal, avec  quelques hypothétiques qui ont on trouvées réponse depuis. Billet  plutôt complet pour l&#039;époque et critique.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://juliendubois.fr/drupal_blog/drupal-7-quoi-de-neuf-a-lhorizon/&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;Drupal    7, quoi de neuf à l’horizon ?&lt;/em&gt;&lt;/a&gt; : billet de Julien Dubois (très à l&#039;aise avec le CMS)   décrivant les nouveautés de Drupal 7.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.linalis.com/actualites/articles-presse/-laube-drupal-7&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;À   l&#039;aube de Drupal 7&lt;/em&gt;&lt;/a&gt; : billet un peu austère (blog  d&#039;entreprise)  mais qui remet bien en contexte les choix fonctionnels et  techniques à  l&#039;origine de la version 7 de Drupal.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupalistic.net/billet/jai-rapidement-teste-pour-vous-drupal-7&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;J&#039;ai   (rapidement) testé pour vous...  Drupal 7&lt;/em&gt;&lt;/a&gt; : retour  d&#039;expérience à chaud de Marie-Hélène, juste après la sortie de la  version  alpha 1. Point de vue intéressant, partagé par la plupart de testeur  de cette version alpha (dont moi). Lire les commentaires.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bertrandkeller.info/2009/07/16/763-drupal-7-et-laccessibilite/&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;Drupal     7 et l’accessibilité&lt;/em&gt;&lt;/a&gt; : l&#039;accessibiliét étant l&#039;un des objectifs de D7, il aurait été dommage de ne pas en parler !&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.admin-linux.org/cms-blog/howto-install-drupal-7&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;Howto   install Drupal 7&lt;/em&gt;&lt;/a&gt; : comment installer la beta 1 en ligne de  commande (en français, malgré le titre anglophone).&lt;a href=&quot;http://juliendubois.fr/drupal_blog/drupal-7-quoi-de-neuf-a-lhorizon/&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&#039;espère qu&#039;après avoir lu ces différents billets vous  aurez envie d&#039;essayer la dernière version de Dupal ! :-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Liens pratiques :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/drupal&quot; rel=&quot;nofollow&quot;&gt;Télécharger Drupal&lt;/a&gt; (liste  des versions)&lt;/li&gt;
&lt;li&gt;Participer à la &lt;a href=&quot;http://localize.drupal.org/translate/languages/fr/view?project=drupal&amp;amp;status=0&amp;amp;release=17706&amp;amp;search=&amp;amp;author=&amp;amp;context=all&amp;amp;limit=10&quot; rel=&quot;nofollow&quot;&gt;traduction   de Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/160">Narno</category>
 <pubDate>Wed, 10 Feb 2010 22:21:37 +0000</pubDate>
 <dc:creator>Narno</dc:creator>
 <guid isPermaLink="false">842 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Mon guide Drupal (5) : régler les droits d’accès et finaliser un site Drupal</title>
 <link>http://planete.drupalfr.org/node/837</link>
 <description>&lt;p&gt;À partir de mes différentes lectures et expériences, je vous propose dans cet article un tutoriel synthétique pour comprendre comment bien régler les droits dans Drupal et ne rien oublier d&amp;#8217;important avant la mise en production finale. Cet article est le 5ème d’une série consacrée aux différentes étapes de la mise en oeuvre d’un site [...]&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/486">Stéphane Vial</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/487">Techniques et tutoriels</category>
 <pubDate>Mon, 01 Feb 2010 10:00:26 +0000</pubDate>
 <dc:creator>Lektum.info</dc:creator>
 <guid isPermaLink="false">837 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>DrupalForFirebug - Debugger Drupal avec Firebug</title>
 <link>http://planete.drupalfr.org/node/855</link>
 <description>&lt;h2 id=&quot;Presentation_de_DrupalForFirebug&quot;&gt;1. Présentation de DrupalForFirebug&lt;/h2&gt;
&lt;p&gt;Lors du développement de sites sous Drupal, il est souvent nécessaires à un moment donné d&#039;obtenir des informations sur des variables maisons ou gérées par Drupal. A titre indicatif, les plus courantes sont $node ou $form.&lt;/p&gt;
&lt;p&gt;DrupalForFirebug permet donc d&#039;afficher dans Firebug le contenu de variables par l&#039;intermédiaire d&#039;une méthode firep() et donne en tout temps le contenu des variables courantes drupal : $form, $node, $view, requêtes sql.&lt;/p&gt;
&lt;p&gt;Nous allons voir dans un premier temps comment installer le module puis les fonctionnalités disponibles.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.fclement.info/content/drupalforfirebug-debugger-drupal-avec-firebug&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;en lire plus&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/698">GoZ</category>
 <pubDate>Sat, 23 Jan 2010 11:53:25 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">855 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>J&#039;ai (rapidement) testé pour vous... Drupal 7</title>
 <link>http://planete.drupalfr.org/node/829</link>
 <description>&lt;p&gt;Voilà ! comme prévu depuis plusieurs jours, la première version &quot;alpha&quot; de Drupal 7 est sortie tout à l&#039;heure. Difficile de faire un compte-rendu qui n&#039;ait pas l&#039;air d&#039;un &quot;catalogue de ce qui a changé&quot;, mais je vais essayer de vous faire une petite synthèse de ce que j&#039;ai vu. Naturellement chacun retient les points qui correspondent à ses besoins et attentes donc ce que j&#039;ai apprécié peut vous paraître un détail et vous pouvez vous être focalisé sur autre chose (car le mieux pour vous faire votre idée est &lt;a href=&quot;http://drupal.org/project/drupal&quot; rel=&quot;nofollow&quot;&gt;de le télécharger vous-même&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/451">drupal 7</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/624">Marie-Hélène Wronecki</category>
 <pubDate>Fri, 15 Jan 2010 19:11:32 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">829 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Enfin!</title>
 <link>http://planete.drupalfr.org/node/819</link>
 <description>&lt;p&gt;Environ 23 mois après la sortie de &lt;a href=&quot;http://drupal.org/drupal-6.0&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;Drupal 6&lt;/a&gt;, 13 mois après la sortie de &lt;a href=&quot;http://drupal.org/node/322829&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;Views 2.0&lt;/a&gt; et &lt;a href=&quot;http://drupal.org/node/330573&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;CCK 2.0&lt;/a&gt; et environ &lt;a href=&quot;http://drupal.org/node/376454&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;10 mois après Drupal.org&lt;/a&gt;, nous avons le plaisir de vous annoncer que Drupalfr.org tourne maintenant sous Drupal 6 !&lt;/p&gt;
&lt;p&gt;Cette mise à jour, longuement attendue (et constamment reportée), a été effectuée il y a environ une heure, sans encombres (ou presque). Le site est pour l&#039;instant quasiment identique au précedent, à l&#039;exception de quelques améliorations que vous découvrirez au fil de votre navigation, et probablement de nouveaux bugs que je vous invite à nous signaler en commentaire de ce billet.&lt;/p&gt;
&lt;p&gt;Cette base enfin mise à jour va surtout nous permettre de conduire, au fil des prochains mois, d&#039;importantes modifications et améliorations. &lt;strong&gt;Pour cela, nous avons besoin de vous.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Plusieurs &lt;a href=&quot;http://drupalfr.org/node/6123&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;idées de modifications ont été proposées&lt;/a&gt;. Elles doivent murir dans cette page de wiki, et être priorisées. Une fois un accord trouvé, nous avons besoins de volontaires pour implémenter ces modifications. L&#039;avantage, c&#039;est que nous pouvons maintenant utiliser ces choses modernes (&lt;a href=&quot;http://drupal.org/project/imagecache&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;ImageCache&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/features&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;Features&lt;/a&gt;, etc.) afin de nous simplifier la vie. En outre, nous avons maintenant un thème de base propre basé sur &lt;a href=&quot;http://drupal.org/project/ninesixty&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;Ninesixty&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Avis aux volontaires !&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/399">Annonce</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/248">Damien Tournoud</category>
 <pubDate>Mon, 11 Jan 2010 00:43:56 +0000</pubDate>
 <dc:creator>drupalfr.org</dc:creator>
 <guid isPermaLink="false">819 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Créer des templates (fichier.tpl.php) pour themer vos modules</title>
 <link>http://planete.drupalfr.org/node/804</link>
 <description>&lt;p&gt;Lors de la création de vos modules vous pouvez être amenés à mettre en forme votre contenu pour garder une approche cohérence avec la dissociation fond / forme. Il est donc nécessaire de donner la possibilité au themer de pouvoir modifier la mise en forme du contenu que vous aller afficher.&lt;br /&gt;
Afin de rendre une telle action possible, vous allez devoir déclarer au sein de votre module un hook_theme, qui va déclarer les éléments qui pourront être themés via vos templates.&lt;br /&gt;
Le &lt;strong&gt;hook_theme&lt;/strong&gt; est simplement constitué d&amp;#8217;un tableau d&amp;#8217;éléments skinnables avec pour chaque entrée une clé &amp;laquo;&amp;nbsp;template&amp;raquo;&amp;nbsp; qui correspond au nom du fichier .tpl.php utilisé pour le theme et une clé &amp;laquo;&amp;nbsp;arguments&amp;raquo;&amp;nbsp; correspondant à un tableau de paramètres à passer à la fonction de theme().&lt;/p&gt;
&lt;p&gt;function hook_theme&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
  return array&amp;#40;&lt;br /&gt;
    &#039;my_themeable_call&#039; =&amp;#62; array&amp;#40;&lt;br /&gt;
      &#039;template&#039; =&amp;#62; &#039;gabarit.tpl.php&#039;,&lt;br /&gt;
      &#039;arguments&#039; =&amp;#62; array&amp;#40;&amp;#34;param1&amp;#34; =&amp;#62; NULL&amp;#41;,&lt;br /&gt;
    &amp;#41;,&lt;br /&gt;
  &amp;#41;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A noter :&lt;/strong&gt; Le &amp;laquo;&amp;nbsp;.tpl.php&amp;raquo;&amp;nbsp; est facultatif car toujours suggéré par le moteur de template et il est recommandé d&amp;#8217;utiliser le même nom comme clé et comme nom de fichier pour le template. (Les noms sont ici différents pour vous permettre de décortiquer la mécanique). &lt;em&gt;[Merci Cyril pour la remarque]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Voilà votre fonction de thème déclarée, il ne reste plus qu&amp;#8217;à l&amp;#8217;utiliser.&lt;br /&gt;
Prenons l&amp;#8217;exemple d&amp;#8217;un bloc, vous souhaitez utiliser votre fonction de thème dans son contenu, il vous suffit d&amp;#8217;utiliser dans le contenu du bloc (cf &lt;a title=&quot;Document drupal 6 hook block&quot; href=&quot;http://api.drupal.org/api/function/hook_block/6&quot; rel=&quot;nofollow&quot;&gt;hook_block&lt;/a&gt;) votre fonction de theme : &lt;strong&gt;$bloc[&#039;content&#039;] = theme(&amp;#8217;my_themeable_call&amp;#8217;, $param1);&lt;/strong&gt;&lt;br /&gt;
De cette façon vous enverrez à votre fichier de template la variable &lt;strong&gt;$param1&lt;/strong&gt; (pouvant contenir tout type de données). Si vous omettez de passer un argument, la valeur par défaut déclarée dans le &lt;strong&gt;hook_theme&lt;/strong&gt; sera utilisée (dans notre exemple si j&amp;#8217;omets &lt;strong&gt;$param1&lt;/strong&gt;, sa valeur sera &lt;em&gt;NULL&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Plaçons-nous maintenant dans notre fichier de template &lt;strong&gt;gabarit.tpl.php,&lt;/strong&gt; c&amp;#8217;est le fichier que votre themer pourra surcharger en le copiant collant dans le dossier de son thème.&lt;br /&gt;
Les variables à disposition sont celles que vous avez passé en paramètres lors de l&amp;#8217;appel de la fonction de thème (ici &lt;strong&gt;$param1&lt;/strong&gt;) et les éventuelles variables ajoutées par les fonctions de &lt;em&gt;preprocess&lt;/em&gt;. (La signature de la fonction est &lt;strong&gt;template_preprocess_my_themeable_call&lt;/strong&gt;, surchargeable par &lt;strong&gt;THEME_preprocess_my_themeable_call&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;De cette façon vous pouvez donc créer vos propres fichiers de theming lors de la publication de vos modules afin de vous faire adorer par les themers !&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-67&quot; title=&quot;tag&quot; src=&quot;http://juliendubois.fr/drupal_blog/wp-content/uploads/2010/01/tag.jpg&quot; alt=&quot;tag&quot; width=&quot;600&quot; height=&quot;188&quot; /&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/161">Développement</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/662">hook</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/652">Julien Dubois</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/170">module</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/282">thème</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/665">theming</category>
 <pubDate>Mon, 04 Jan 2010 09:10:56 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">804 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Créer des handlers de menu</title>
 <link>http://planete.drupalfr.org/node/799</link>
 <description>&lt;p&gt;
  Tout drupalien sait ce qu&#039;est un &quot;élément de menu&quot; : un machin qui se colle dans un... menu, et qui apparaît quelque part sur l&#039;interface graphique pour permettre l&#039;affichage d&#039;une page. Ces éléments de menu sont généralement crées à la mano en passant par le backoffice, via la section Construction du site puis Menus. Là on peut ajouter des associations entre un &lt;strong&gt;chemin valide&lt;/strong&gt; et un &lt;strong&gt;titre de lien&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
   Ce &quot;chemin valide&quot; est systématiquement fournit par l&#039;un des modules activé (ex. user/login issu modules/user). Mais alors comment créer ses propres chemins liés à ses propres pages ou actions, sans passer par d&#039;inutile (pour cela) usines à gaz comme Panel ou Views ?
&lt;/p&gt;
&lt;p&gt;
Le but de ce tutoriel est de démystifier ce passage obligé de la vie d&#039;un module.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_1&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Les sources&lt;/h2&gt;
&lt;p&gt;
  L&#039;ensemble des sources de ce tutoriel est disponible &lt;a class=&quot;external&quot; target=&quot;_blank&quot; href=&quot;http://www.arnumeral.fr/subversion/public/tutoriels_drupal/tutoriel_menus&quot; rel=&quot;nofollow&quot;&gt;ici&lt;/a&gt;. Il s&#039;agit d&#039;un serveur Subversion, donc vous pouvez aussi directement récupérer les sources dans votre dossier site/all/modules par la commande suivante :&lt;/p&gt;
&lt;p&gt;    gaston$cd /var/www/drupal/site/all/modulesgaston$mkdir tutorielsgaston$cd tutorielsgaston$svn co http://www.arnumeral.fr/subversion/public/tutoriels_drupal/tutoriel_menus...gaston$&amp;nbsp;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_2&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Cycle de vie d&#039;un requete&lt;/h2&gt;
&lt;p&gt;
   Lorsqu&#039;apache reçoit une requête, par exemple http://mon_site/mon-super-article, il commence par ré-écrire la partie &quot;chemin&quot; de l&#039;URL de sorte à la rendre assimilable par Drupal. C&#039;est le fameux système d&#039;URL simplifiées (clean UEL). L&#039;URL devient alors http://mon_site/index.php?q=mon-super-article, index.php étant le point d&#039;entrée de Drupal.
&lt;/p&gt;
&lt;p&gt;
   La partie ?q=mon-super-article est donc une variable $_GET[&#039;q&#039;] que va recevoir drupal pour effectuer une action. La première étape pour résoudre ce chemin, est de déterminer si le contenu de $_GET[&#039;q&#039;] ne serait pas hasard pas un alias en cherchant une correspondance dans la table url_alias. L&#039;exemple est bien choisi, il en trouvera un qui sera node/666. mon-super-article est donc le chemin, et node/666 le chemin dit &quot;interne&quot;, celui que va réellement prendre en charge un module.
&lt;/p&gt;
&lt;p&gt;
  Et c&#039;est effectivement la seconde étape de Drupal, trouver quel module est en charge du chemin interne node/666. Plus exactement, et attention il va y avoir risque de confusion de vocabulaire, Drupal va chercher quel &quot;menu&quot; est associé à ce chemin. Pour ne pas entretenir la confusion trop longtemps, un &quot;menu&quot; pour les modules, est une association entre un chemin interne (ici node/666), et un module (ici, le module modules/node). Pour simplifier le discours, j&#039;appellerais cela un menu handler pour le différencier des éléments de menu qui eux, associent un lien à un chemin interne.
&lt;/p&gt;
&lt;p&gt;
   Si aucun handler n&#039;est trouvé, Drupal renvoie le fameux 404 fichier non trouve. Si le handler existe bien mais que l&#039;utilisateur qui cherche à le déclencher n&#039;a pas les droits pour cela, il renverra un 401 Access denied. Enfin si le handler existe et que l&#039;utilisateur a les droits, Drupal va transférer le traitement à une des fonctions du module qui a déclaré ce handler.
&lt;/p&gt;
&lt;p&gt;
  Cette fonction, appelée callback a plusieurs possibilités. Si le chemin interne correspond à une page (c&#039;est le cas de node/666), la fonction callback va renvoyer, par son return, une chaîne de caractère qui correspondra au coeur de page (région content). Drupal va alors récupérer cette chaîne, la faire passer dans le thème, et ainsi produire la page correspondant au chemin interne. C&#039;est ainsi que l&#039;article http://mon_site/mon-super-article sera affiché.
&lt;/p&gt;
&lt;p&gt;
  Autre cas de figure, le chemin interne n&#039;est pas une page, mais une action comme par exemple node/666/delete (suppression d&#039;un article). Dans ce cas, la fonction callback n&#039;a aucune raison de renvoyer une chaîne de caractère. Elle va simplement supprimer l&#039;article, et terminer, sans return par un drupal_goto pour rediriger une un chemin interne d&#039;atterrissage.
&lt;/p&gt;
&lt;p&gt;
  Enfin, dernier cas un peu moins usité, le chemin interne doit renvoyer des données, par exemple du code XML pour une procédure AJAX. Dans ce cas le code sera imprimé (print ou echo) directement dans la fonction de callback, qui se terminera par un très brutal exit();, coupant ainsi la chique à Drupal.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_3&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Implémentation de hook_menu&lt;/h2&gt;
&lt;p&gt;
   Maintenant que le sujet est un peu dégrossi, voyons comment faire déclarer un handler par un module. Pour commencer, il nous faut un construire un module de base (&lt;a target=&quot;_blank&quot; href=&quot;http://arnumeral.fr/tutoriels/drupal/le-premier-module&quot; rel=&quot;nofollow&quot;&gt;voir ce tutoriel&lt;/a&gt;) dans lequel nous allons implémenter un &lt;a class=&quot;external&quot; target=&quot;_blank&quot; href=&quot;http://api.drupal.org/api/function/hook_menu&quot; rel=&quot;nofollow&quot;&gt;hook_menu&lt;/a&gt;. Ce hook permet à Drupal de récupérer l&#039;ensemble des handlers de menu publiés par un module donné et son implémentation ressemble à ceci :&lt;/p&gt;
&lt;p&gt;    function tutoriel_menus_menu&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; $items = array &amp;#40;&amp;#41;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; $items&amp;#91;&#039;tutoriels/menus/simple&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;title&#039; =&amp;gt; &#039;Un menu simple&#039;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;description&#039; =&amp;gt; &amp;quot;Ceci est un menu simple&amp;quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_simple_menu_callback&#039;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;#41;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; return $items;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    implémentation d&amp;#039;un hook_menu&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
   Chaque handler déclaré par le hook_menu est une entrée pour un tableau qui sera renvoyé en retour de la fonction. La clef utilisée par ce tableau est le chemin interne pris en charge par le handler, et sa valeur, une structure le décrivant. Dans cette structure nous avons des éléments simples à comprendre comme title ou description qui permettrons à Drupal de créer un élément de menu à partir de ce handler. Notez que ces deux chaînes ne doivent pas utiliser la fonction de traduction t(...).
&lt;/p&gt;
&lt;h3&gt;Déclaration de la callback&lt;/h3&gt;
&lt;p&gt;
   page callback est l&#039;élément fondamental de ce handler. Il s&#039;agit de la fonction qui va être appelée par Drupal pour effectuer l&#039;action associée au chemin interne. Le paramètre file définit quant à lui dans quel fichier PHP cette fonction se trouve. Cette astuce a permis à Drupal 6 d&#039;améliorer grandement ses performances par rapport à Drupal 5. En effet, file permet de ne charger que les fichiers PHP utiles au traitement d&#039;un chemin, sans charger tout le reste.
&lt;/p&gt;
&lt;p&gt;
   Si le paramètre file est omis (ce qui n&#039;est pas conseillé), Drupal cherchera la fonction parmi celles déjà chargée en mémoire. Si ce paramètre est présent, le fichier correspondant sera cherché dans le dossier du module (utilisez le paramètre file path si le fichier se trouve hors de ce dossier). D&#039;une manière général, les callbacks correspondant à des pages sont rangées dans un fichier mon_module.pages.inc. Celles correspondant à l&#039;administration dans mon_module.admin.inc, etc.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_4&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Droits associés au handler&lt;/h2&gt;
&lt;p&gt;
   Le dernier paramètre, access argument, contient un tableau de permissions nécessaires à l&#039;accès au menu. Ici access content désigne le droit d&#039;accéder au contenu, ce que tout le monde peut généralement faire. Mais par exemple pour limiter aux seuls administrateur, nous aurions pu mettre administer site configuration.
&lt;/p&gt;
&lt;p&gt;
   Ce paramètre access argument est en réalité utilisé conjointement avec le paramètre access callback. Mais lorsque ce dernier est omis, Drupal utilise par défaut la valeur user_access. Ainsi vous comprenez que ces deux paramètres correspondent en réalité à un appel à la fonction user_access(array(&#039;access content&#039;)) qui renvoie vrai si l&#039;utilisateur courant a les droits demandés. A titre d&#039;exemple, vous auriez pu aussi utiliser pour access callback les fonctions is_anonymous_user ou user_is_logged_in, toute deux fournies par le module user. Comme elles ne prennent pas de paramètre, le paramètre access arguments peut dans ce cas être omis.
&lt;/p&gt;
&lt;p&gt;
  D&#039;une manière générale, vous pouvez utiliser la fonction qui vous chante pour gérer les droits, pour peu qu&#039;elle renvoie true si l&#039;utilisateur est valide et false dans le cas contraire.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_5&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Implémentation de la callback&lt;/h2&gt;
&lt;p&gt;
  Il ne nous reste maintenant plus qu&#039;à implémenter la callback, en commençant par créer un fichier tutoriel_menu.pages.inc et y placer une fonction comme celle-ci :&lt;/p&gt;
&lt;p&gt;    function tutoriel_menus_simple_menu_callback&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; $output=&amp;quot;Coeur de page associé à ce modeste menu&amp;quot;;&lt;br /&gt;
&amp;nbsp; return $output;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    tutoriel_menus.pages.inc - callback générique&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
   Bon, un peu simpliste comme rendu, mais c&#039;est juste pour l&#039;exemple. Vous pouvez mettre dans $output tout ce qui vous chante, de simple messages à des tableaux triables.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_6&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Vidange du cache de menus&lt;/h2&gt;
&lt;p&gt;
 Il ne nous reste maintenant plus qu&#039;à tester cela. Attention cependant, ce hook n&#039;est, pour des raisons de performances, invoqué qu&#039;à l&#039;activation du module. C&#039;est  très bien pour la première fois, mais moins drôle lors des essais suivants. Pour régler ce problème, je vous conseille d&#039;installer le module &lt;a class=&quot;external&quot; target=&quot;_blank&quot; href=&quot;http://www.drupalistic.net/module/administration-menu&quot; rel=&quot;nofollow&quot;&gt;administration menu&lt;/a&gt; qui dans son menu déroulant de droite, dispose d&#039;une action de vidange du cache des menus.
&lt;/p&gt;
&lt;p&gt;
   Une fois le module activé, vous devriez voir apparaître dans votre menu Navigation, le nouveau menu Un menu simple. En l&#039;activant, dans le coeur de page, doit apparaître le retour de notre callback.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_7&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Des éléments menus arborescents&lt;/h2&gt;
&lt;p&gt;
  Il est possible de prolonger l&#039;exemple précédent en créant une cascade de menu. Basiquement, une telle arborescence consiste simplement à créer un menu par niveau de chemin. Dans le chapitre précédent, le chemin était tutoriels/menus/simple. Pour rendre visible les deux niveaux précédents, il nous font donc créer deux menus respectivement pour tutoriels, puis tutoriels/menus.&lt;/p&gt;
&lt;p&gt;    $items&amp;#91;&#039;tutoriels&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;title&#039; =&amp;gt; &#039;Les tutoriels&#039;,&lt;br /&gt;
&amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_tutoriels_callback&#039;,&lt;br /&gt;
&amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;expanded&#039;=&amp;gt;true &amp;nbsp;&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;$items&amp;#91;&#039;tutoriels/menus&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;title&#039; =&amp;gt; &#039;Les menus&#039;,&lt;br /&gt;
&amp;nbsp; &#039;description&#039; =&amp;gt; t&amp;#40;&amp;quot;Tutoriel sur les menus&amp;quot;&amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_tutoriels_menu_callback&#039;,&lt;br /&gt;
&amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;expanded&#039;=&amp;gt;true &amp;nbsp;&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;    Ajout de deux niveaux de menu&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Notez la propriété expanded qui permettent d&#039;auto-déployer les deux niveaux pour que tout soit visible par défaut. Enfin, comme nous utilisons deux nouvelles callback, il faut aussi les ajouter dans tutoriel_menu.pages.inc&lt;/p&gt;
&lt;p&gt;    function tutoriel_menus_tutoriels_callback&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Les tutoriels&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;function tutoriel_menus_tutoriels_menus_callback&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Les tutoriels des menus&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Ajout des deux callback&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
    Il suffit maintenant de reconstruire les menus et d&#039;observer le résultat.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_8&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Choix du menu cible&lt;/h2&gt;
&lt;p&gt;
   Par défaut, nos éléments de menu sont intégrés par Drupal dans le menu administration si le chemin commence par admin/..., ou dans le menu navigation le cas échéant. Il est cependant possible d&#039;ajouter nos handlers ailleurs en utilisant la propriété menu_name. Pour illustrer cette possibilité, nous allons ajouter aux liens primaires (un menu généralement affiché en haut à droite de chaque page), l&#039;élément de menu A propos de nous :&lt;/p&gt;
&lt;p&gt;    $items&amp;#91;&#039;informations&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;title&#039; =&amp;gt; &#039;A propos de nous&#039;,&lt;br /&gt;
&amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_a_propos_callback&#039;,&lt;br /&gt;
&amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;menu_name&#039; =&amp;gt; &#039;primary-links&#039;&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;    Ajout d&amp;#039;un élément de menu dans le menu &amp;#039;liens primaires&amp;#039;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
   Comme toujours, il nous faut une nouvelle callback :&lt;/p&gt;
&lt;p&gt;    function tutoriel_menus_a_propos_callback&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Bla bla bla...&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Callback pour l&amp;#039;élément de menu &amp;#039;information&amp;#039;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
   Une fois le cache des menus reconstruit, si vous allez dans l&#039;administration des menus, sur le menu Liens primaires, vous devriez voir apparaître le nouvel élément de menu. Et si votre thème l&#039;affiche par défaut en haut à droite de la page, il y sera directement visible.
&lt;/p&gt;
&lt;p&gt;
  L&#039;astuce ici consiste à savoir que le nom interne du menu liens primaires est primary-links. En utilisant ce nom pour la propriété menu_name, nous avons forcé l&#039;ajout de ces menus aux liens primaires. Notez que c&#039;est un ajout totalement dynamique, au sens où les menus ainsi créés disparaîtront d&#039;eux même à la prochaine reconstruction des menus si vous les supprimez de votre hook. En somme une alternative intelligente pour déployer facilement des menus en production sans avoir à se refrapper une configuration manuelle, par exemple pour instancier toutes les sections d&#039;un site sur le menu &quot;liens secondaires&quot;.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_9&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Les onglets&lt;/h2&gt;
&lt;p&gt;
   Une autre manière de gérer les menus arborescents est de les afficher sous la forme d&#039;onglet. Drupal permet en effet de gérer ainsi deux niveaux d&#039;onglets (vous en avez un exemple dans la configuration d&#039;un thème). Ces onglets sont très faciles à mettre en oeuvre pour peu d&#039;en comprendre la logique. &lt;/p&gt;
&lt;p&gt;    $items&amp;#91;&#039;tutoriels/menus/simple/onglet-1&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;title&#039; =&amp;gt; &#039;Onglet 1&#039;,&lt;br /&gt;
&amp;nbsp; &#039;type&#039; =&amp;gt; MENU_DEFAULT_LOCAL_TASK,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;$items&amp;#91;&#039;tutoriels/menus/simple/onglet-2&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;type&#039; =&amp;gt; MENU_LOCAL_TASK,&lt;br /&gt;
&amp;nbsp; &#039;title&#039; =&amp;gt; &#039;Onglet 2&#039;,&lt;br /&gt;
&amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_onglet2_callback&#039;,&lt;br /&gt;
&amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;$items&amp;#91;&#039;tutoriels/menus/simple/onglet-2/onglet-2-1&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;title&#039; =&amp;gt; &#039;Onglet 2.1&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;type&#039; =&amp;gt; MENU_DEFAULT_LOCAL_TASK&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;$items&amp;#91;&#039;tutoriels/menus/simple/onglet-2/onglet-2-2&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;title&#039; =&amp;gt; &#039;Onglet 2.2&#039;,&lt;br /&gt;
&amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_onglet22_callback&#039;,&lt;br /&gt;
&amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;type&#039; =&amp;gt; MENU_LOCAL_TASK&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;    Ajout d&amp;#039;onglets&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
   Comme vous le voyez, nous sommes ici proche des menus arborescents. La nouveauté est tout d&#039;abord l&#039;utilisation du paramètre type indiquant à Drupal que nous définissons ici des onglets (appelés Tasks, ou tâches). MENU_LOCAL_TASK marque un onglet normal et MENU_DEFAULT_LOCAL_TASK marque l&#039;onglet par défaut pour un niveau. Notez l&#039;absence de callback pour les handlers marqués MENU_DEFAULT_LOCAL_TASK. En effet, la règle est que chaque niveau d&#039;onglet doit disposer d&#039;un MENU_DEFAULT_LOCAL_TASK, et que ce handler est automatiquement au chemin interne de son handler parent. En d&#039;autres termes, si vous cliquez sur Onglet 1, c&#039;est le chemin de notre menu simple qui s&#039;affiche et son handler qui est utilisé. De même en cliquant sur Onglet 2.1, c&#039;est le handler et donc le chemin et la callback de l&#039;onglet 2 qui est utilisé. Du coup, nous n&#039;avons que deux callback à ajouter&lt;/p&gt;
&lt;p&gt;    function tutoriel_menus_onglet2_callback&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Contenu de l&#039;onglet 2&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;function tutoriel_menus_onglet22_callback&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Contenu de l&#039;onglet 22&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Callbacks pour les onglets&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_10&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Les handlers \&quot;cachés\&quot;&lt;/h2&gt;
&lt;p&gt;
   Comme nous l&#039;avons vu plus haut, nous fabriquons dans notre module des handlers de menu, et non des éléments de menus. Si jusqu&#039;à maintenant nous avions une création automatique d&#039;éléments de menu pour chacun de nos handlers, c&#039;est soit que nous ométions le paramétrage type, qui a pour valeur par défaut MENU_NORMAL_ITEM (comprendre &quot;un handler pour lequel drupal doit créer un élément de menu&quot;), ou que nous voulions afficher des onglets avec  MENU_LOCAL_TASK et  MENU_DEFAULT_LOCAL_TASK.
&lt;/p&gt;
&lt;p&gt;
   Maintenant, dans de nombreux cas nos modules n&#039;ont aucun besoin d&#039;éléments de menu mais juste une URL associée à une page et/ou une action. C&#039;est par exemple le cas si nous voulons créer une action d&#039;ajout, ou dans l&#039;exemple qui suit, un simple Hello World. &lt;/p&gt;
&lt;p&gt;    $items&amp;#91;&#039;tutoriels/menus/hello&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_hello_callback&#039;,&lt;br /&gt;
&amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;type&#039;=&amp;gt;MENU_CALLBACK&lt;br /&gt;
&amp;#41;;&lt;/p&gt;
&lt;p&gt;    Ajout d&amp;#039;un handler sans élément de menu&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Et comme toujours, nous ajoutons la fonction callback associée&lt;/p&gt;
&lt;p&gt;    function tutoriel_menus_hello_callback&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Hello World&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Callback du handler sans élément de menu&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Une fois le cache de menu reconstruit, vous constaterez que cette fois, aucun élément de menu n&#039;a été rajouté par Drupal. Pour utiliser ce handler, il nous faut directement taper son URL (ou chemin interne) directement dans la zone d&#039;adresse du navigateur, soit http://mon_site/tutoriels/menus/hello.
&lt;/p&gt;
&lt;p&gt;
   Les seules différences avec les handlers que nous avons créé jusqu&#039;à maintenant sont que nous n&#039;avons fournit à Drupal ni titre, ni description, et que nous avons en revanche spécifié MENU_CALLBACK comme paramètre type. Ce type permet juste de dire à Drupal qu&#039;il n&#039;est pas utile de cherche à créer un élément de menu.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_11&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Handlers paramétrés&lt;/h2&gt;
&lt;p&gt;
   Ce type de handler sans élément de menu est très utile pour créer des actions comme &quot;ajouter&quot;, &quot;supprimer&quot;, etc. Encore faut il pouvoir fournir des paramètres à ce menu de sorte à pouvoir indiquer, dans l&#039;URL, la référence de l&#039;objet à détruire.
&lt;/p&gt;
&lt;p&gt;
   Depuis la version 6, Drupal dispose d&#039;un système très bien fait pour passer des paramètres au handler, basé sur le caractère %. Ainsi si nous ajoutons le menu suivant :&lt;/p&gt;
&lt;p&gt;    $items&amp;#91;&#039;tutoriels/menus/hello1/%&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_hello1_callback&#039;,&lt;br /&gt;
&amp;nbsp; &#039;page arguments&#039; =&amp;gt; array&amp;#40;3&amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &#039;type&#039;=&amp;gt;MENU_CALLBACK&lt;br /&gt;
&amp;#41;; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;    Ajout d&amp;#039;un handler paramétré&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Et que nous ajoutons la callback suivante :&lt;/p&gt;
&lt;p&gt;    function tutoriel_menus_hello1_callback&amp;#40;$message&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Hello $message&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Ajout d&amp;#039;une callback paramétrée&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Après reconstruction du menu, nous constatons que l&#039;URL http://mon_site/tutoriels/menus/hello1/gaston provoque l&#039;affichage du message Hello gaston. Pour comprendre ce qui se passe, retournons sur la déclaration de notre handler.
&lt;/p&gt;
&lt;p&gt;
 D&#039;abord, nous avons dans le chemin interne un symbole % qui indique à Drupal que cet élément de chemin est un paramètre et peut donc prendre n&#039;importe quelle valeur (ici gaston). Ensuite nous avons un nouveau paramètre page arguments contenant un tableau. Le contenu de ce tableau sera transmis à la callback. Si un de ses éléments est un chiffre, il sera préalablement par l&#039;élément de chemin de rang correspondant (qui commence à &lt;img src=&quot;http://arnumeral.fr/sites/all/modules/contrib/smileys/packs/Roving/innocent.png&quot; title=&quot;Innocent&quot; alt=&quot;Innocent&quot; class=&quot;smiley-content&quot; /&gt;. Si l&#039;élément du tableau n&#039;est pas un chiffre, il sera transmis tel-quel à la fonction.
&lt;/p&gt;
&lt;p&gt;
  Dans le cas de notre chemin, nous demandons à Drupal de placer en seul paramètre de la callback l&#039;élément de chemin de rang 3 (c&#039;est à dire le 4ième). C&#039;est pour cela que notre callback dispose d&#039;un paramètre $message qui recevra cette valeur.
&lt;/p&gt;
&lt;p&gt;
   Il est possible d&#039;avoir plusieurs paramètres à la callback dont l&#039;ordre et le type sera spécifié par page arguments. Mais plus intéressant encore, il est aussi possible de passer en paramètre des objets préchargés par Drupal. Pour tester cela, ajoutons encore un nouvel handler et sa callback :&lt;/p&gt;
&lt;p&gt;    &amp;nbsp; $items&amp;#91;&#039;tutoriels/menus/hello2/%user&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_hello2_callback&#039;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;page arguments&#039; =&amp;gt; array&amp;#40;3&amp;#41;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;type&#039;=&amp;gt;MENU_CALLBACK&lt;br /&gt;
&amp;nbsp; &amp;#41;; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // callback associée &amp;nbsp;à mettre dans tutoriel_menus.pages.inc&lt;br /&gt;
function tutoriel_menus_hello2_callback&amp;#40;$user&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Hello {$user-&amp;gt;name}&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Ajout d&amp;#039;un handler paramétré avec objet&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
   Reconstruisons le cache des menus et lançons l&#039;URL http://mon_site/tutoriels/menus/hello2/1. Vous devriez alors voir apparaître un Hello administrateur (ou n&#039;importe quel nom que vous aurez utilisé comme administrateur de votre site).
&lt;/p&gt;
&lt;p&gt;
   L&#039;astuce ici tient à l&#039;utilisation non plus du simple %, mais de %user. Ce dernier indique à Drupal de &quot;charger en mémoire l&#039;utilisateur aillant pour ID l&#039;élément de chemin donné dans l&#039;URL&quot;. C&#039;est ainsi que notre callback hérite d&#039;un objet $user chargé à partir de l&#039;ID 1 (celui de l&#039;administrateur).
&lt;/p&gt;
&lt;p&gt;
   Il est intéressant de comprendre comment le &quot;magie&quot; fonctionne ici. Lorsque Drupal rencontre un paramètre de handler de la forme %objet, il va chercher une fonction pré-existante de la forme objet_load. S&#039;il la trouve (ici c&#039;est le cas, il s&#039;agit de user_load), il lui passe en paramètre l&#039;élément de chemin (ici 1) correspondant. Les fonctions objet_load renvoient toujours l&#039;objet chargé à partir du paramètre (ici $user=user_load(1)), et c&#039;est cet objet qui est utilisé comme paramètre à la callback.
&lt;/p&gt;
&lt;p&gt;
   En standard, Drupal dispose de plusieurs fonctions de type objet_load. Citons par exemple node_load qui par un %node permet de passer un contenu en paramètre d&#039;une callback.&lt;/p&gt;
&lt;p&gt;
 Mais vous pouvez aussi créer la votre. En effet, si vous utilisez un élément de chemin %mon_objet comme ceci &lt;/p&gt;
&lt;p&gt;    &amp;nbsp; $items&amp;#91;&#039;tutoriels/menus/hello3/%mon_objet&#039;&amp;#93; = array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;page callback&#039; =&amp;gt; &#039;tutoriel_menus_hello3_callback&#039;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;page arguments&#039; =&amp;gt; array&amp;#40;3&amp;#41;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;file&#039; =&amp;gt; &#039;tutoriel_menus.pages.inc&#039;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;access arguments&#039; =&amp;gt; array &amp;#40;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &#039;access content&#039;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;#41;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#039;type&#039;=&amp;gt;MENU_CALLBACK&lt;br /&gt;
&amp;nbsp; &amp;#41;; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // callback associée &amp;nbsp;à mettre dans tutoriel_menus.pages.inc&lt;br /&gt;
function tutoriel_menus_hello3_callback&amp;#40;$mon_objet&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return &amp;quot;Hello {$mon_objet[&#039;name&#039;]}&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Utilisation d&amp;#039;un chargeur custom&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;  Vous devez en outre ajouter une fonction de type object_load pour que Drupal puisse faire correspondre le paramètre de rang 3, à l&#039;argument %mon_objet :&lt;/p&gt;
&lt;p&gt;    function mon_objet_load&amp;#40;$id&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return array&amp;#40;&#039;name&#039;=&amp;gt;&amp;quot;Objet[$id]&amp;quot;&amp;#41;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;    Chargeur custom&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Vous n&#039;avez maintenant plus qu&#039;à reconstruire les menus et tester http://mon_site/tutoriels/menus/hello3/12 pour voir apparaître &quot;Hello Objet[12]&quot;.
&lt;/p&gt;
&lt;p&gt;&lt;a name=&#039;chapter_12&#039; rel=&quot;nofollow&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;
   Voilà, fin du &quot;petit&quot; tour d&#039;horizon sur les menus. Comme vous l&#039;avez vu, le sujet est pour le peu dense, à la mesure de la richesse du sujet. Ceci étant dit, nous n&#039;avons ici qu&#039;abordé l&#039;essentiel, il reste encore beaucoup de choses à découvrir en explorant l&#039;API des menus.
&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/215">drupalfr.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/484">planetlibre.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/284">Tutoriels</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/483">Yoran</category>
 <pubDate>Mon, 21 Dec 2009 10:07:33 +0000</pubDate>
 <dc:creator>arNuméral</dc:creator>
 <guid isPermaLink="false">799 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Drupal 6.15 and 5.21</title>
 <link>http://planete.drupalfr.org/node/797</link>
 <description>&lt;p&gt;Drupal a été mis à jour afin de corriger de multiples vulnérabilités qualifiées de &quot;non critiques&quot; (&lt;a href=&quot;http://drupal.org/node/661586&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;SA-CORE-2009-009&lt;/a&gt;). Il est tout de même conseillé de mettre vos installations à jours.&lt;/p&gt;
&lt;p&gt;Téléchargement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://ftp.drupal.org/files/projects/drupal-6.15.tar.gz&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;Drupal 6.15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ftp.drupal.org/files/projects/drupal-5.21.tar.gz&quot; rel=&quot;nofollow&quot; rel=&quot;nofollow&quot;&gt;Drupal 5.21&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/273">drupal.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/349">Guillaume Bec</category>
 <pubDate>Thu, 17 Dec 2009 20:52:06 +0000</pubDate>
 <dc:creator>drupalfr.org</dc:creator>
 <guid isPermaLink="false">797 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Koumbit était l&#039;hôte de la rencontre Drupal de décembre à Montréal</title>
 <link>http://planete.drupalfr.org/node/822</link>
 <description>&lt;p&gt;Merci à tous ceux qui se sont rendus à nos bureaux pour la dernière rencontre Drupal. C&#039;est toujours plaisant de se retrouver en bonne compagnie pour discuter des grands événements Drupal à venir. Ce vendredi, nous avons reçu la présence notable d&#039;&lt;a href=&quot;http://www.webchick.net/&quot; rel=&quot;nofollow&quot;&gt;Angie Byron&lt;/a&gt;, co-mainteneur de Drupal 7. Elle nous a présenté le projet &lt;a href=&quot;http://drupal.org/project/coder&quot; rel=&quot;nofollow&quot;&gt;Coder&lt;/a&gt; pour faciliter la migration des modules des versions précédentes vers Drupal 7. Le module Coder devient rapidement un outil incontournable. Koumbit s&#039;en sert d&#039;ailleurs pour migrer les modules désuets de Drupal 5.x vers une version, plus courante, de Drupal 6.x. Cette fois-ci, nous nous en sommes servi pour appliquer des correctifs au noyau de &lt;a href=&quot;http://drupal.org/project/drupal&quot; rel=&quot;nofollow&quot;&gt;Drupal 7&lt;/a&gt;, que la communauté Drupal attend avec impatience. &lt;/p&gt;
&lt;p&gt;La communauté Drupal de Montréal est en pleine effervescence, et Koumbit est heureux de s&#039;impliquer! Pour ne pas passer à côté de la prochaine rencontre, nous vous invitons à suivre le groupe &lt;a href=&quot;http://groups.drupal.org/montreal-quebec&quot; rel=&quot;nofollow&quot;&gt;Montreal-Quebec&lt;/a&gt; sur groups.drupal.org ou à vous inscrire à la page &lt;a href=&quot;http://www.facebook.com/#/pages/Montreal-QC/Reseau-Koumbit/&quot; rel=&quot;nofollow&quot;&gt;Facebook de Koumbit&lt;/a&gt;.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/312">Chez Koumbit</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/616">Koumbit</category>
 <pubDate>Thu, 10 Dec 2009 16:16:41 +0000</pubDate>
 <dc:creator>Koumbit</dc:creator>
 <guid isPermaLink="false">822 at http://planete.drupalfr.org</guid>
</item>
</channel>
</rss>
