{"id":800,"date":"2009-06-19T23:06:45","date_gmt":"2009-06-19T22:06:45","guid":{"rendered":"http:\/\/flaven.fr\/?p=800"},"modified":"2013-11-27T07:08:08","modified_gmt":"2013-11-27T06:08:08","slug":"drupal-6-les-bonnes-pratiques-pour-creer-un-theme-pour-drupal-6x","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2009\/06\/drupal-6-les-bonnes-pratiques-pour-creer-un-theme-pour-drupal-6x\/","title":{"rendered":"Drupal 6 &#8211; les bonnes pratiques pour cr\u00e9er un th\u00e8me pour drupal 6.x"},"content":{"rendered":"<p><!-- Drupal 6 - les bonnes pratiques pour cr\u00e9er un th\u00e8me pour drupal 6.x --><br \/>\n<!--  Drupal, drupal 6.x, phptemplate, MySQL, CMS, Webdesign, pratiques, th\u00e8me, cobra  --><br \/>\nDans un article pr\u00e9c\u00e9dent, on avait une m\u00e9thode simple, efficace mais finalement assez risqu\u00e9e de cr\u00e9er un th\u00e8me sur Drupal en d\u00e9tournant un th\u00e8me existant. <!--more-->Deux raisons \u00e0 cela : <\/p>\n<ul>\n<li>Vous ne savez pas grand chose du code que vous allez trouver, la question qui vous viendra \u00e0 l&#8217;esprit est bien evidemment &#8220;est-ce la fa\u00e7on dont vous auriez proc\u00e9der ?&#8221;<\/li>\n<li>En cr\u00e9ant votre th\u00e8me, vous produirez un th\u00e8me maigre livr\u00e9 sans mati\u00e8re grasse, sans poudre aux yeux, sans chichi et sans fichier inutile&#8230; Bref, vous saurez intervenir en cas de p\u00e9pin comme dirait Francis Heaulmes  !<\/li>\n<\/ul>\n<p><em>NDLR: Ainsi, comme dit ma grand-m\u00e8re, &#8220;un petit chez soi vaut mieux qu&#8217;un grand chez les autres&#8221;. Le principe s&#8217;applque pour le logement comme pour le th\u00e8me Drupal.<\/em><\/p>\n\t\t\t\t\t<div class=\"textwidget-unique text\">\n\n\t\t\t\t\t        <div class=\"textwidget-photo\">\n\t\t\t\t\t                <a href=\"https:\/\/flaven.fr\/books\/leveraging-drupal-getting-your-site-done-right\/\" class=\"photo\" title=\"Leveraging Drupal: Getting Your Site Done Right\"><img loading=\"lazy\" decoding=\"async\" alt=\"Leveraging Drupal: Getting Your Site Done Right\" src=\"http:\/\/ecx.images-amazon.com\/images\/I\/41gnzk7TYDL._SL160_.jpg\" width=\"121\" height=\"160\"><\/a>\n\t\t\t\t\t            <\/div>\n\t\t\t\t\t\t<div class=\"info half\">\n\t\t\t\t\t\t\t<h2 class=\"product-title\"><a class=\"head\" href=\"https:\/\/flaven.fr\/books\/leveraging-drupal-getting-your-site-done-right\/\" title=\"Leveraging Drupal: Getting Your Site Done Right\">Leveraging Drupal: Getting Your Site Done Right<\/a><\/h2>\n\t\t\t\t\t\t\t\n\t\t\t\t\t        <p class=\"product-excerpt\">Un excellent livre sur le CMS Drupal, qui prend vraiment le partie d'une approche pragmatique et efficace. Rien n'est laiss\u00e9 de c\u00f4t\u00e9 sur la compr\u00e9hension de Drupal (th\u00e8me, module...etc) mais il n'y a rien de superflu non plus. Par ailleurs, une chose rare qui m\u00e9rite d'\u00eatre signal\u00e9e c'est une application concr\u00e8te de la m\u00e9thode Agile avec \"User storie\", \"Acceptance Test\" pour mener \u00e0 bien le d\u00e9veloppement d'un site sous Drupal. Un livre tr\u00e8s complet.<\/p>\n\t\t\t\t\t\t\t\tGenre(s) : <a href=\"https:\/\/flaven.fr\/book-type\/agile\/\" rel=\"tag\">Agile<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/agile-scrum\/\" rel=\"tag\">Agile Scrum<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/ajax\/\" rel=\"tag\">Ajax<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/api\/\" rel=\"tag\">API<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/apis\/\" rel=\"tag\">APIs<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/applications\/\" rel=\"tag\">Applications<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/cms\/\" rel=\"tag\">CMS<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/development\/\" rel=\"tag\">Development<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/direction-de-projet-agile\/\" rel=\"tag\">Direction de projet<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/drupal\/\" rel=\"tag\">Drupal<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/javascript\/\" rel=\"tag\">Javascript<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/jquery\/\" rel=\"tag\">jQuery<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/jquery-ui\/\" rel=\"tag\">jQuery UI<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/open-source-agile-developpement\/\" rel=\"tag\">Open Source<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/php\/\" rel=\"tag\">PHP<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/php-applications\/\" rel=\"tag\">PHP Applications<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/theme-2\/\" rel=\"tag\">Theme<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/user-stories\/\" rel=\"tag\">User stories<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/website\/\" rel=\"tag\">Website<\/a><br>Auteur(s) : <a href=\"https:\/\/flaven.fr\/book-author\/victor-kane\/\" rel=\"tag\">Victor Kane<\/a><br>Edition(s) : <a href=\"https:\/\/flaven.fr\/book-description\/john-wiley-sons\/\" rel=\"tag\">John Wiley &amp; Sons<\/a><br>\n\t\t\t\t\t<div class=\"but-wrap\"><a href=\"http:\/\/www.amazon.fr\/Leveraging-Drupal-Getting-Your-Right\/dp\/0470410876%3FSubscriptionId%3DAKIAJYB2QGGQOTHQLRPA%26tag%3Dhecubenet-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0470410876\" class=\"button\"><span><i class=\"more\"><\/i>+ d'infos<\/span><\/a><\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\n<h4>A faire ou \u00e0 ne pas faire&#8230;<\/h4>\n<p>Pour r\u00e9pertorier et se rappeler ces mauvaises pratiques, je vous invite tout de m\u00eame jeter un \u0153il sur cet article.<br \/>\n<a href=\"http:\/\/social.hecube.net\/blog\/2009\/04\/07\/comprendre-en-5-minutes-les-principes-du-theme-drupal\/\">Comprendre en 5 minutes les principes du th\u00e8me drupal<\/a><br \/>\nTout d&#8217;abord, il vaut mieux ne pas d\u00e9plier son th\u00e8me dans le r\u00e9pertoire usuel de publication. Pour r\u00e9sumer, cette prartique dans un dilemme simple et inquisiteur de ce qu&#8217;il faut faire ou pas. Sch\u00e9matiquement, le choix du r\u00e9pertoire pour votre th\u00e8me est le suivant :<br \/>\n<strong>1. BON<\/strong> <code>drupal &gt;&gt; sites &gt;&gt; all &gt;&gt; themes &gt;&gt; lenomdemontheme<\/code><br \/>\n<strong>2. PAS BON<\/strong> <code>drupal &gt;&gt; themes<\/code><\/p>\n<p><em>Dans le sc\u00e9nario &#8220;1. BON&#8221;, vous devrez cr\u00e9er le r\u00e9pertoire <code>themes<\/code> car il n&#8217;existe pas. <\/em><\/p>\n<h4>Cr\u00e9er un fichier .info<\/h4>\n<p>Dans un &#8220;theme&#8221; drupal 6.x, on va cr\u00e9er un fichier <code>.info<\/code>. Ce fichier rec\u00e8le les informations indispensable au CMS Drupal sur la nature du th\u00e8me et de son fonctionnement.<\/p>\n<blockquote>\n<ul>\n<li><code>name<\/code>, le nom, il s&#8217;agit du nom du th\u00e8me (majuscule ou minuscule, avec ou sans accent)<\/li>\n<li><code>description<\/code>, une description un peu \u00e0 la mani\u00e8res des themes wordpress<\/li>\n<li><code>core<\/code>, la version de drupal sur lequel cela marche<\/li>\n<li><code>engine<\/code>, tr\u00e8s souvent &#8220;phtemplate&#8221;, c&#8217;est devenu quasiment un standard<\/li>\n<li><code>regions [left] = Left sidebar<\/code>, il s&#8217;agit de la colonne de gauche de votre futur template.  <strong>Vous disposez d&#8217;autres positions comme <code>right<\/code>, <code>content<\/code>, <code>header<\/code>, <code>footer<\/code>, <code>content<\/code><\/strong>. En g\u00e9n\u00e9ral, il en existe un certain nombre par d\u00e9faut : right, content, header, footer.<\/li>\n<\/blockquote>\n<h4>Le d\u00e9coupage en <code>regions<\/code><\/h4>\n<p>Ce d\u00e9coupage a pur but de vous permettre ult\u00e9rieurement de faire appel \u00e0 l&#8217;aide de la variable $left directement dans un fichier .tpl.php. Fichir dont on verra la cr\u00e9ation plus loin dans l&#8217;article.<\/p>\n<h4>Apres le d\u00e9coupage, o\u00f9 enfouir le <code>.info<\/code><\/h4>\n<p>Il faut enregistrer ce fichier <code>.info<\/code>avec le nom de votre th\u00e8me <code>lenomdemontheme.info<\/code><\/p>\n<p><strong>Un mod\u00e8le de fichier <code>.info<\/code><\/strong><\/p>\n<pre lang=\"txt\">\r\nname = Un th\u00e8me de plus dans l'univers\r\ndescription = un magnifique th\u00e8me multi colonne, inspir\u00e9 par cobra, tout d\u00e9sign\u00e9 pur un blog.\r\n screenshot = screenshot.png\r\ncore = 6.x\r\nengine = phptemplate\r\nregions[left] = Left sidebar\r\nregions[right] = Right sidebar\r\nregions[content] = Content\r\nregions[header] = Header\r\nregions[footer] = Footer\r\n<\/pre>\n<p><em>Vous pouvez ajouter une image dans ce m\u00eame r\u00e9pertoire  , c&#8217;est plus fun&#8230; La taille est de 150 pixels de large par 90 pixels de hauteur.<br \/>\n<code>screenshot = screenshot.png<\/code><\/em><\/p>\n<p><strong>A NOTER : le fichier doit avoir le m\u00eame nom que votre r\u00e9pertoire situ\u00e9 dans <code>themes<\/code>. Ainsi, on enregistrera le fichier au nom de <code>lenomdemontheme.info<\/code> dans le repertoire <code>drupal &gt;&gt; sites &gt;&gt; all &gt;&gt; themes &gt;&gt; lenomdemontheme<\/code><\/strong><\/p>\n<h4>Cr\u00e9er un fichier page.tpl.php<\/h4>\n<p>Il est certain que la cr\u00e9ation d&#8217;un fichier <code>page.tpl.php<\/code> dans Drupal 6.x est loin d\u2019\u00eatre une obligation mais c&#8217;est fortement recommand\u00e9 car cela vous offre un contr\u00f4le sur votre th\u00e8me. On se cantonnera pour cr\u00e9er ce fichier \u00e0 un assortiment de xhtml\/CSS, qui donnera l&#8217;apparence de votre site. Dans cette page, il n&#8217; ya aura plus qu&#8217;\u00e0 imprimer des variables Drupal \u00e0 l&#8217;int\u00e9rieur de la page.<\/p>\n<h4>Variables drupal ?<\/h4>\n<p>Pour m\u00e9moire, nous sommes dans le moteur <code>phptemplate<\/code>, ainsi donc on va pouvoir passer des &#8220;pseudo-variables&#8221; qui sont souvent la marque de fabrique et le propre des moteur de templates (template engine). Pour information, c&#8217;est une notion qui existe par exemple dans des frameworks comme CodeIgniter ou Smarty.<\/p>\n<p>A la diff\u00e9rence du CMS Drupal, dans CodeIgniter, il ne s&#8217;agit pas de v\u00e9ritables variables mais plus d\u2019\u00e9l\u00e9ments en &#8220;plain text&#8221; facilement imprimables et manipulables. \u00c9l\u00e9ments qui s&#8217;impriment dans les vues de votre site MVC. Cela \u00e9limine du m\u00eame coup la complexit\u00e9 de PHP. On peut par exemple confier la construction de ces vues \u00e0 un graphique m\u00eame ou un int\u00e9grateur html.<\/p>\n<ul>\n<li>CodeIgniter User Guide &#8211; Template Parser Class<br \/>\n\t\t<a href=\"http:\/\/codeigniter.com\/user_guide\/libraries\/parser.html\" target=\"_blank\">http:\/\/codeigniter.com\/user_guide\/libraries\/parser.html<\/a><\/li>\n<li>Smarty : Why Use Smarty<br \/>\n\t\t<a href=\"http:\/\/www.smarty.net\/\" target=\"_blank\">http:\/\/www.smarty.net\/<\/a><\/li>\n<\/ul>\n<h4>Quelques exemples de variables Drupal<\/h4>\n<p>Quelques-unes de ces variables sont vraiment indispensables.<\/p>\n<p><code>$head_title<\/code>, le nom du site<br \/>\n<code>$head<\/code>, ce que contient la balise <code>head<\/code> du site<br \/>\n<code>$styles<\/code>, cette variable ins\u00e8re la feuille de style du site<br \/>\n<code>$scripts<\/code>, cette variable ins\u00e8re les scripts javascript du site<br \/>\n<code>$closure<\/code>, cette variable cl\u00f4t les scripts ex\u00e9cut\u00e9s dans votre th\u00e8me Drupal. Il est vivement recommand\u00e9 de la mettre avant <code>&lt;\/body&gt;<\/code><\/p>\n<h4>Lire son template Drupal 6.x<\/h4>\n<p>Il existe <b>3<\/b> choses importantes dont il faut se souvenir pour analyser et constituer un th\u00e8me Drupal.<\/p>\n<p>Pour comprendre ce mode d\u2019affichage de votre th\u00e8me gr\u00e2ce au code ci-dessous, il faut lire &#8220;si il existe une <code>$sidebar_left<\/code> alors imprime le contenu de cette colonne de gauche d\u00e9finie dans notre fichier <code>.info<\/code>&#8221;<\/p>\n<p><b>1. Affichage ou non &#8211; imprime le contenu de la colonne de gauche<\/b><\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n&lt;?php if ($left) { ?&gt;&lt;div id=&quot;sidebar-left&quot;&gt;\r\n  &lt;?php print $left ?&gt;\r\n&lt;\/div&gt;&lt;?php } ?&gt;\r\n<\/pre>\n<p><b>2. le plat de r\u00e9sistance &#8211; imprime la variable <code>$content<\/code><\/b><br \/>\nCette variable va contenir le contenu principal de vos pages.<\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n\t&lt;?php print $content ?&gt;\r\n<\/pre>\n<p><b>3. rappel des autres variables importantes \u00e0 faire figure dans votre fichier <code>page.tpl.php<\/code><\/b><\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n\t&lt;?php \r\n\tprint $messages;\r\n\tprint $help;\r\n\tprint $content;\r\n\tprint $footer;\r\n\t\r\n\t\/\/ \u00e0 faire figurer toujours en bas de votre template\r\n\tprint $closure;\r\n\t\r\n\t\r\n\t\r\n\t?&gt;\r\n<\/pre>\n<p><strong>En gardant en m\u00e9moire ces 3 points, il vous faudra compl\u00e9ter votre th\u00e8me afin. L\u00e0 encore, deux fa\u00e7ons de faire, vous pouvez lister toutes ces variables puis injecter votre code xhtml\/css ou vous inspirer d&#8217;un th\u00e8me existant pour isoler les variables.<\/strong><\/p>\n<p>NB : Un bon article sur les \u00ab must-have \u00bb d\u2019un th\u00e8me drupal. &#8221; Anatomy of a Drupal 6 theme &#8221;<br \/>\n<a href=\"\" target=\"_blank\">http:\/\/drupal.org\/node\/171194<\/a><\/p>\n<p><b>un exemple de code source du fichier <code>page.tpl.php<\/code> du th\u00e8me ZEN<\/b><\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n\t&lt;!DOCTYPE html PUBLIC &quot;-\/\/W3C\/\/DTD XHTML 1.0 Strict\/\/EN&quot; &quot;http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-strict.dtd&quot;&gt;\r\n\t&lt;html xmlns=&quot;http:\/\/www.w3.org\/1999\/xhtml&quot; lang=&quot;&lt;?php print $language ?&gt;&quot; xml:lang=&quot;&lt;?php print $language ?&gt;&quot;&gt;\r\n\r\n\t&lt;head&gt;\r\n\t  &lt;title&gt;&lt;?php print $head_title ?&gt;&lt;\/title&gt;\r\n\t  &lt;?php print $head ?&gt;\r\n\t  &lt;?php print $styles ?&gt;\r\n\t  &lt;?php print $scripts ?&gt;\r\n\t  &lt;script type=&quot;text\/javascript&quot;&gt;&lt;?php \/* Needed to avoid Flash of Unstyle Content in IE *\/ ?&gt; &lt;\/script&gt;\r\n\t&lt;\/head&gt;\r\n\r\n\t&lt;body&gt;\r\n\r\n\t&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; id=&quot;header&quot;&gt;\r\n\t  &lt;tr&gt;\r\n\t    &lt;td id=&quot;logo&quot;&gt;\r\n\t      &lt;?php if ($logo) { ?&gt;&lt;a href=&quot;&lt;?php print $base_path ?&gt;&quot; title=&quot;&lt;?php print t(&#x27;Home&#x27;) ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php print $logo ?&gt;&quot; alt=&quot;&lt;?php print t(&#x27;Home&#x27;) ?&gt;&quot; \/&gt;&lt;\/a&gt;&lt;?php } ?&gt;\r\n\t      &lt;?php if ($site_name) { ?&gt;&lt;h1 class=&#x27;site-name&#x27;&gt;&lt;a href=&quot;&lt;?php print $base_path ?&gt;&quot; title=&quot;&lt;?php print t(&#x27;Home&#x27;) ?&gt;&quot;&gt;&lt;?php print $site_name ?&gt;&lt;\/a&gt;&lt;\/h1&gt;&lt;?php } ?&gt;\r\n\t      &lt;?php if ($site_slogan) { ?&gt;&lt;div class=&#x27;site-slogan&#x27;&gt;&lt;?php print $site_slogan ?&gt;&lt;\/div&gt;&lt;?php } ?&gt;\r\n\t    &lt;\/td&gt;\r\n\t    &lt;td id=&quot;menu&quot;&gt;\r\n\t      &lt;?php if (isset($secondary_links)) { ?&gt;&lt;?php print theme(&#x27;links&#x27;, $secondary_links, array(&#x27;class&#x27; =&gt;&#x27;links&#x27;, &#x27;id&#x27; =&gt; &#x27;subnavlist&#x27;)) ?&gt;&lt;?php } ?&gt;\r\n\t      &lt;?php if (isset($primary_links)) { ?&gt;&lt;?php print theme(&#x27;links&#x27;, $primary_links, array(&#x27;class&#x27; =&gt;&#x27;links&#x27;, &#x27;id&#x27; =&gt; &#x27;navlist&#x27;)) ?&gt;&lt;?php } ?&gt;\r\n\t      &lt;?php print $search_box ?&gt;\r\n\t    &lt;\/td&gt;\r\n\t  &lt;\/tr&gt;\r\n\t  &lt;tr&gt;\r\n\t    &lt;td colspan=&quot;2&quot;&gt;&lt;div&gt;&lt;?php print $header ?&gt;&lt;\/div&gt;&lt;\/td&gt;\r\n\t  &lt;\/tr&gt;\r\n\t&lt;\/table&gt;\r\n\t\r\n\t<!-- to be continued -->\r\n\t\r\n\t\r\n\t&lt;?php if ($closure_region): ?&gt;\r\n      &lt;div id=&quot;closure-blocks&quot;&gt;&lt;?php print $closure_region; ?&gt;&lt;\/div&gt;\r\n    &lt;?php endif; ?&gt;\r\n\r\n    &lt;?php print $closure; ?&gt;\r\n\r\n  &lt;\/div&gt;&lt;\/div&gt; &lt;!-- \/#page-inner, \/#page --&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;&lt;?php if ($closure_region): ?&gt;\r\n\r\n\t\r\n<\/pre>\n<h4>Cr\u00e9er un fichier CSS style.css<\/h4>\n<p>Il vous restera \u00e0 cr\u00e9er un fichier CSS dans votre r\u00e9pertoire de th\u00e8me pour peaufiner l&#8217;affichage. Pour information, voici un extrait de la css du th\u00e8me <code>zen<\/code><\/p>\n<pre lang=\"css\">\r\n\t\/* $Id: zen.css,v 1.1.2.27 2008\/09\/14 09:28:14 johnalbin Exp $ *\/\r\n\r\n\t\/*\r\n\t * ZEN STYLES\r\n\t *\r\n\t * This is an example stylesheet. Sub-themes should NOT include the zen\/zen.css\r\n\t * file, but instead copy this CSS to their own stylesheets.\r\n\t *\r\n\t * In this stylesheet, we have included all of the classes and IDs from this\r\n\t * theme's tpl.php files. We have also included many of the useful Drupal core\r\n\t * styles to make it easier for theme developers to see them.\r\n\t *\r\n\t * Many of these styles are over-riding Drupal's core stylesheets, so if you\r\n\t * remove a declaration from here, the styles may still not be what you want\r\n\t * since Drupal's core stylesheets are still styling the element. See the\r\n\t * drupal5-reference.css file for a list of all Drupal 5.x core styles.\r\n\t *\r\n\t * In addition to the style declarations in this file, other Drupal styles that\r\n\t * you might want to override or augment are those for:\r\n\t *\r\n\t *   Book Navigation  See line 74  of Zen's drupal5-reference.css file\r\n\t *   Forum            See line 197 of Zen's drupal5-reference.css file\r\n\t *   Menus            See line 667 of Zen's drupal5-reference.css file\r\n\t *   News Aggregator  See line 20  of Zen's drupal5-reference.css file\r\n\t *   Polls            See line 287 of Zen's drupal5-reference.css file\r\n\t *   Search           See line 320 of Zen's drupal5-reference.css file\r\n\t *   User Profiles    See line 945 of Zen's drupal5-reference.css file\r\n\t *\/\r\n\r\n\r\n\t\/** body **\/\r\n\t  body\r\n\t  {\r\n\t    margin: 0;\r\n\t    padding: 10px;\r\n\t  }\r\n\r\n\t  #page\r\n\t  {\r\n\t  }\r\n\r\n\t  #page-inner\r\n\t  {\r\n\t  }\r\n\r\n\t\/** header **\/\r\n\t  #header\r\n\t  {\r\n\t  }\r\n\r\n\t  #header-inner\r\n\t  {\r\n\t  }\r\n\r\n\t  #logo-title \/* Wrapper for logo, website name, and slogan *\/\r\n\t  {\r\n\t  }\r\n\t\/* to be continued *\/\r\n<\/pre>\n<h2>Pour aller plus loin<\/h2>\n<ul>\n<li>Un tr\u00e8s bonne article sur la mise \u00e0 jour des themes drupal quant on passe de 5 \u00e0 6.<br \/>\n\t<em>Converting 5.x themes to 6.x<\/em><br \/>\n\t<a href=\"http:\/\/drupal.org\/node\/132442\" target=\"_blank\">http:\/\/drupal.org\/node\/132442<\/a><\/li>\n<li>Structure of the .info file<br \/>\n\t\t<a href=\"http:\/\/drupal.org\/node\/171205\" target=\"_blank\">http:\/\/drupal.org\/node\/171205<\/a><\/li>\n<li>Cobra \/ Exub\u00e9rance \/ F\u00e9rocit\u00e9<br \/>\n\t\t\tL&#8217;image qui appara\u00eet en fond sous le logo drupal<br \/>\n\t\t\t<em>Les principaux artistes du mouvement Cobra sont Karel Appel. Asger Jorn. Pierre Alechinsky. Corneille. Constant. Nyholm. Egill Jacobsen. Christian Dotremont. Noiret. Pederson. Ejler Bille.<\/em><br \/>\n\t\t<a href=\"http:\/\/gilbert-arts.blogspot.com\/2006\/12\/cobra-exubrance-frocit.html\" target=\"_blank\">http:\/\/gilbert-arts.blogspot.com\/2006\/12\/cobra-exubrance-frocit.html<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Dans un article pr\u00e9c\u00e9dent, on avait une m\u00e9thode simple, efficace mais finalement assez risqu\u00e9e de cr\u00e9er un th\u00e8me sur Drupal en d\u00e9tournant un th\u00e8me existant.<\/p>\n","protected":false},"author":1,"featured_media":9473,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"Cr\u00e9er un th\u00e8me Drupal 6.x avec les bonnes pratiques. Utilisez les outils ad\u00e9quats pour un th\u00e8me performant et maintenable.","bf_ai_og_title":"Th\u00e8me Drupal 6.x : bonnes pratiques","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3444,3451,3435,3452],"tags":[2221,204,2225,205,2211,206,207,126,2198],"class_list":["post-800","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming-databases","category-web-design-front-end","category-web-development","category-wordpress-cms","tag-cms","tag-cobra","tag-drupal","tag-drupal-6x","tag-mysql","tag-phptemplate","tag-pratiques","tag-theme","tag-webdesign-responsive-agile"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-cU","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2010\/02\/drupal_generic_g_bf.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=800"}],"version-history":[{"count":2,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/800\/revisions"}],"predecessor-version":[{"id":10183,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/800\/revisions\/10183"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/9473"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}