Traduction de la page http://drupal.org/theme-guide/6-7
publiée / actualisée le 20 Mars 2011 sur drupal.org
Plusieurs modifications dans le système de thèmes, entre Drupal 6 et 7, ont eu lieu. Ce guide contient des informations pour les deux versions.
Bartik est le thème par défaut pour Drupal 7, Garland est celui par défaut pour Drupal 6.
Remarque : toutes les infos concernant Drupal 7 n'ont pas été actualisées, mais elles sont ajoutées au fur et à mesure.
Traduction de la page
http://drupal.org/node/337173
publiée/actualisée le 20 Mars 2011 sur drupal.org
Les pages de cette section expliquent comment fonctionne le système de thèmes de Drupal, les composants et paramètres des thèmes, les fichiers .info et les fichiers maquettes ( page templates). Cette section est le point de départ pour la création d'un thème personnalisé.
Traduction de la page http://drupal.org/node/171194
publiée / actualisée le 2 Avril 2011 sur drupal.org
Un thème est un ensemble de fichiers qui définit la mise en page du site. Vous pouvez également créer un ou plusieurs « sous-thèmes », ou variations à partir d'un thème. Le seul fichier obligatoire est le fichier .info, mais beaucoup de thèmes et sous-thèmes utiliseront d'autres fichiers.
Le schéma qui suit illustre les fichiers présents dans un thème ou sous-thème type :
Tout ce qui nécessaire à Drupal pour voir votre thème doit être référencé dans le fichier .info.
Si le thème en a besoin, les meta data, les feuilles de styles, le code Javascript, les régions, etc, doivent être spécifiés dans ce fichier. Tout le reste est facultatif.
Le nom « interne » du thème découle également de ce fichier. Par exemple, si le fichier est nommé « drop.info » alors, pour Drupal, le nom du thème sera « Drop ».
Drupal 5 et antérieurs utilisaient comme nom de thème, le nom du dossier où est enregistré le thème.
Les fichiers .info pour les thèmes est une nouveauté de Drupal 6. Dans la version 5, les fichiers .info étaient seulement utilisés par les modules.
Ces gabarits sont utilisés pour le balisage xHTML et pour les variables PHP. Dans certains cas ils peuvent fournir d'autres types de données, comme du rss xml par exemple. Chaque fichier .tpl.php gère l'affichage des données qui peuvent être spécifiquement mises en page ou stylisées et dans certains cas, plusieurs fichiers .tpl.php peuvent être gérés par le biais de suggestions (http://drupal.org/node/223440 (anglais), traduction en français ici).
Ces fichiers sont facultatifs, si votre thème n'en possède pas c'est l'affichage par défaut qui sera utilisé. Évitez toute structure complexe ou programmatique dans ces fichiers, ils ne devraient contenir que du balisage xHTML et des variables PHP.
Vous trouverez des exemples de ces fichiers .tpl.php dans les dossiers des modules installés.
Les copier dans votre dossier de thèmes forcera Drupal à utiliser votre version.
Remarque : le registre des thèmes place les informations sur les thèmes disponibles en cache. Vous devez vider ce cache chaque fois que vous modifiez votre fichiers de thèmes.
Pour tout ce qui concerne les tests et le traitement des données, vous utiliserez le fichier template.php. Il n'est pas indispensable mais afin de ne pas alourdir les fichiers.tpl.php on l'utilise pour les fonctions de pré-traitement , la génération des variables avant qu'elles ne soient fusionnées dans les fichiers tpl.php.
Les fonctions personnalisées, la surcharge des fonctions de thèmes, ou toute autre personnalisation de l'affichage doit être faite dans ce fichier.
Il débute par la balise d'ouverture PHP <?php, la balise de fermeture n'est pas nécessaire et il est même recommandé de ne pas la mettre.
A première vue, les sous-thèmes se comportent comme n'importe quel autre thème. La seule différence est qu'ils héritent des ressources de leurs thèmes-parent.
Pour créer un sous-thème, un paramètre « base theme » doit être spécifié dans le fichier .info. A ce moment, ils héritent des ressources de leur thème-parent.
Il peut y avoir plusieurs niveaux d'héritage. Un sous-thème peut, par exemple, déclarer un autre sous-thème comme base de départ. Il n'y a pas de limite matérielle à ces enchainements.
Drupal 5 et antérieurs nécessitaient que les sous-thèmes soient enregistrés dans un sous-dossier du thème-parent. Ce n'est désormais plus nécessaire.
Le logo et la copie d'écran de votre thème ne sont pas obligatoires pour que le thème fonctionne. Mais ils sont recommandés, surtout si vous distribuez votre thème dans un dépôt Drupal
La copie d'écran est affichée dans la page d'administration des thèmes et dans la page « Paramètres du compte utilisateur » pour que ce dernier puisse choisir un thème (s'il dispose des permissions requises). Reportez-vous à Screenshot guidelines pour plus d'information.
Un fichier « theme-settings.php » peut être utilisé pour fournir des paramètres d'administration autres que ceux concernant le logo, la recherche, la mission, etc.
Il s'agit d'une fonctionnalité avancée. Reportez-vous à la page Advanced settings du manuel pour plus d'informations.
Pour l'utilisation du module « Color », un dossier « color » contenant un fichier « color.inc » est requis, ainsi que plusieurs fichiers de paramètres.
Si vous voulez baser votre travail sur un thème du core, utilisez des sous-thèmes ou faites une copie du thème principal et renommez-le. La modification des thèmes Garland ou Minnelli est fortement déconseillée car ils sont utilisés pour les procédures d'installation ou de mise à jour.
Tous les modifications des thèmes doivent être installés dans le dossier sites/all/themes, afin de les séparer des fichiers du core. Si vous prévoyez de faire tourner plusieurs sites à partir d'une seule installation de Drupal, vous pouvez rendre un thème disponible pour un seul site plutôt que pour l'ensemble des sites.
Reportez-vous à Multi-site installation pour plus d'informations.
Traduction de la page http://drupal.org/node/225125
publiée / actualisée le 11 Mars 2011 sur Drupal.org
Les sous-thèmes sont identiques aux autres thèmes, à une différence près : ils héritent des ressources de leurs thèmes parents. Il n'y a pas de limite au nombre de sous-thèmes qui peuvent dériver les uns des autres à partir du thème-parent.
Un sous-thème peut être l'enfant d'un autre sous-thème, et il peut être ramifié ou organisé comme bon vous semble. Ce qui offre de grandes possibilités :
Supposons que vous démarriez en créant un thème global qui servira de maquette de base, les détails pourront ensuite être affinés dans un sous-thème. Ainsi, à partir d'une même base de départ, vous pouvez essayer différents designs en dérivant un ou plusieurs sous-thèmes à partir de ce thème de base.
Vous travaillez sur une installation multi-site mais avez besoin d'un "look and feel" cohérent ? Avec des sous-thèmes beaucoup de ressources graphiques peuvent être partagées. Les particularités d'un site peuvent être paramétrées dans un sous-thème spécifique, et si les ressources partagées doivent être modifiées, elles ne le sont qu'une seule fois et s'appliquent à toutes les installations. Avec une organisation soignée, les possibilités sont infinies.
Le sous-thème doit se trouver dans son propre dossier sur le disque. Avant Drupal 6, le dossier devait être un sous-dossier du thème parent. Dans Drupal 6 et 7 il peut être situé à l'extérieur du dossier du thème parent.
Pour que votre thème soit considéré comme le thème enfant d'un thème parent, vous devez modifier le fichier .info. Ajoutez les lignes suivantes au fichier .info du sous-thème pour déclarer son thème parent. Remplacez themeName par le nom interne du thème parent (c'est à dire le nom qui se trouve dans le fichier .info du thème parent).
Toutes les feuilles de style déclarées dans le thème parent seront héritées, tant que vous déclarez au moins une feuille de style dans le fichier .info de votre sous-thème. Vous devez déclarer au moins une feuille de style dans votre sous-thème pour hériter des feuilles de style du thème parent.
Surcharger les feuilles de style héritées: déclarez une feuille de style dans le sous-thème avec le même nom. Par exemple, pour surcharger style.css héritée d'un thème parent, ajoutez la ligne suivante dans le fichier .info du sous-thème :
Vous devrez aussi créer le fichier pour style.css; si vous voulez seulement désactiver les styles importés, créez un fichier vide.
Tous les fichiers JavaScripts déclarés dans le thème parent seront hérités.
Surcharger le JavaScript hérité : déclarez un fichier JavaScript avec le même nom dans le fichier .info. Par exemple, pour surcharger script.js hérité du thème parent, ajoutez la ligne suivante au fichier .info du sous-thème :
Vous devrez aussi créer le fichier script.js; si vous voulez simplement désactiver le script hérité, créez un fichier vide.
Tout ce qui a été déclaré dans le fichier template.php du thème parent sera hérité. Cela concerne la surcharge des fonctions, les fonctions de pré-traitement et tout le reste dans ce fichier. Chaque sous-thème doit aussi avoir son propre fichier template.php, dans lequel vous pouvez ajouter d'autres fonctions ou surcharger des fonctions du thème parent.
Surcharger les fonctions héritées de template.php: dans le fichier template.php du sous-thème, vous pouvez redéclarer des fonctions du fichier template.php parent (en utilisant le nom de votre sous-thème comme préfixe de fonction) pour surcharger des fonctions en particulier. On ne peut pas éviter l'héritage global de toutes les fonctions du thème parent.
Drupal 7 : tout fichier .tpl.php du thème parent sera hérité. Vous pouvez ajoutez des fichiers gabarits plus spécifiques - comme node--blog.tpl.php construit sur la base d'un node.tpl.php hérité.
Un trait d'union simple est toujours utilisé pour séparer les mots: par exemple, user-picture.tpl.php ou node--long--content-type-name.tpl.php, les doubles traits d'union signalent toujours une surcharge plus ciblée de ce qui précède le --. Consultez Conversion de thèmes Drupal 6.x en thèmes Drupal 7.x pour d'autres infos.
Drupal 6 : tout fichier .tpl.php du thème parent sera hérité. Cependant, pour ajouter des maquettes de mise en page plus ciblées, vous devez aussi copier manuellement le fichier de mise en page général du thème parent. Par exemple, pour ajouter un fichier gabarit node-blog.tpl.php dans un sous-thème, vous devez aussi copier le node.tpl.php du thème parent. Ce bug a été corrigé dans Drupal 7 mais ne sera pas corrigé dans Drupal 6.
Surcharger les fichiers .tpl.php hérités : pour surcharger le fichier gabarit du thème parent, ajoutez dans votre sous-thème un fichier gabarit portant le même nom.
La copie d'écran du thème parent sera héritée. Le logo du thème parent (logo.png/logo.jpg) ne sera pas héritée.
Surcharger la copie d'écran héritée: déclarez une nouvelle image dans le fichier .info de votre sous-thème.
Les sous-thèmes n'héritent pas des regions personnalisées du thème parent. Si vous utilisez des régions personnalisées, vous devrez copier la déclaration des régions du fichier .info parent. Assurez-vous que le fichier page.tpl.php correspond bien au paramétrage des régions du sous-thème.
Le support du module Color du dossier color n'est pas hérité.
Les paramètres de thème configurés via les paramètres avancés de thème de theme-setting.php ne sont pas hérités.
Traduction de la page http://drupal.org/node/171205
publiée / actualisé le 11 Mars 2011 sur drupal.org
La syntaxe du fichier .info est similaire à celle des fichiers INI (http://fr.wikipedia.org/wiki/Fichier_INI).
Le fichier .info est en fait un simple fichier texte qui décrit la configuration de chaque thème. Chacune de ses lignes est constituée par un couple clé+valeur dans laquelle la clé se trouve à gauche et la valeur à droite, avec un signe égal entre les deux (exemple : key = value).
Les points-virgules sont utilisés pour signaler les lignes de commentaires. Certaines clés utilisent une syntaxe particulière avec des crochets ouvrants et fermants pour la déclaration de listes de valeurs associées, également appelées « tableaux » (arrays). Si vous n'êtes pas familiarisés avec les tableaux, les exemples contenus dans le fichier .info et les explications qui suivent vous éclaireront.
Le nom du thème doit débuter par un caractère alphabétique, il peut contenir des chiffres et des signes souligné, mais pas de tirets, d'espaces ou de la ponctuation. Le nom sera utilisé par Drupal pour la formation de différentes fonctions PHP et aura par conséquent les mêmes restrictions. Attention ! Ne choisissez pas le même nom qu'un module, puisque les noms des modules installés doivent être uniques. Utiliser un préfixe qui sera unique pour les thèmes créés localement est une bonne idée. Un site exemple.com pourrait appeler ses thèmes ex_themename.
Comme le fichier .info est mis en cache, vous devez vider le cache pour que les modifications soient visibles dans votre site.
Le fichier .info peut également déclarer les paramètres de thème qui seront accessibles via l'interface d'administration, comme vous le verrez bientôt.
Drupal comprend les clés énumérées ci-dessous. Il utilisera des valeurs par défaut (http://drupal.org/node/171206, traduction en français : http://www.kolossaldrupal.org/docs/valeurs-info-par-defaut) pour les clés facultatives qui ne sont pas mentionnées dans le fichier .info. Reportez-vous aux exemples pour les thèmes principaux (http://drupal.org/node/171205#example, en français : http://www.kolossaldrupal.org/docs/structure-fichier-info)
Un nom en clair, compréhensible pour tout un chacun. Il peut désormais être différent du nom « interne ». Ce qui allège les restrictions concernant les caractères autorisés.
Une courte description du thème. Elle apparaît dans la page de sélection de thèmes, dans Administrer » Construction du site » Themes.
La clé screenshot (facultative) indique à Drupal où trouver la miniature du thème, cette miniature utilisée dans la page de sélection du thème (Administrer » Construction du site » Thèmes).
Si la clé est omise, Drupal utilise le fichier « screenshot.png » du dossier du thème.
N'utilisez cette clé que si votre miniature n'est pas nommée « screenshot.png », ou si vous l'avez placée dans un dossier externe à votre dossier du thème (par exemple : screenshot = images/screenshot.png)
La chaîne version sera automatiquement ajoutée par Drupal.org quand une release est créée et un tarball empaqueté. Vous pouvez donc omettre cette valeur pour les thèmes mis à disposition de la communauté.
Mais si votre thème n'est pas hébergé par Drupal.org, vous pouvez donner n'importe quelle valeur à cette clé, du moment qu'elle vous semble parlante.
A partir de la version 6,x, tous les fichiers .info des modules et des thèmes doivent mentionner avec quelle version majeure de Drupal ils sont compatibles. La valeur indiquée est comparée avec la constante DRUPAL_CORE_COMPATIBILITY. Si elles ne correspondent pas, le thème sera désactivé.
Le script d'empaquetage renseigne automatiquement cette valeur basée sur le paramètre de compatibilté du core Drupal. Ainsi, les personnes qui téléchargent des thèmes depuis drupal.org obtiendront toujours la bonne version.
Cependant, pour les sites qui déploient Drupal directement à partir du CVS, il est utile d'indiquer cette modification dans le fichier .info de votre thème. C'est également une bonne chose de signaler aux utilisateurs de chaque thème quelle version du core de HEAD (http://drupal.org/handbook/cvs/introduction#HEAD) du CVS est compatible.
The drupal.org packaging script automatically sets this value based on the Drupal core compatibility setting on each release node. So people downloading packaged themes from drupal.org will always get the right thing. However, for sites that deploy Drupal directly from CVS, it helps if you commit this change to the .info file for your theme. This is also a good way to indicate to users of each theme what version of core the HEAD of CVS is compatible with at any given time.
Le moteur de template utilisé par le thème. Si rien n'est précisé, le thème est censé être autonome, c'est à dire mis en œuvre avec un fichier .theme. De nombreux thèmes utilisent PHPtemplate comme moteur par défaut.
Le travail de PHPTemplate consiste à déterminer les fonctions du thème, ses gabarits, pour son comportement. Omettez cette entrée si vous savez ce que vous faites.
Les sous-thèmes peuvent déclarer leur thème parent. Cette déclaration permet l'héritage des ressources du thème parent et leur réutilisation dans le sous-thème. Les sous-thèmes peuvent déclarer d'autres sous-thèmes comme thème parent, permettant ainsi plusieurs niveaux d'héritage. Utilisez le nom « machine » interne du thème de base.
L'exemple qui suit est utilisé pour Minnelli, un sous-thème de Garland :
D'autres détails sont disponibles dans les pages Sous-thèmes, leur structure et l'héritage.
Les blocs regions disponibles pour un thème sont définis en spécifiant la clé regions suivie du nom « machine » interne entouré de crochets, et en spécifiant le nom convivial comme valeur.
Par exemple : regions[theRegion] = The region name
Régions par défaut pour Drupal 6 :
Régions par défaut pour Drupal 7 :
Vous pouvez surcharger ces valeurs pour vos propres besoins.
Plus de détails sont disponibles sur la page Attribution de contenu aux régions.
Sur la page de configuration du thème, l'affichage des différents éléments gérés peut être activé ou désactivé. La clé features indique les cases à cocher qui seront utilisées à cette fin dans la page de configuration. C'est utile pour supprimer les cases à cocher des éléments non définis ou inutilisés par le thème .
Pour supprimer une case à cocher, omettez sa valeur. Mais, si aucune valeur n'est spécifiée, toutes les cases à cocher seront affichées, puisque c'est le comportement du paramétrage par défaut.
L'exemple qui suit énumère tous les éléments disponibles contrôlés par la clé features.
Features Drupal 6
En mettant primary_links et secondary_links en commentaires, leurs cases à cocher sont supprimées et ne ne seront pas visibles par les administrateurs du site :Features Drupal 7
Plus de détails sont disponibles sur la page Custom theme settings .
Traditionnellement, les thèmes utilisent par défaut une feuille de style nommée style.css. Des feuilles de style supplémentaires peuvent être ajoutées en appelant la fonction drupal_add_css() dans le fichier template.php. Depuis la version 6, on peut aussi ajouter des feuilles de styles via le fichier .info.
A partir de Drupal 7, les thèmes n'utilisent plus par défaut le fichier style.css s'il n'est pas déclaré dans le fichier .info.
Plus de détails sont disponibles dans la section style sheets (http://www.kolossaldrupal.org/docs/ajouter-feuilles-de-style).
Traditionnellement, les thèmes utilisant du code JavaScript ajoutait ce code en appelant la fonction drupal.add_js() dans le fichier template.php.
Depuis la version 6, s'il existe un fichier nommé script.js dans le dossier du thème il est automatiquement inclus.
Cependant, dans Drupal 7, ce comportement a été modifié et script.js n'est inclus que s'il a été déclaré dans le fichier .info.
Les thèmes peuvent également ajouter du code JavaScript spécifique en ajoutant ces lignes dans le fichier .info :
Plus de détails sont disponibles dans la section JavaScript & jQuery (http://drupal.org/node/171213).
Cette clé définit la version minimale de PHP supportée par le thème. La valeur par défaut dépend de la constante DRUPAL_MINIMUM_PHP, qui est la version minimum requise pour le reste du core. Elle peut être redéfinie si une nouvelle version est nécessaire. Pour beaucoup de thèmes cette clé ne devrait pas être ajoutée.
Garland :
Minnelli, sous-thème de Garland :
Notez que chaque élément des lignes « ; Information added by drupal.org packaging script on 2008-02-13 » et suivantes est ajouté par le script d'empaquetage de Drupal.org. Vous ne devez pas ajouter manuellement les clés project et datestamp. La clé version ajoutée manuellement (dans la première section) autorise les sites à utiliser votre thème lorsqu'il est pris directement depuis le CVS.
Traduction de la page http://drupal.org/node/171206
publiée / actualisée le 11 Mars 2011 sur Drupal.org
Les valeurs qui suivent sont des valeurs implicites, utilisées par défaut. Si elles ne sont pas déclarées, le thème les utilisera automatiquement.
Remarque : ces valeurs par défaut s'appliquent par groupes. C'est à dire que, si vous surchargez regions[sub_header] = Sub-header cela désactivera les autres valeurs par défaut du groupe régions. Pour les récupérer, vous devrez les redéclarer.
Cela concerne également les feuilles de style. Bien qu'une feuille de style ne soit pas, techniquement parlant, dans un groupe, si vous déclarez une feuille de style, la feuille de style par défaut (« style.css ») ne sera pas utilisée, à moins que vous ne la spécifiez explicitement.
regions
Drupal 6
Drupal 7
features
Drupal 6
Drupal 7
screenshot
Stylesheets et JavaScript
Les fichiers style.css et script.js sont déclarés par défaut dans Drupal 6. Dans Drupal 7, vous devez déclarer tous les fichiers CSS et JavaScript que le thème utilisera.
scripts
php (minimum support)
DRUPAL_MINIMUM_PHP est une constante. Elle indique la version minimum de PHP requise pour le fonctionnement du core de Drupal.
Traduction de la page http://drupal.org/node/171224
publiée/actualisée le 25 Mars 2011 sur Drupal.org.
Les regions sont des zones de votre thème qui recoivent des blocs et du contenu.
Les regions disponibles pour un thème sont indiquées dans le fichier .info. Elles doivent être spécifiées avec la clé regions suivie du nom machine de la région entre crochets et du nom compréhensible comme valeur. Par exemple : regions[theRegion] = Le nom de ma région .
Si aucune region n'est déclarée, ce sont les valeurs par défaut qui sont utilisées.
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
Drupal 7 amène avec lui deux régions par défaut : Highlighted et Help. Par défaut, le contenu texte de cette région est le même que celui de la variable $help dans page.tpl.php de Drupal 6.
Le thème Drupal 7 Bartik dispose des régions par défaut suivantes :
Ayez à l'esprit que le nom interne est automatiquement converti en variable region dans le fichier gabarit page.tpl.php. Dans l'exemple précédent, la region [left] affichera tous les blocs qui lui sont affectés par le biais de la variable $left. Il y a quelques contraintes pour le nommage des variables PHP, assurez-vous que les noms internes les respectent. Ils doivent seulement contenir des caractères alphanumériques ou le signe souligné et doivent débuter par une lettre.
Le nom compréhensible mentionné comme valeur, à l'extérieur des crochets, est utilisé pour l'intitulé de la région dans la page d'administration des blocs située dans Administrer » Construction du site »Blocs. Dans Drupal 7, la paghe d'administration des blocs est située dans Administer > Structure > Blocks.
Voici la page d'administration des blocs pour Garland :
Drupal 7 - Tableau d'administration de blocs pour Bartik :
Quelques remarques :
Pour vider le cache, faites l'une des opérations suivantes :
Informations de mises à jour :
Dans Drupal 6 et avant, la variable $content de page.tpl.php contenait le contenu principal de la page avec les blocs positionnés dans la region contenu (si cette region était déclarée).
Dans Drupal 7, $content est devenu une région à part entière et est désormais obligatoire dans tous les thèmes. Cette nouvelle exigence a été mise en place pour que lorsqu'on active des nouveaux thèmes, Drupal sache où mettre le contenu principal de la page.
Dans Drupal 6, il n'était possible que de mettre les blocs après le contenu principal de la page dans cette région. La seule façon de mettre les blocs avant le contenu principal de la page était de déclarer une région spécifique à cette fin. Drupal 7 crée maintenant son propre bloc pour le contenu principal de la page. Il est ainsi possible de mettre des blocs avant ou après le contenu principal de la page dans la region sans avoir à hacker une nouvelle région.
Un contenu peut être manuellement placé dans une région avec drupal_set_content (http://api.drupal.org/api/function/drupal_set_content). Par exemple : drupal_set_content('header', 'Bienvenue !') affectera le texte « Bienvenue ! » à la région Header.
Voici un exemple plus utile pour la construction d'un résumé de tous les commentaires dans la région Right. Renommez le préfixe « drop » avec le nom de votre thème. Plus d'informations disponibles sur la page consacrée aux pré-traitements (http://www.kolossaldrupal.org/docs/initialisation-variables-pour-leur-utilisation-dans-gabarit-fonctions-de-pre-traitement)
<?php
function drop_preprocess_comment(&$variables) {
// Initialiser quelques variables.
$comment = $variables['comment'];
$title = l(
$comment->subject,
comment_node_url(),
array('fragment' => "comment-$comment->cid")
);
$new_marker = $comment->new ? t('new') : '';
$by_line = t('by') .' '. theme('username', $comment);
// Placer le balisage.
$summary = '<div class="comment-sidebar">';
$summary .= '<span class="title">' . "$title $new_marker</span>";
$summary .= '<span class="credit">' . "$by_line</span>";
$summary .= '</div>';
// Placer le commentaire dans la région droite.
drupal_set_content('right', $summary);
}
?>
Notez que la création de contenu par le biais de cette fonction doit se faire avant que les blocs des regions ne soient récupérés, et cela se fait par un appel à template_preprocess_page > theme_blocks > drupal_get_content.
Traduction de la page http://drupal.org/node/517696
publiée / actualisée le 11 Mars 2011 sur drupal.org
Lorsqu'on personnalise page.tpl.php, il est possible de vérifier si une région est vide, en vérifiant le contenu de la variable correspondante qui contient les contenus de la région.
Par exemple :
Drupal 6
<?php
if($left) {
// do something
}
?>Drupal 7
<?php
if($page['sidebar_first']) {
// do something
}
?>Cependant, les variables region n'ont pas été déclarées pour les gabarits au niveau bloc, node et view..
Pour régler cette question, j'ai adapté une partie du code de block.module pour créer une fonction qui peut être insérée dans le fichier template.php de votre thème (c'est l'auteur de l'article original qui parle, pas kolossaldrupal).
La fonction prend un paramètre (un nom de région), et renvoie 1 si la région est vide ou 0 si elle est occupée. La fonction tient compte du path en cours et des paramètres de visibilité des blocs.
<?php
function region_empty($test_region) {
/* Vérifie si une région est occupée
* renvoie 1 si elle est vide
*/
$test_empty = 1;
$result = db_query_range('SELECT n.pages, n.visibility FROM {blocks} n WHERE n.region="%s" AND n.theme="%s"', $test_region, $GLOBALS['theme'], 0, 10);
if (count($result) > 0) {
while ($node = db_fetch_object($result))
{
if ($node->visibility < 2) {
$path = drupal_get_path_alias($_GET['q']);
// Compare avec le chemin interne et l'alias de path (s'il y en a).
$page_match = drupal_match_path($path, $node->pages);
if ($path != $_GET['q']) {
$page_match = $page_match || drupal_match_path($_GET['q'], $node->pages);
}
// Lorsque $block->visibility a la valeur 0, le bloc est affiché sur
// toutes les pages sauf celles répertoriées dans $block->pages. Lorsque la valeur est à 1, il
// n'est affiché que dans les pages répertoriées dans $block->pages.
$page_match = !($node->visibility xor $page_match);
} else {
$page_match = drupal_eval($block->pages);
}
if ($page_match)
$test_empty = 0;
}
}
return $test_empty;
}
?>Traduction de la page http://drupal.org/node/221905
publiée / actualisée le 17 Mars 2011 sur drupal.org
Un certain nombre d'éléments affichés par le thème peuvent être activés ou désactivés dans la page de configuration de thème.
Vous trouverez ces paramètres dans Administer > Appearance > Settings > themeName. Par exemple, le slogan du site peut être supprimé en décochant la case Site slogan de cette page.
[inline:features_enabled_7.png]L'affichage de ces cases à cocher dépend des paramètres du fichier .info. Ils sont déclarés avec la clé features suivie de double crochets vides et du paramètre proprement dit, par exemple, features[] = le paramètre. Si aucun paramètre n'est déclaré, les valeurs suivantes sont utilisées par défaut :
Drupal 7 enlève mission et recherche comme paramètres de thèmes (ils peuvent désormais être créés et contrôlés en tant que blocs) et ajoute un bouton radio pour User verification status in comments.
Pour ne désactiver que quelques paramètres, il suffit d'ajouter ceux que vous souhaitez dans le fichier .info. Ne déclarer que les paramètres nécessaires pour votre thème désactivera les autres. Certains paramètres activeront également des champs de formulaires associés. Par exemple, logo activera un champ d'upload pour l'image.
Quelques remarques :
Le contenu du fichier .info est mis en cache dans la base de données, sa modification ne sera pas remarquée par Drupal (ne pas confondre le cache avec le registre des thèmes http://www.kolossaldrupal.org/docs/la-surcharge-themes#theme-registry).
Pour vider le cache, faites l'une des opérations suivantes :
Dans Drupal 6, les paramètres sont situés dans Administrer » Construction du site » Thèmes » Nom du thème
Voici les valeurs par défaut dans Drupal 6 :
Traduction de la page http://drupal.org/node/177868
publiée/actualisée le 11 Mars 2011 sur Drupal.org
Drupal 6
Dans la partie Administration de Drupal, chaque thème dispose de sa propre page de paramétrage dans Administration » Construction du site > Thèmes > Paramètres puis Nom du thème (ou admin/build/themes/settings/themeName). Et cette page affiche un formulaire avec des paramètres standards des thèmes, tels que « Paramètres du logo > et « Paramètres de l'icône >.
Drupal 7
Drupal 7 utilise admin/appearance//settings/themeName.
Dans Drupal 6 et au-delà, les créateurs de thèmes peuvent désormais personnaliser cette page en ajoutant des paramètres supplémentaires. Dans Drupal 5, les créateurs de thèmes doivent avoir installé le module Theme Settings API http://drupal.org/project/themesettingsapi (5.x-2.1 ou postérieurs) avant de pouvoir utiliser la méthode qui suit.
Tout d'abord, créez un fichier theme-settings.php dans le dossier de votre thème et déclarez-y les fonctions themeName_settings() ou themeEngineName_settings(). Un nom de fonction sur le modèle themeEngineName_settings() est déconseillé car il peut provoquer des erreurs fatales si deux fonctions avec le même nom sont déclarées dans votre installation Drupal. La fonction doit utiliser les API Forms pour créer des widgets supplémentaires.
Par exemple : pour ajouter des paramètres au thème Garland, une fonction garland_settings() ou phptemplate_settings() sera placée dans le fichier theme-settings.php du thème.
Modifier Garland ou Minnelli directement est fortement déconseillé car ces deux thèmes sont utilisés pendant l'installation de Drupal et pendant ses mises à jours.
Si un utilisateur a précédemment sauvegardé les paramètres du thème, les valeurs sauvegardées seront passées à cette fonction via le paramètre $saved_settings. Le widget à ajouter au formulaire sera retourné en tant que tableau de l'API Forms.
Les commentaires de l'exemple suivant explique les détails :
<?php
// Exemple de fichier themes/garland/theme-settings.php
/**
* Implémentation de la fonction THEMEHOOK_settings()
*
* @param $saved_settings
* array An array of saved settings for this theme.
* @return
* array A form array.
*/
function phptemplate_settings($saved_settings) {
/*
* Les valeurs par défaut pour les variables de thème. Assurez-vous que $defaults correspondent
* exactement au $defaults du fichier template.php.
*/
$defaults = array(
'garland_happy' => 1,
'garland_shoes' => 0,
);
// Fusionner les variables sauvegardées et les valeurs par défaut
$settings = array_merge($defaults, $saved_settings);
// Créer le widget en utilisant Forms API
$form['garland_happy'] = array(
'#type' => 'checkbox',
'#title' => t('Get happy'),
'#default_value' => $settings['garland_happy'],
);
$form['garland_shoes'] = array(
'#type' => 'checkbox',
'#title' => t('Use ruby red slippers'),
'#default_value' => $settings['garland_shoes'],
);
// Renvoyer le widget ajouté
return $form;
}
?>
Notez que les auteurs de thèmes peuvent créer des formulaires complexes et dynamiques en utilisant l'API Forms (auto-complétion, zones de champs extensibles) et la librairie jQuery.
Pour récupérer les paramètres dans les fichiers template.php ou .tpl.php de votre thème, il suffit d'utiliser la fonction theme_get_setting('varname'). Reportez-vous à l'API Drupal pour plus d'informations : http://api.drupal.org/api/6/function/theme_get_setting
Par exemple :
<?php
$happy = theme_get_setting('garland_happy');
?>
ou dans Drupal 7 :
<?php
$vars['happy'] = theme_get_setting('garland_happy');
?>Puisque nous ne pouvons garantir que chaque utilisateur se rendra dans la page de paramétrage du thème (Administration > Construction du site > Thèmes > Paramètres puis Nom du thème ou URL : admin/build/themes/settings/themeName), nous devons nous assurer que les valeurs par défaut de notre thème seront initialisées.
Ces variables ne sont pas initialisées tant que la page Administration > Construction du site > Thèmes > Paramètres > Nom du thème (ou admin/build/themes/settings/themeName) n'a pas été validée une première fois, nous devons donc vérifier dans notre fichier template.php si les variables sont définies ou pas.
Si elles ne le sont pas, nous devons leur affecter une valeur par défaut. Pour cela, nous prenons une des variables et vérifions si sa valeur est null. Si oui, nous sauvegardons les valeurs par défaut en utilisant variable_set() et nous forçons le rafraichissement des paramètres internes de Drupal en utilisant theme_get_setting('', TRUE).
Ajoutez le code suivant au début de votre fichier template.php :
<?php
/*
* Initialize theme settings
*/
if (is_null(theme_get_setting('garland_happy'))) { // <-- change this line
global $theme_key;
/*
* The default values for the theme variables. Make sure $defaults exactly
* matches the $defaults in the theme-settings.php file.
*/
$defaults = array( // <-- change this array
'garland_happy' => 1,
'garland_shoes' => 0,
);
// Get default theme settings.
$settings = theme_get_settings($theme_key);
// Don't save the toggle_node_info_ variables.
if (module_exists('node')) {
foreach (node_get_types() as $type => $name) {
unset($settings['toggle_node_info_' . $type]);
}
}
// Save default theme settings.
variable_set(
str_replace('/', '_', 'theme_'. $theme_key .'_settings'),
array_merge($defaults, $settings)
);
// Force refresh of Drupal internals.
theme_get_setting('', TRUE);
}
?>
Notez que le nom de la variable « garland_happy > dans la première ligne du code doit être remplacée avec le nom de variable de votre thème personnalisé et que le tableau $defaults devra être copié depuis votre fichier theme-settings.php.
Après avoir publié la version 1.0 de votre thème, vous aurez peut-être envie d'ajouter d'autres paramètres personnalisés dans la version 2.0. Le processus est le plus souvent simple. Mais attention au code d'initialisation dans la troisième étape :
<?phpif (is_null(theme_get_setting('garland_slippers'))) {?>Cela garantira que les paramètres par défaut de votre nouveau thème personnalisé seront ajoutés aux valeurs sauvegardées des paramètres personnalisés du précédent thème.
Dans Drupal 7, beaucoup plus de souplesse est donnée aux thèmes pour qu'ils modifient les paramètres de thème. Dans un fichier theme-settings.php, un thème doit maintenant utiliser une fonction THEMENAME_form_system_theme_settings_alter(&$form, $form_state). Elle donne aux thèmes la même puissance que les modules qui utilisent hook_form_system_theme_settings_alter(). Consultez le « Form API Quickstart Guide » et le « Forms API Reference » sur http://api.drupal.org/api/7, ainsi que les docs hook_form_FORM_ID_alter() pour assimiler la souplesse de Forms API. Notez que les themes ne peuvent plus utiliser le phptemplate_prefix d'une fonction, vous devrez utiliser le nom réel de votre thème en guise de prefixe.
Voici un exemple pour un thème « foo » auquel vous voulez ajouter un champ texte dont la valeur par défaut est « blue bikeshed »:
<?php
function foo_form_system_theme_settings_alter(&$form, $form_state) {
$form['caberet_example'] = array(
'#type' => 'textfield',
'#title' => t('Widget'),
'#default_value' => theme_get_setting('foo_example'),
'#description' => t("Place this text in the widget spot on your site."),
);
}
?>Pour initialiser la valeur par défaut d'un élément de formulaire que vous ajoutez, vous devrez ajouter une simple ligne à votre fichier .info : settings[SETTING_NAME] = DEFAULT_VALUE. Pour ce thème foo, vous éditerez le fichier foo.info et ajouterez cette ligne :
Vous pourrez retrouver la valeur initialisée par l'utilisateur dans n'importe quel fichier php de votre thème en appelant :
<?php
$foo_example = theme_get_setting('foo_example');
?>
Traduction de la page http://drupal.org/node/864586
publiée / actualisée le 28 Janvier 2011 sur drupal.org
Le module CSS Template permet aux concepteurs de thèmes d'ajouter aux fichiers CSS de leurs thèmes des paramètres modifiables par l'utilisateur. Ce module reposait sur le module Color.
Pour qu'un thème puisse utiliser CSS Template, l'auteur doit déclarer le fichier de configuration css_template/css_template.inc dans le dossier du thème. Un exemple de css_template.inc montrant tous les types de variables disponibles pourrait être :
<?php
$info = array(
'templates' => array(
'css_template_demo.css',
),
'variables' => array(
'site_width' => array(
'type' => 'length',
'title' => 'Site Width',
),
'banner_image' => array(
'type' => 'image',
'title' => 'Banner Image',
'maximum_dimensions' => '1200x800',
'minimum_dimensions' => '600x100',
),
'site_name_font' => array(
'type' => 'options',
'title' => 'Site Name Font',
'options' => array(
'Verdana,Arial,Helvetica,sans-serif' => 'Sans-serif',
'Georgia,"Times New Roman",serif' => 'Serif',
),
),
'site_name_font_size' => array(
'type' => 'length',
'title' => 'Site Name Font Size',
),
'site_name_color' => array(
'type' => 'color',
'title' => 'Site Name Color',
),
),
);
?>Ces variables seront affichées sur la page de configuration du thème. Une fois paramétrées, les fichiers CSS du thème déclarés comme gabarits dans le fichier css_template.inc seront actualisés avec les valeurs indiquées. Pour que cette mise à jour soit possible, des marqueurs adéquats doivent être insérés dans les fichiers CSS, sous forme de commentaires. Par exemple :
Ces marqueurs de variables doivent toujours aller par deux, le contenu intérieur étant la valeur par défaut. Les paires de marqueurs peuvent également être imbriquées, les marqueurs intérieurs n'étant évalués que si les parents n'ont pas de valeur dans la page de configuration du thème.
Les variables de type Image mettent également leurs propriétés "width" et "height" à disposition, comme indiqué dans l'exemple ci-dessus.
Ces exemples sont extraits du thème de démonstration CSS Template : http://drupal.org/project/css_template_demo.
Traduction de la page http://drupal.org/node/108459
publiée / actualisée le 13 Février 2011 sur drupal.org
Le module Color permet à l'administrateur de modifier totalement les couleurs d'un thème. En choisissant une palette de 5 couleurs (soit manuellement soit à partir d'un ensemble), vous pouvez modifier l'ensemble des couleurs d'un thème.
Le module peut modifier les feuilles de style et les images. Mais pour cela, le thème doit fournir des hooks et il doit être conçu de façon à permettre ces modifications.
Ce qui suit explique les bases de la création d'un thème « colorisable ».

Il est important de comprendre, qu'étant donné la façon dont procède le module Color, tout thème ne peut être « colorisé ».
Prenons d'abord une image transparente du design (la base), qui contient tout sauf le fond. Posons ensuite cette image sur un fond de couleur, pour obtenir les différentes versions colorées. Pour finir, découpons cette image composite en plusieurs petites images qui seront sauvegardées séparément.
Modifions également la feuille de style en basant ses couleurs sur celles définies précédemment. Le module change les couleurs en utilisant la palette comme référence. Les couleurs qui ne figurent pas en tant que telles dans la palette sont ajustées vers la couleur la plus proche de la palette (pour les liens, les textes ou les couleurs de fond).
Ainsi, la maquette PhotoShop sera composée d'un fichier comportant plusieurs couches empilées les unes sur les autres, les colorées en bas de la pile, les autres mélangées au-dessus. Lorsque vous sauvegarderez l'image de base, vous fusionnerez toutes les couches ensemble, tout en conservant les couches colorées invisibles.
Jetez un œil au fichier Garland base.png pour voir un exemple (ouvrez-le dans un éditeur d'images pour voir les transparences). Il existe une vidéo qui montre comment créer votre propre base.png avec Photoshop.
Tous les fichiers créés de la sorte sont enregistrés dans le dossier /file/css et sont utilisés à la place des images par défaut. Ce qui signifie qu'un thème colorisable, dans sa configuration de couleur par défaut, doit fonctionner dès l'installation, sans besoin du module Color.
Prenons Garland en exemple. Les fichiers les plus importants se trouvent dans le sous-dossier themes/garland/color :
base.png
Contient le design de base du thème, composé et découpé en images.
color.inc
Ce fichier contient tous les paramètres requis pour colorer le thème. Voir ci-dessous.
preview.css
La feuille de style utilisée pour générer l'aperçu dans le modificateur de couleur
preview.png
L'image utilisée utilisée pour générer l'aperçu dans le modificateur de couleur
La présence de color/color.inc fait apparaître le sélecteur de couleur dans la page « Paramètres » du thème. C'est un fichier PHP qui contient un tableau $info avec les valeurs suivantes :
Schemes
<?php
array('schemes' => array(
'#0072b9,#027ac6,#2385c2,#5ab5ee,#494949' => t('Blue Lagoon (Default)'),
'#464849,#2f416f,#2a2b2d,#5d6779,#494949' => t('Ash'),
'#55c0e2,#000000,#085360,#007e94,#696969' => t('Aquamarine'),
'#d5b048,#6c420e,#331900,#971702,#494949' => t('Belgian Chocolate'),
'#3f3f3f,#336699,#6598cb,#6598cb,#000000' => t('Bluemarine'),
'#d0cb9a,#917803,#efde01,#e6fb2d,#494949' => t('Citrus Blast'),
'#0f005c,#434f8c,#4d91ff,#1a1575,#000000' => t('Cold Day'),
'#c9c497,#0c7a00,#03961e,#7be000,#494949' => t('Greenbeam'),
'#ffe23d,#a9290a,#fc6d1d,#a30f42,#494949' => t('Mediterrano'),
'#788597,#3f728d,#a9adbc,#d4d4d4,#707070' => t('Mercury'),
'#5b5fa9,#5b5faa,#0a2352,#9fa8d5,#494949' => t('Nocturnal'),
'#7db323,#6a9915,#b5d52a,#7db323,#191a19' => t('Olivia'),
'#12020b,#1b1a13,#f391c6,#f41063,#898080' => t('Pink Plastic'),
'#b7a0ba,#c70000,#a1443a,#f21107,#515d52' => t('Shiny Tomato'),
'#18583d,#1b5f42,#34775a,#52bf90,#2d2d2d' => t('Teal Top'),
));
?>
Ce code déclare un tableau de couleurs prédéfinies. Chaque entrée doit avoir 5 couleurs (qui sont, dans l'ordre, la couleur de base, la couleur des liens, le top header, le bottom header et la couleur du texte), formatées comme ci-dessus, et un titre.
La première entrée du tableau est utilisée comme référence et doit correspondre aux couleurs utilisées dans les images par défaut du thème et dans la feuille de style. Sinon, les couleurs finales pourraient différer de celles voulues par l'utilisateur. Reportez-vous à la section « feuilles de style » pour plus d'informations sur la façon dont les couleurs sont calculées.
Images à copier
<?php
array('copy' => array(
'images/menu-collapsed.gif',
'images/menu-expanded.gif',
'images/menu-leaf.gif',
));
?>
Ce tableau contient la liste des images qui ne doivent pas être modifiées. Elles sont copiées vers l'emplacement des images et feuilles de style générées.
Remplissage des zones et des dégradés
Pour colorier l'image, nous créons une image cible aux dimensions égales à celles de l'image de base, et dessinons des zones colorées et un dégradé. Pour une souplesse totale, l'emplacement de ces zones est défini en déclarant leurs coordonées avec (x,y,largeur,hauteur) :
<?php
array('gradient' => array(0, 37, 760, 121));
?>Vous pouvez indiquer un dégradé vertical à deux couleurs.
<?php
array('fill' => array(
'base' => array(0, 0, 760, 568),
'link' => array(107, 533, 41, 23),
));
?>
Vous pouvez indiquer des regions pour chaque palette de couleurs. La région sera remplie avec la couleur sélectionnée; Les couleurs disponibles sont « base », « link », « top », « bottom » et « text ».
Images découpées
Ensuite vous devez définir les zones de l'image de base qui « contiendront » les images découpées. Spécifiez des coordonnées (x, y, width, height) en regard du nom du fichier image, tel qu'indiqué dans la feuille de style. Le logo et la copie d'écran sont spécifiques et portent toujours le même nom. La copie d'écran sera redimensionnée à 150x90 pixels.
<?php
array('slices' => array(
'images/body.png' => array(0, 37, 1, 280),
'images/bg-bar.png' => array(202, 530, 76, 14),
'images/bg-bar-white.png' => array(202, 506, 76, 14),
'images/bg-tab.png' => array(107, 533, 41, 23),
'images/bg-navigation.png' => array(0, 0, 7, 37),
'images/bg-content-left.png' => array(40, 117, 50, 352),
'images/bg-content-right.png' => array(510, 117, 50, 352),
'images/bg-content.png' => array(299, 117, 7, 200),
'images/bg-navigation-item.png' => array(32, 37, 17, 12),
'images/bg-navigation-item-hover.png' => array(54, 37, 17, 12),
'images/gradient-inner.png' => array(646, 307, 112, 42),
'logo.png' => array(622, 51, 64, 73),
'screenshot.png' => array(0, 37, 400, 240),
));
?>
Fichiers
Enfin, vous devez spécifier l'emplacement des fichiers de votre thème. Vous avez besoin d'une image et d'une feuille de style pour l'aperçu, ainsi que d'une image de base* :
<?php
array(
'preview_image' => 'color/preview.png',
'preview_css' => 'color/preview.css',
'base_image' => 'color/base.png',
);
?>
* Avec Drupal 6, le module Color n'a plus besoin de l'image de base, ce qui signifie qu'il est possible d'utiliser le module sans images.
Feuilles de style
Le module Color lira la feuille style.css, ainsi que tout autre style importé avec l'instruction @import, et créera un nouveau fichier style.css. Il changera les couleurs dans la feuille CSS en utilisant l'une des palettes de couleurs comme référence, selon le contexte :
Cependant, si une couleur de la feuille de style correspond exactement à une couleur de référence, le contexte sera ignoré, et la couleur de remplacement sera utilisée à la place.
However, if a color in the stylesheet matches one of the reference colors exactly, the context will be ignored, and the matching replacement color will be used instead.
Par exemple, supposons que votre couleur de référence par défaut soit bleu foncé, mais vous la changez pour le rouge.
Votre feuille de style par défaut contient bleu clair et gris pourpre, relativement à cette couleur de référence.
Les couleurs résultantes (mauve et marron) seront aussi différentes du rouge que les couleurs d'origine l'étaient du bleu. En termes techniques : les différences relatives de teinte, saturation et luminance seront préservées.
Si vous pensez que le module Color utilise une mauvaise référence de couleur, essayez de séparer les différentes parties dans différentes règles CSS, chacune dans leur propre selector{ … } , ainsi il n'y aura pas de confusion due au contexte.
Notez que si vous éditez votre feuille de style après avoir défini le schéma de couleurs, vous devrez le resoumettre pour générer la version « couleurs décalées ».
Note that if you edit your stylesheet after changing the color scheme, you must resubmit the color scheme to regenerate the color-shifted version.
Si vous ne voulez pas que certaines couleurs soient modifiées, vous devez placer leurs CSS après ce marqueur :
Vous ne pouvez utiliser ce marqueur qu'une seule fois dans votre fichier style.css. Il s'applique globalement, aussi, si vous l'utilisez à l'intérieur d'une feuille de style importée, toutes les couleurs après l'instruction @import seront ignorées.
You can only use this marker once in your style.css file. It applies globally, so if you use it inside an imported stylesheet, all colors below the @import statement will be left alone too.
Il est important que les images générées correspondent avec les couleurs décalées de la feuille de style générée. Autrement, de vilains effets de bords apparaîtront.
Pour cela, les pixels de l'image de base doivent tous être d'une seule couleur dans les zones où ils doivent correspondre aux couleurs définies dans le CSS. Comme nous ignorons où les couleurs définies du CSS apparaitront dans l'image de base, nous utilisons une couleur de « mixage » globale à tout le thème. Garland utilise le blanc. Notez que Garland inclut des pixels gris et noirs, mais seulement dans des zones utilisant des images en fond (par exemple : l'en-tête). En plus du blanc, le noir ou le gris peuvent faire l'affaire.
<?php
array('blend_target' => '#ffffff');
?>
Les masochistes peuvent aller jeter un œil dans les tripes du module Color, notamment dans la fonction _color_shift(), s'ils sont intéressés sur le pourquoi du comment de son fonctionnement.
Enfin, vous avez besoin de « raccrocher » (hook) le module Color à votre thème. Nous utiliserons un thème PHPTemplate à titre d'exemple, mais cela marche également pour les autres moteurs.
Dans le fichier template.php de votre thème, ajoutez le bout de code suivant (Drupal 6.x uniquement) :
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function phptemplate_preprocess_page(&$vars) {
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
}
?>Avec Drupal 5.x vous devrez ajouter ce code-ci :
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
return $vars;
}
return array();
}
?>
Cela permet au module de surcharger le logo de votre thème, sa feuille de style et sa copie d'écran. Si vous effectuez d'autres modifications dans les variables _phptemplate_, vous devrez les inclure dans ce code.
Traduction de la page http://drupal.org/node/337176
publiée / actualisée le 11 Mars 2011 sur drupal.org
Le contenu du fichier .info étant mis en cache dans la base de données, sa modification ne sera pas détectée par Drupal. Ne confondez pas ce cache avec le theme registry). Pour vider le cache, faites l'une des opérations suivantes :
Traduction de la page http://drupal.org/node/394612
publiée / actualisée le 11 Mars 2011 sur drupal.org
Dans Drupal 6 et Drupal 7, plusieurs améliorations du core facilitent la tâche des concepteurs de thème qui travaillent en CSS et ne touchent pas au code PHP.
Le thème Stark a été créé pour aider les concepteurs à connaître le code xhtml généré par Drupal, il fait partie du core de Drupal 7. Les concepteurs de thèmes peuvent maintenant réaliser de superbes thèmes uniquement avec des CSS.
Ce tutoriel vous montrera comment créer, en quelques étapes simples, votre propre thème Drupal 6 ou 7 à base de CSS.
La première étape dans la réalisation d'un thème est de créer le dossier où il sera enregistré, et créer le fichier .info pour informer Drupal de son existence.
Pour créer le dossier :
Pour créer le fichier .info
* Notes :
Si vous regardez la feuille de style du thème Stark, layout.css, vous remarquerez qu'elle ne comporte que très peu de règles :
Ce code ne fait que mettre en forme le contenu d'une installation Drupal standard. Cela montre à quel point une thème peut être simple. A partir de là, vous pouvez construire votre propre thème de différentes façons.
La première étape consistera à mettre en place les régions et le graphisme de votre page. Vous le ferez dans votre propre fichier layout.css.
Ensuite, vous pouvez créer un fichier style.css pour les autres styles.
Une pratique habituelle, qui facilite la maintenance du code, est de créer également d'autres fichiers CSS qui porteront notamment sur les éléments HTML, print.css et ie.css.
Pour chaque fichier CSS supplémentaire que vous créerez, vous devrez ajouter une ligne dans le fichier votretheme.info, au format suivant, après les autres déclarations de styles CSS :
Si vous créez votre thème avec des CSS... il n'y a plus grand chose d'autre à faire...
Si vous le souhaitez, vous pouvez jeter un œil aux fichiers gabarits du core utilisés dans votre thème. Les principaux fichiers à examiner sont :
Vous pouvez copier ces gabarits PHP dans le dossier de votre thème, puis vous les modifierez à votre convenance, si vous souhaitez modifier l'organisation du code HTML.
Traduction de la page http://drupal.org/getting-started/6/admin/site-building/themes/settings
publiée / actualisée le 15 Février 2011 sur drupal.org
Dans la page des thèmes (admin/build/themes), à côté de l'onglet Liste, vous avez un onglet Configurer. Cliquez dessus. Drupal affichera alors les paramètres globaux des thèmes où vous pourrez sélectionner/désélectionner l'affichage des caractéristiques supportées par les thèmes. Notez que ce sont des paramètres globaux et qu'ils peuvent être surchargés dans un thème donné, en paramétrant ces thèmes individuellement.
Voici la liste des caractéristiques par défaut, avec une brève description et quelques astuces pour la mise en œuvre.
Notez que tous les thèmes ne supportent pas toutes les caractéristiques, et certaines ne seront jamais affichées (les thèmes peuvent masquer l'affichage des caractéristiques qu'ils ne prennent pas en charge).
[inline:07-themes_global_sm.jpg]
Thèmes - Garland
Pour débuter, Garland vous permet de choisir plusieurs zones de sa palette de couleurs. Drupal 6 est livrée avec une quinzaine de palettes de couleurs prédéfinies et votre propre palette personnalisée. N'hésitez pas à faire des essais. Cela nécessite la présence du module Colors, qui est présent par défaut.
[inline:07-themes_global_sm.jpg]
La plupart des sites Web modernes utilisent des feuilles de style pour contrôler la présentation des pages. Dans une page HTML statique, un lien vers une feuille de style doit être placé manuellement dans le code HTML (habituellement dans le header de la page).
Voici un exemple de lien vers une feuille de style :
<link rel="stylesheet" type="text/css" href="/mytheme.css" />
Ce code indique simplement au navigateur où trouver une des feuilles de style (mytheme.css) qui contrôle l'apparence de la page.
Pour un navigateur internet, une page d'un site Drupal est identique : les mêmes types de liens vers des feuilles de style externes se trouvent dans le header HTML. La différence clé est que, pour Drupal, ces liens sont ajoutés automatiquement au code HTML lors de la construction de la page. Certaine feuilles de styles peuvent provenir du thème lui-même, d'autres peuvent être fournies par différents modules Drupal (ceux qui fournissent un style par défaut à leurs affichages).
Vous pouvez ajouter des nouvelles feuilles de style à un thème donné, et vous pouvez surcharger une feuille de style par défaut provenant du core Drupal ou d'un module additionnel. Si vous utilisez un sous- thème, vous pouvez surcharger les feuilles de style de son thème parent.
Traduction de la page http://drupal.org/node/263967
publiée / actualisée le 11 Mars 2011 sur drupal.org;
Vous pouvez surcharger la feuille de style fournie par le noyau Drupal ou par des modules tiers.
La plupart des modules disposent d'une présentation par défaut pour l'affichage de leurs données. Cela comprend les balises HTML et la feuille de style associée (reportez-vous aux explications de overriding behavior pour le balisage). Ces styles par défaut peuvent être surchargés en réalisant des modifications dans votre thème.
Pour surcharger ces feuilles de styles, vous devez les redéfinir dans le fichier .info du thème.
Prenons system-menus.css comme exemple. Il est situé dans modules/system/system-menus.css. Avec l'entrée suivante dans le fichier .info, la feuille de style originale sera ignorée et la vôtre sera chargée :
Surcharger avec une feuille de style absente de votre thème fera que celle du core ou du module additionnel sera ignorée. Ce comportement, délibéré, a été corrigé au passage de la version 6.0 à 6.3.
Quelques remarques :
Rappelez-vous que vous devez vider le cache après les modifications. Allez pour cela dans Administrer » Configuration du site » Performance, déroulez jusqu'en bas de la page et cliquez sur« Supprimer les données du cache ».
Ce qui suit s'applique aux sous-thèmes (sub-themes).
Pour éviter qu'une feuille de style d'un thème parent ne soit reprise dans un sous-thème, vous pouvez la redéfinir dans le fichier .info. Cela se fait de la même façon que pour la surcharge d'une feuille de style d'un module ou du core.
Le thème parent et le sous-thème doivent avoir la même entrée :
Si le fichier existe dans le sous-thème, il sera utilisé, alors qu'omettre le fichier empêchera son chargement. If the file exists inside the sub-theme, then it will be used while omitting the file will prevent it from loading.
Traduction de la page http://drupal.org/node/171209
publiée / actualisée le 2 Mars 2011 sur drupal.org
Cette page explique comment ajouter une feuille de style via le fichier .info du thème. Pour ajouter une feuille de style par programmation, reportez-vous à la page sur les fonctions API (API functions). Personnaliser un thème via des CSS uniquement est faisable avec les informations fournies ici.
Remarques :
Quand vous travaillez avec des feuilles de style, assurez-vous d'avoir désactivé l'optimisation CSS (menu Administrer > Configuration du site > Performance > Optimise les fichiers CSS). Si elle est activée, aucune modification ne sera répercutée sur votre site à moins que les styles ajoutés ne soient purgés.
Vous pouvez réactiver l'optimisation à la fin de votre travail.
Par défaut dans Drupal 6, si aucune autre feuille de style n'a été définie dans le fichier .info, c'est un fichier nommé style.css qui sera utilisé par votre thème. Dans Drupal 7, le fichier style.css ne sera pas utilisé à moins qu'il ne soit mentionné dans le fichier .info.
Ajouter d'autres feuilles de style est aussi simple que définir une clé stylesheets avec sa media property comme indice entre crochets, et le nom de la feuille de style comme valeur.
N'oubliez pas que la déclaration de styles personnalisés empêchera l'utilisation du fichier style.css. Si votre thème utilise cette feuille de style-là, vous devrez la déclarer explicitement.
Quelques remarques :
Traduction de la page http://drupal.org/node/778998
publiée / actualisée le 22 Avril 2010 sur drupal.org
La classe clear-block de Drupal 6 est un drupalisme pour une fonctionnalité plus connue sous le nom de clearfix par la Communauté CSS. En outre, utiliser le terme block prêtait à confusion car il ne s'aggissait pas là du système de blocs de Drupal. Dans Drupal 7, la classe clear-block a été renommée en clearfix.
6.x
7.x
Traduction de la page http://drupal.org/node/1030462
publiée le 15 février 2011 sur Drupal.org
Vous pouvez utiliser des feuilles de styles ciblées par navigateur.
Un exemple d'ajout de feuille de style pour Internet Explorer 6 dans un thème pour Drupal 6 (cet exemple est issu du thème Garland, livré avec l'installation du noyau Drupal) :
page.tpl.php :
<?php
...
<?php print $styles ? >
<!--[if lt IE 7]>
<?php print phptemplate_get_ie_styles(); ? >
<![endif]-->
...
?>template.php :
<?php
...
function phptemplate_get_ie_styles() {
global $language;
$iecss = '<link type="text/css" rel="stylesheet" media="all" href="'. base_path() . path_to_theme() .'/fix-ie.css" />';
if ($language->direction == LANGUAGE_RTL) {
$iecss .= '<style type="text/css" media="all">@import "'. base_path() . path_to_theme() .'/fix-ie-rtl.css";</style>';
}
return $iecss;
}
...
?>Avec Drupal 7, vous pouvez préciser une clé "navigateur" lorsque vous appelez la fonction drupal_add_css() :
template.php :
<?php
...
function yourthemename_preprocess_html(&$vars) {
...
drupal_add_css(path_to_theme() . '/fix-ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lt IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
}
...
?>Reportez-vous à la doc de l'API pour drupal_pre_render_conditional_comments() pour connaître les détails des clés IE et !IE.
Il est conseillé de toujours utiliser drupal_add_css() pour ajouter des feuilles de style à un thème, ainsi Drupal connaîtra exactement le nombre de feuilles de style ajoutées. Cette donnée peut servir pour s'adapter à la limite d'Internet Explorer qui ne charge que les 31 premières balises LINK/STYLE.
Traduction de la page http://drupal.org/node/225868
publiée / actualisée le 29 Janvier 2011 sur drupal.org
Pour la plupart des thèmes, ajouter des feuilles de style via le fichier .info sera suffisant. Mais comme ce fichier .info est statique, les feuilles de style ne peuvent pas être ajoutées dynamiquement. Selon la façon dont les thèmes gèrent les feuilles de style, cela peut n'avoir aucune incidence. En cas de doute, utilisez le fichier .info.
L'API comporte deux fonctions pour travailler avec les feuilles de style : drupal_add_css et drupal_get_css. Voici une exemple d'ajout dynamique de feuilles de style avec ces fonctions.
Remplacez le préfixe « drop » de la fonction par le nom de votre thème.
<?php
function drop_preprocess_page(&$variables) {
$front_style = path_to_theme() .'/front-page.css';
$path_style = path_to_theme() .'/path-'. arg(0) .'.css';
if (file_exists($front_style) && $variables['is_front']) {
$include_style = $front_style;
}
elseif (file_exists($path_style)) {
$include_style = $path_style;
}
if (isset($include_style)) {
drupal_add_css($include_style, 'theme', 'all', FALSE);
$variables['styles'] = drupal_get_css();
}
}
?>
Dans cet exemple, la feuille de style front-page.css sera utilisée pour la page d'accueil, et d'autres basées sur le chemin interne. Par exemple : http://example.com/admin utilisera une feuille de style nommée path-admin.css.
Quelques remarques :
Ce codee peut être ajouté dans le fichier template.php du dossier de votre thème. Il peut déjà y avoir une fonction nommée phptemplate_preprocess_page. Incorporez-là simplement dans le corps de votre fonction XXX__preprocess_page.
Vous devrez peut-être également modifier variables en vars pour que cela fonctionne.
Référence en anglais sur drupal.org : http://drupal.org/node/744328
16 Mars 2010 - 21h25
Vous pouvez ajouter une feuille de style pour un navigateur donné.
Dans le fichier page.tpl.php de Garland :
<?php
...
<?php print $styles ? >
<!--[if lt IE 7]>
<?php print phptemplate_get_ie_styles(); ? >
<![endif]-->
...
?>Dans le fichier template.php de Garland :
<?php
...
function phptemplate_get_ie_styles() {
global $language;
$iecss = '<link type="text/css" rel="stylesheet" media="all" href="'. base_path() . path_to_theme() .'/fix-ie.css" />';
if ($language->direction == LANGUAGE_RTL) {
$iecss .= '<style type="text/css" media="all">@import "'. base_path() . path_to_theme() .'/fix-ie-rtl.css";</style>';
}
return $iecss;
}
...
?>Drupal 7 apporte la possibilité de spécifier une clé « navigateur » quand vous appelez drupal_add_css() :
Dans le fichier template.php de Garland :
<?php
...
function garland_preprocess_html(&$vars) {
...
drupal_add_css(path_to_theme() . '/fix-ie.css', array('weight' => CSS_THEME, 'browsers' => array('IE' => 'lt IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
}
...
?>Consultez la documentation de l'API pour drupal_pre_render_conditional_comments() au sujet des détails des clés IE et !IE.
Il est conseillé que le thèmes utilisent toujours drupal_add_css() pour ajouter des feuilles de style CSS, le code Drupal connaît ainsi le nombre exact de feuilles de style ajoutées. Une donnée qui peut être nécessaire lorsqu'on approche des limites d'Internet Explorer qui ne peut charger que les 31 premières balises LINK/STYLE.
Traduction de la page http://drupal.org/node/568180
publiée / actualisée le 29 Janvier 2011 sur drupal.org
N'avez-vous jamais eu envie de créer des CSS dynamiquement ? Voici un exemple de comment interpréter un gabarit CSS qui sera renseigné avec des variables. Pour cet exemple, nous voulons générer des CSS pour modifier la taille de la police d'un titre de page.
<?php
$variables = array(
'font_size' => 20,
);
extract($variables, EXTR_SKIP);
ob_start();
include('style.css.php');
$css = ob_get_contents();
ob_end_clean();
// la variable CSS résultante peut être utilisée pour ajouter ou afficher le style de différentes façons :
print '<style type="text/css">'.$css.'</style>';
?>Généreusement emprunté à phptemplate.
Traduction de la page http://drupal.org/node/388372
publiée / actualisée le 29 Janvier 2011 sur drupal.org
incomplet
Pour les éléments standards d'une page, le core de Drupal utilise une approche modulaire des classes CSS . Un certain nombre de classes sont utilisées dans un site Drupal. La liste qui suit se veut un rappel sur ces classes, ce qu'elles font et où on les trouve.
Vous trouverez une liste complète des classes de Drupal 6 dans le starter kit ZEN, elle devrait être fusionnée à cette page.
Notez que les thèmes que vous installez sur votre site peuvent modifier ces classes ou en ajouter d'autres.
Traduction de la page http://drupal.org/node/222782
publiée / actualisée le 29 Janvier 2011 sur drupal.org
Pour prendre en charge les langues qui se lisent de droite à gauche vous devez surcharger les styles latéraux et nommer la nouvelle feuille de style d'après la feuille de style originale. L'inclusion de la feuille de style « RTLisée » se fera automatiquement et dépendra de la langue paramétrée pour le site.
Un exemple sera plus parlant : la feuille de style par défaut du thème Garland est style.css. Elle dispose également d'une feuille de style style-rtl.css pour les langues s'écrivant de droite à gauche, comme l'arabe ou l'hébreu. L'inclusion de ces deux styles commence par la feuille de style principale puis par la feuille de style RTL. Cela permet l'application des règles des deux fichiers « en cascade » sans que vous ayez à vous soucier des sélecteurs spécifiques utilisés dans le style de RTL.
Il existe une norme de codage pour l'organisation des règles. Les règles impliquées dans la position latérale ou les dimensions doivent être commentées avec /* LTR * /, ce qui indique qu'elles sont spécifiques à une mise en page de gauche à droite. Cela concerne les éléments flottants (float), les marges (margins), les rembourrages/épaulettes (padding), etc.
Le texte inline sera automatiquement placé, pour autant que le sens de l'écriture du document soit indiqué dans le gabarit page.tpl.php du thème.
Exemple de style de base :
Style RTL correspondant :
Cet ajout de /* LTR * / en commentaires dans la feuille de style principale vous permet de repérer plus facilement les les endroits du fichier RTL où sont les modification doivent être faites.
Remarque :
Si votre thème surcharge le style d'un module (overrides a module style, traduction française ici), le style RTL associé sera omis à moins que vous n'en ayez créé un dans votre thème.
Traduction de la page
http://drupal.org/node/1089662
publiée / actualisée le 6 Mai 2011 sur drupal.org
Le noyau Drupal est livré avec des modèles de mise en page par défaut. Pour remplacer ces modèles, il vous suffira de les copier dans le dossier de votre thème et de vider le registre de thème.
Vous pouvez également remplacer ces modèles de mise en page de façon plus ciblée. Cette section énumère les modèles de mise en page par défaut de Drupal et explique comment en créer des plus ciblés.
Dans Drupal 6, certains modèles peuvent être surchargés de façon ciblée. Par exemple, le thème peut disposer d'un fichier node-article.tpl.php qui sera utilisé pour les nodes du type article seulement.
Dans Drupal 7, ces fichiers doivent être renommés avec un tiret double. Par exemple, node--article.tpl.php. Un tiret simple est toujours utilisé pour séparer les mots: par exemple, user-picture.tpl.php ou node--long-content-type-name.tpl.php, alors que le tiret double signale toujours un ciblage de ce qui précède le --.
Voir également Converting 6.x themes to 7.x pour d'autres infos (traduction sur kolossaldrupal.org).
Traduction de la page http://drupal.org/node/190815
publiée / actualisée le 17 Mars 2011 sur drupal.org
Le noyau Drupal 7 fournit des gabarits de mise en page par défaut (fichiers .tpl.php). La documentation sur les variables et l'usage de ces gabarits se trouve à l'intérieur même des fichiers gabarits. Il existe un ensemble de variables par défaut default set of variables disponibles pour tous les gabarits.
Pour surcharger ces mises en page, il vous suffit de les copier dans votre dossier de thème et vider le registre de thèmes (traduction en français sur kolossaldrupal : http://www.kolossaldrupal.org/docs/la-surcharge-themes).
Pour surcharger ces gabarits de façon plus ciblée, consultez la section Template Suggestions (traductions à venir. NdK)
(les liens qui suivent renvoient vers des pages techniques du site api.drupal.org. Je ne les ai pas traduites)
Remarque : la version Drupal 6 de block.tpl.php fait partie de modules/system/...
Remarque : comment-folded.tpl.php est obsolète dans Drupal 7.
Remarque : field.tpl.php est un nouveau fichier gabarit de Drupal 7.
Remarque : forum-topic-navigation.tpl.php est obsolète dans Drupal 7.
Remarque : overlay.tpl.php est un nouveau fichier gabarit de Drupal 7.
Remarque : Les précédents fichiers gabarits poll-results-block.tpl.php/6 et poll-bar-block.tpl.php ont été renommés avec un double tiret dans Drupal 7.
Remarque : search-theme-form.tpl.php est obsolète dans Drupal 7.
box.tpl.php est obsolète dans Drupal 7.
html.tpl.php et region.tpl.php ont été ajoutés.
Remarque: taxonomy-term.tpl.php est un nouveau fichier gabarit dans Drupal 7.
Remarque: toolbar.tpl.php est un nouveau fichier gabarit dans Drupal 7.
Traduction de la page
http://drupal.org/node/1089656
publiée / actualisée le 6 Avril 2011 sur drupal.org
Qu'est-ce qu'un template suggestion? C'est un modèle de mise en page (fichiers .tpl.php) alternatif que vous créez pour remplacer le fichier de mise en page d'origine. Les suggestions ne fonctionnent que si elles sont placées dans le même dossier que les fichiers de mise en page de base.
D'autres suggestions personnalisées que celles énumérées ci-dessous peuvent être créées. Consultez la page Travailler avec des templates suggestions.
Suggestions à partir de ce fichier, dans l'ordre. Drupal utilisera le plus spécifique qu'il trouvera :
module étant le nom du module et delta, l'id interne attribué au bloc par le module. Par exemple, block-user-1.tpl.php sera utilisé pour le bloc de navigation utilisateur par défaut puisqu'il a été créé par le module User avec l'identifiant 1. region prendra effet pour des régions spécifiques.
Un exemple de région spécifique serait block--sidebar_first.tpl.php. Si un module crée un bloc custom et un delta my-block, la template suggestion s'appellera block--custom--my-block.tpl.php.
Les fichiers comment-type.tpl.php sont pris en charge, pour la mise en forme des commentaires d'un type de node donné, différement des autres commentaires du site. Par exemple, un commentaire fait sur un type article aura comment--node-article.tpl.php.
Similaire à ce qui précède mais pour le wrapper template.
Les template suggestions ajoutées sont basées sur ce modèle, listé du modèle le plus spécifique à celui qui l'est le moins. Drupal utilisera le modèle le plus spécifique qu'il trouvera.
Pour les conteneurs de forum :
Pour les sujets de forum :
Utilisé lors de défaillances de la base de données. Permet l'affichage d'une page sans messages d'erreur. Personnaliser la page de maintenance de Drupal doit d'abord être correctement paramétré.
Les template suggestions ajoutées sont basées sur ce modèle, listé du modèle le plus spécifique au plus général. Drupal utilisera le modèle le plus spécifique qu'il trouvera.
Consultez node.tpl.php dans la doc de l'API Drupal API pour plus d'informations.
Les suggestions sont nombreuses. Celle qui a la priorité est celle de la page d'accueil. Les autres sont basées sur le chemin interne de la page en cours. Ne confondez pas le chemin interne et l'alias de chemin qui ne sont pas pris en compte. N'oubliez pas qie le module Pathauto fonctionne avec des alias de chemin.
La page d'accueil peut être paramétrée dans "Administration > Configuration > System > Site information." Dans Drupal 6, at "Administration > Configuration du site > Information." Ce qui sera indiqué là déclenchera la suggestion page-front.tpl.php.
La liste des fichiers suggested est basée, par ordre de spécifité, sur les chemins internes. Une suggestion est faite pour chaque élément du chemin en cours, bien que les éléments numériques ne soient pas amenés aux suggestions suivantes. Par exemple, http://www.example.com/node/1/edit donnera les suggestions suivantes:
Pour d'autres infos, voir également page.tpl.php dans la doc Drupal de l'API.
Une autre explication basée sur la fonction theme_get_suggestions().
Via la fonction theme_get_suggestions() Drupal liste les modèles de mise en page possibles, cette fonction est appelée par la fonction template_preprocess_page().
Les composants d'un path Drupal (ici la traduction en français sur KolossalDrupal) sont d'abord éclatés. Comme indiqué précédemment, le path Drupal n'est pas un de ses alias : il n'y a qu'un seul path Drupal pour une page. Par exemple, pour http://www.example.com/node/1/edit et pour http://www.example.com/mysitename?q=node/1/edit", le path Drupal est node/1/edit et ses composants sont node,1 et edit.
Ensuite, le préfixe est paramétré à page. Puis, pour chaque composant, la logique suivante est appliquée :
Une fois la liste des composants parcourue, si la page est la page d'accueil (front page, celle indiquée dans Administration > Configuration > System > Site information), page__front est alors ajouté à la liste des suggestions.
FInalement, pour convertir une suggestion en nom de fichier réel, __ sera converti en -- et .tpl.php sera ajouté à la suggestion.
Pour node/1/edit, nous aurons la liste de suggestions suivantes
Lorsque la page est mise en forme, la dernière suggestion est vérifiée. Si elle existe, elle sera utilisée. Sinon, la suggestion précédente sera vérifiée, et ainsi de suite. Bien sûr, si aucune suggestion n'existe, page.tpl.php sera la dernière suggestion. Ceci explique également pourquoi si page--front.tpl.php existe, elle supplantera toute autre suggestion pour la page d'accueil : elle est toujours la dernière suggestion pour la page désignée comme page d'accueil.
La fonction de thème qui génère les résultats de sondage est utilisée par les nodes et les blocs. La valeur par défaut est utilisée pour les nodes, mais une suggestion est faite pour leur mise en page dans les regions de blocs. Cette suggestion est utilisée par défaut et le fichier de mise en page est situé dans modules/poll/poll-results--block.tpl.php.
Semblable à poll-results--[block].tpl.php mais pour la création du formulaire de vote. Vous devez fournir votre propre modèle de mise en page pour qu'il soit pris en compte.
Comme pour poll-vote--[block].tpl.php mais pour la création des barres individuelles.
Le modèle profile wrapper est utilisé lorsqu'on parcourt la page listing des membres. Lorsqu'on parcourt des champs spécifiques, une suggestion est faite avec le nom du champ. Par exemple, http://drupal.org/profile/country/Belgium
proposera profile-wrapper--country.tpl.php.
search-results.tpl.php est l'enveloppe par défaut pour les résultats des recherches. Différentes suggestions sont faites selon le type de recherche.
Par exemple example.com/search/node/Search+Term donnera search-results--node.tpl.php. Comparez avec example.com/search/user/bob qui donnera search-results--user.tpl.php. Les modules peuvent étendre les types de recherches en ajoutant plus de suggestions de leurs types.
Comme ci-dessus, mais pour les résultats de recherche individuels.
Traduction de la page
http://drupal.org/node/1089642
publiée / actualisée le 11 Mars 2011 sur drupal.org
Qu'est-ce qu'un template suggestion? C'est un modèle de mise en page (fichiers .tpl.php) alternatif que vous créez pour remplacer le fichier de mise en page d'origine. Les suggestions ne fonctionnent que si elles sont placées dans le même dossier que les fichiers de mise en page de base. C'est à dire que, si vous voulez que comment-blog.tpl.php soit utilisé,le fichier comment.tpl.php doit également être présent dans votre thème et les deux fichiers doivent se trouver dans le même dossier.
D'autres suggestions personnalisées que celles énumérées ci-dessous peuvent être créées. Consultez la page Travailler avec des templates suggestions.
Remarque: Un bug empêche la détection des template suggestions si le fichier de mise ne page original n'est pas également présent dans le même dossier. Consultez #279573: Themes can't use node-story.tpl.php without node.tpl.php pour plus d'informations.
Suggestions à partir de ce fichier, dans l'ordre:
module étant le nom du module et delta, l'id interne attribué au bloc par le module. Par exemple, block-user-1.tpl.php" sera utilisé pour le bloc de navigation utilisateur par défaut puisqu'il a été créé par le module User avec l'identifiant 1. region prendra effet pour des régions spécifiques.
Les fichiers comment-type.tpl.php sont pris en charge, pour la mise en forme des commentaires d'un type de node donné, différement des autres commentaires du site. Ça marche comme pour node-[type].tpl.php mais pour les commentaires.
Similaire à ce qui précède mais pour le wrapper template.
Les template suggestions ajoutées sont basées sur ce modèle, dans l'ordre suivant.
Pour les conteneurs de forum :
Pour les sujets de forul :
Utilisé lors de défaillances de la base de données. Permet l'affichage d'une page sans messages d'erreur. Personnaliser la page de maintenance de Drupal doit d'abord être correctement paramétré.
Dans Drupal 7, les mises en pages pour des types de contenus spécifiques sont créées différement que dans Drupal 6.
Consultez node.tpl.php dans la doc de l'API Drupal API pour plus d'informations.
N'oubliez pas que pour supplanter la mise en page d'un node donné, le fichier de base node.tpl.php file doit également être présent dans le dossier du thème. Dans le cas contraire, le thème ne détectera pas la présence des fichiers node-[type].tpl.php.
Les suggestions sont nombreuses. Celle qui a la priorité est celle de la page d'accueil. Les autres sont basées sur le chemin interne de la page en cours. Ne confondez pas le chemin interne et l'alias de chemin qui ne sont pas pris en compte. N'oubliez pas que le module Pathauto fonctionne avec des alias de chemin.
La page d'accueil peut être paramétrée dans "Administration > Configuration > System > Site information." Dans Drupal 6, at "Administration > Configuration du site > Information." Ce qui sera indiqué là déclenchera la suggestion page-front.tpl.php.
La liste des fichiers suggested est basée, par ordre de spécifité, sur les chemins internes. Une suggestion est faite pour chaque élément du chemin en cours, bien que les éléments numériques ne soient pas amenés aux suggestions suivantes. Par exemple, http://www.example.com/node/1/edit donnera les suggestions suivantes:
La fonction de thème qui génère les résultats de sondage est utilisée par les nodes et les blocs. La valeur par défaut est utilisée pour les nodes, mais une suggestion est faite pour leur mise en page dans les regions de blocs. Cette suggestion est utilisée par défaut et le fichier de mise en page est situé dans modules/poll/poll-results-block.tpl.php.
Semblable à poll-results-[block].tpl.php mais pour la création du formulaire de vote. Vous devez fournir votre propre modèle de mise en page pour qu'il soit pris en charge.
Comme pour poll-vote-[block].tpl.php mais pour la création des barres individuelles.
Le modèle profile wrapper est utilisé lorsqu'on parcourt la page listing des membres. Lorsqu'on parcourt des champs spécifiques, une suggestion est faite avec le nom du champ. Par exemple, http://drupal.org/profile/country/Belgium
proposera profile-wrapper-country.tpl.php.
search-results.tpl.php est l'enveloppe par défaut pour les résultats des recherches. Différentes suggestions sont faites selon le type de recherche. Par exemple example.com/search/node/Search+Term donnera search-results-node.tpl.php. Comparez avec example.com/search/user/bob qui donnera search-results-user.tpl.php. Les modules peuvent étendre les types de recherches en ajoutant plus de suggestions de leurs types.
Comme ci-dessus, mais pour les résultats de recherche individuels.
Traduction de la page http://drupal.org/node/341628
publiée / actualisée le 11 Mars 2011 sur drupal.org
Selon la configuration de votre site, le code HTML de vos pages résulte de l'assemblage du code HTML fourni par les différents modules installés.
Si le balisage HTML par défaut ne correspond pas aux exigences de votre thème, vous pouvez le remplacer en totalité ou en partie, afin que les pages obtenues correspondent exactement aux besoins de votre design.
Par exemple, vous pourriez décider que la boite de recherche de votre site doive afficher l'image d'une loupe et que le libellé du bouton de recherche doit être « Magne-toi de trouver ! » plutôt que le classique mais ô combien tristounet libellé « Chercher ». Vous pourriez dans ce cas remplacer le balisage par défaut en totalité, pour que l'image et le libellé ressemble à ce que vous voulez.
Il est très important de comprendre le concept de « surcharge ». Si, techniquement parlant, vous pourriez vous contenter de trouver et de modifier le code-source du module responsable de la recherche, ce n'est ABSOLUMENT PAS recommandé. Cela semble résoudre la question à première vue, mais vous aurez très vite des problèmes pour maintenir votre site à jour : chaque fois que vous actualiserez le module, pour quelque raison que ce soit, vous devrez refaire toutes vos adaptations...
La bonne démarche, la Drupal way of life, consiste à faire une surcharge. Soit 4 étapes simples :
Ces quatre étapes sont expliquées en détail dans les pages suivantes.
Cette façon de faire vous semblera peut-être intimidante si vous n'êtes pas familier avec le PHP, mais vous n'aurez sans doute pas à comprendre quoi que ce soit au PHP. Tant que vous savez quel code HTML vous voulez afficher, vous n'aurez qu'à modifier la partie du code HTML concernée.
Comme pour tout travail sur les thèmes, il vaut mieux éviter d'effectuer ces modifications sur un site en production sauf si, au préalable, vous avez soigneusement testé les modifications sur un site de développement.
Beaucoup de modules fournissent des feuilles de style qui spécifient l'apparence et le comportement par défaut de leurs affichages. Ces feuilles de style peuvent également être surchargées. Pour plus d'informations, reportez-vous à Overriding style sheets from modules and base themes.
Quelques modules tiers ont leurs propres guides de thèmes. Voir également http://www.kolossaldrupal.org/docs/surcharger-feuilles-de-style-modules-et-themes-parents.
Les modules dont il existe une documentation pour leurs thèmes sont listés ci-dessous, classés par version de Drupal.
Traduction de la page http://drupal.org/node/457740
publiée / actualisée le 27 Novembre 2010 sur drupal.org
L'idée de base dans la conception de thèmes Drupal est la surcharge des données affichées par les modules et le noyau Drupal. Au lieu de modifier un module pour modifier ce qu'il affiche (ce qui n'est pas à faire car cela compliquerait les mises à jours ultérieures), on modifie l'aspect de ce qui est affiché, en ajoutant des fichiers ou des fonctions au thème. Ces fichiers et fonctions sont prioritaires sur les paramètres du module pour ce qui concerne la mise en forme et la production du code HTML.
La surcharge se fait soit en surchargeant des fonctions du thème, soit en surchargeant des fichiers du thème, le choix de la méthode dépend de la façon dont l'affichage est créé par Drupal.
Avant de décider que ce qu'affiche de Drupal ou de l'un des modules de votre site doit être modifié, examinez les possibilités suivantez - vous vous éviterez peut-être l'ensemble du processus :
Pouvez-vous simplement modifier un paramètre ? Par exemple, cliquer sur le lien "Configurer" d'un bloc vous permettra de modifier son titre, voire de le supprimer (sur la page de configuration des blocs - Administrer » Construction du site » Blocs - , vous pouvez aussi déplacer les blocs dans d'autres régions de la page).
Certains modules vous permettent de modifier des parties de ce qu'ils affichent grâce à leurs pages de configuration (libellés pour des champs texte, ordre d'affichage, etc). Pour trouver ces pages, cliquez sur Administrer puis sur Par module et regardez ce qui est proposé.
D'autres paramètres sont accessibles via la page de configuration des thèmes, et d'autres paramètres encore peuvent se trouver dans les différents onglets des pages de configuration des Types de Contenus (Administrer » Gestion de contenu » Types de contenu).
Pouvez-vous obtenir ce que vous souhaitez via les styles CSS ? Presque tout ce qui est affiché par Drupal est encadré par des DIV qui utilisent des ID ou des classes spécifiques, vous pouvez ainsi ne personnaliser qu'une partie de l'affichage. Les CSS vous permettent de modifier les polices, les tailles, les emplacements, les images d'arrière-plan, etc. Pour surcharger un style CSS fournit par Drupal ou par un module, il suffit de l'ajouter à l'un des fichiers CSS de votre thème.
Si aucune de ces possibilités ne vous permet de personnaliser ce que vous voulez, vous devrez surcharger les sorties HTML de Drupal ou de ses modules. Lisez la suite.
Une fonction de thème est une fonction PHP de Drupal dont le nom commence par theme_, comme par exemple theme_username. Pour surcharger une fonction de thème :
Ouvrez votre fichier template.php dans un éditeur de texte.
Copiez la fonction de thème trouvée dans votre fichier template.php (une façon de trouver la fonction est de chercher son nom dans http://api.drupal.org. Devel indique aussi la référence des fonctions dans son menu).
Renommez la fonction copiée (voir ci-dessous). Si le préfixe de votre thème est "merveilleux" et que la fonction de thème que vous surchargez s'appelle "theme_xyz", la fonction sera renommée merveilleux_xyz
Si vous surchargez template_preprocess_xyz, le nouveau nom sera merveilleux_preprocess_xyz.
Pour changer un nom de fonction, par exemple theme_xyz en merveilleux_xyz, trouvez la ligne qui ressemble à ceci :
Assurez-vous de ne pas modifier ce qu'il y a entre les parenthèses !
Modifiez la fonction pour qu'elle fasse ce que vous souhaitez.
Uploadez le fichier template.php sur votre site, dans le dossier de votre thème.
Rafraîchissez le cache de thème (voir le registre de thèmes)
La première étape dans le processus de surcharge du code HTML de Drupal consiste à trouver qui fournit ce code. Ce que vous recherchez est :
Pour trouver le bon fichier ou la bonne fonction, commencez par trouver le dossier du module qui produit l'affichage (dans modules, sites/all/modules ou sites/votre_sous_dossier/modules).
Les fichiers de thèmes se trouvent habituellement au plus haut niveau du dossier du module; dans le dossier du sous-module en-dessous, ou dans un dossier appelé theme situé en-dessous.
Les fonctions de thèmes et les fonctions de pré-traitement des gabarits (template preprocess functions) se trouvent soit dans le fichier module (qui se termine par .module) ou dans un fichier inclus (qui se termine par .inc); le fichier se trouvera dans le dossier du module, ou dans un sous-dossier. Une bonne façon de trouver la bonne fonction ou le bon fichier est de rechercher un ID CSS ou une classe spécifique de l'élément HTML que vous voulez modifier, ou un texte unique produit par le module.
Une autre façon de trouver la fonction à surcharger est d'utiliser les fonctionnalités Theme developper du module Devel.
Certains modules prennent en compte les templates suggestions. Par exemple, dans Views 2, vous pouvez avoir des informations sur les thèmes quand vous modifiez une vue -- Views vous dit quels fichiers de thèmes seront utilisés pour produire la vue, et le premier de chaque liste est un fichier de thème situé dans le sous-dossier themes de votre module Views; c'est ce fichier de thème que vous devrez surcharger. Les autres noms de la liste sont des propositions pour les noms de fichiers qui seront placés dans votre thème, dépendants du niveau de détail de ce que vous voulez surcharger (par exemple, voulez-vous surcharger toutes les vues affichées, ou juste la vôtre ?).
Vous pouvez également utilisez les suggestions pour surcharger l'habillage des modules du core de Drupal. Par exemple, si vous voulez surcharger l'affichage d'un node d'un type de contenu en particulier, vous pouvez utilisez le fichier node.tpl.php de votre thème (ou du core Drupal) comme fichier à surcharger, le copier et le renommer en node-content_type_name.tpl.php. Vous trouverez plus d'informations sur les fichiers du core et sur les noms de fichiers suggestions sur la page Fichiers gabarits du noyau (core templates).
Une fois que vous avez localisé la bonne fonction ou le fichier à surcharger, suivez l'une des deux voies décrites dans les pages suivantes (actualisation en cours - Avril 2011 - NdK).
Cependant, si ce qui produit le code HTML que vous voulez surcharger ne se trouve ni dans une fonction de thème, ni dans une fonction de pré-traitement de gabarit, ni dans un fichier de thème, vous ne pourrez sans doute pas faire de modifications avec les seules fonctions. Vous devrez probablement consulter les forums ou de contacter le développeur du module pour trouver comment modifier son affichage.
Traduction de la page
http://drupal.org/node/348916
publiée / actualisée le 29 Janvier 2011 sur drupal.org
Vous enseigner le PHP sort largement du cadre de ce document, mais voici quelques-unes des techniques élémentaires qu'il est important de connaître pour travailler avec les thèmes.
Si pour une quelconque raison vous ne pouvez (ou ne voulez pas) utiliser le module Devel, il est possible d'utiliser une fonction PHP pour voir toutes les variables passées à votre fichier gabarit.
Pour cela, ajoutez le code suivant à n'importe quel fichier gabarit (tpl.php) de votre thème :
<?php
$vars = get_defined_vars();
print_r($vars);
?>les deux techniques précédentes utilisent beaucoup de ressources etpeuvent dévoiler des informations sensibles aux internautes. Aussi, vous ne devriez jamais les utiliser sur un site en exploitation.
Une fois que vous avez utilisé une des techniques précédentes, vous verrez de nombreuses variables et tableaux. Si vous le souhaitez, vous pouvez spécifier l'une de ces variables dans le fichier gabarit.
Par exemple, pour afficher le titre, vous pourrez ajouter le code suivant à votre fichier tpl.php :
<?php
print $title;
?>Pour afficher le titre du node, avec un lien pointant sur ce node et un peu de balisage, ajoutez le code suivant :
Un tableau permet le regroupement organisé de données ayant un rapport entre elles. Si vous voulez n'afficher qu'un item d'un tableau, vous spécifierez cet item en utilisant sa clé.
Par exemple, supposons que print_r vous affiche le tableau suivant :
Si vous ne voulez afficher que la ville, ajoutez le code suivant à votre fichier .tpl.php :
<?php print $location['city'] ?>
Il y a d'autres façons de manipuler votre contenu avec PHP. Pour plus d'informations à ce sujet, consultez un des manuels de référence PHP disponibles sur le web.
Traduction de la page
http://drupal.org/node/173880
publiée / actualisée le 11 Décembre 2010 sur drupal.org
Ce qui suit ne s'applique que si vous avez besoin de modifier le balisage par défaut. Vous pouvez sauter ces explications si votre présentation ne s'effectue que par le biais de feuilles de style.
Il y a trois étapes pour surcharger un thème. La première consiste à localiser la source des données, la seconde consiste à surcharger et la troisième consiste à comprendre son type.
Notez que les données du thème sont conservées en cache par Drupal, via le registre de thèmes (theme registry), ce registre doit être vidé lors de la mise en place des « surcharges ».
La source des données affichées peut être difficile à déterminer étant donné la hiérarchie des appels de thèmes, qui peuvent provenir de n'importe où dans le système.

La plupart des éléments de la page sont généralement appelés avec theme('page') et placés dans le gabarit page.tpl.php après mise en forme des éléments... (traduction incomplète, voir le texte an anglais ci-dessous)
Most of the page elements are typically pulled with theme('page') and placed inside the page.tpl.php template after rendering navigation bits, the bits within the navigation bits, block regions, the blocks within the block regions, etc. Each chunk of themed data is often referred to as a theming "hook".
Remarque : les fonctions de thèmes et de gabarit seront désormais dénommées « theming hook ». Le système comprend de nombreux hooks qui n'ont rien à voir avec les thèmes. Les hooks dont nous parlerons ici ne concerneront que les thèmes.
Obtenir l'origine de toute partie de code mis en forme peut se faire grâce au module Theme developer. Il dispose d'un outil de développement de thème qui permet d'afficher facilement l'origine de tout affichage, son type et de nombreuses autres données du thème. Reportez-vous au screencast pour une démonstration. Cet outil n'est pas disponible dans les versions Drupal antérieures à la 6, en raison de limitations techniques.
Le système de surcharges possède un ordre de cascades spécifique, comportant peu de dérogations. Le core Drupal et les modules fournissent un balisage par défaut géré par les hooks du thème. Si ce balisage ne convient pas aux exigences de votre thème, vous pouvez le remplacer par un autre, ce qui empêchera alors le chargement des valeurs par défaut. Les valeurs par défaut seront ainsi ignorées et toutes les modifications spécifiques au thème seront localisées dans le thème lui-même. C'est pourquoi vous ne devez jamais bricoler les fichiers en dehors de votre thème.

Si votre thème nécessite des contrôles qui ne peuvent être effectués dans le cadre des surcharges, vous pouvez alors intervenir sur le registre de thèmes ).
Remarque : bien que cela soit encore possible, le moteur PHPTemplate de Drupal 6 ne surcharge plus les fonctions de thème. Dans Drupal 5, c'est ce qui permettait l'utilisation de quelques theming hooks dans les gabarits de mise en page. Ce n'est plus nécessaire.
Il y a deux façons d'implémenter un theming hook : par le biais de fonctions ou par par le biais de gabarits. La méthode que vous utiliserez dépendra du but à atteindre ou de la nature de l'élément à personnaliser. Le core et les modules peuvent construire leurs sorties des deux façons, et les thèmes peuvent employer la même façon, ou la changer.

Les fonctions sont légèrement plus rapides que les gabarits, mais elles sont plus difficiles à appréhender par les concepteurs de thèmes habitués à travailler directement en xHTML. La rapidité dépendra de la nature du hook multiplié par le nombre de fois où il est appelé dans une page. Par exemple, l'utilisation de gabarits pour les theming hook "links" peut grandement impacter les performances pour des sites complexes et sollicités étant donné leur usage répété.
Voici deux exemples de surcharge à l'aide de Devel themer.
La fonction theme_menu_local_tasks affiche les onglets primaires et secondaires. Son theming hook est menu_local_tasks. Pour le surcharger, le préfixe « theme » du nom de la fonction doit être remplacé par le nom de votre thème. (Dans Drupal 6, vous pouviez aussi utiliser le nom du moteur de thème qui exécutait le thème, mais ce n'était pas une pratique conseillée. Cette possibilité a été supprimé dans Drupal 7).

Cet exemple, tiré de Drupal 6, montre Garland utilisant le nom du moteur de thème pour la surcharge. Une fois encore, dans Drupal 6 il est conseillé d'utiliser le nom du thème et dans Drupal 7, il est obligatoire d'utiliser le nom du thème.
Placer le code suivant dans le fichier template.php du thème surchargera les valeurs par défaut après avoir vidé le registre des thèmes.
Remplacez « drop » par le nom de votre thème.
<?php
function mytheme_menu_local_tasks() {
$output = '';
if ($primary = menu_primary_local_tasks()) {
$output .= "<ol class=\"tabs primary\">\n". $primary ."</ol>\n";
}
if ($secondary = menu_secondary_local_tasks()) {
$output .= "<ol class=\"tabs secondary\">\n". $secondary ."</ol>\n";
}
return $output;
}
?>
La seule modification ici est le remplacement du balisage liste non ordonnée (<ul>) par liste ordonnée (<ol>).
Un listing de toutes les fonctions de thème (theme functions) est disponible dans api.drupal.org.
Si c'est un gabarit qui implémente les valeurs par défaut, copier son fichier source dans votre thème le surchargera automatiquement, une fois que vous aurez vidé le registre de thème.
Voici un exemple pour search-theme-form.tpl.php. Notez que, dans ce cas, le point d'entrée est search_theme_form avec le gabarit utilisant des traits d'union au lieu de signes souligné.

C'est tout ce que vous avez besoin de faire. Ouvrez le gabarit copié dans un éditeur de texte pour faire vos modifications. Tous les fichiers tpl.php du core sont documentés. Cela vous donnera de bonnes informations sur ce qui peut être fait avec les sorties.
Remarque : les gabarits peuvent être placés dans n'importe quel dossier du thème. Cela permet une meilleure gestion et évite le désordre dans le dossier racine du thème.
Pages liées :
Convertir une fonction en gabarit demande un certain travail initial mais une fois réalisé, il est plus facile de travailler avec. Si vous travaillez avec un designer, la conversion lui permettra de se concentrer sur la seule conception et pas sur le codage.
Plusieurs gabarits sont déjà disponibles dans le core et beaucoup d'autres seront convertis dans les futures versions. Les modules additionnels qui respectent les bonnes pratiques devraient aussi avoir des gabarits disponibles. Ces instructions sont fournies pour les hooks des thèmes qui ne sont pas encore disponibles en gabarits.
La reconnaissance d'un hook comme gabarit est automatisée dans Drupal. Voici les seules règles pour déclencher cette modification :
Prenons la fonction theme_user_signature. Ici, le hook est user_signature. La création d'un fichier nommé user-signature.tpl.php dira à Drupal, lorsque le registre aura été vidé, que le hook est maintenant ce gabarit.
Tout contenu dans ce fichier remplacera la fonction. La tâche qui demande le plus de travail est le paramétrage des variables à utiliser dans ce fichier et cela se fait par le biais des fonctions de pré-traitement (pre-process functions).
Quelques remarques :
Le registre de thème de Drupal conserve en cache les données des hooks du thème et la façon de les manipuler.
Pour beaucoup de développeurs, le registre ne doit pas être traité directement. Rappelez-vous simplement de le vider quand vous ajoutez ou modifiez des gabarits ou des fonctions de thème. La modification de fonctions ou de gabarits existants ne demande pas de reconstruire le registre.
Pour vider le registre de thèmes, faites l'une des opérations suivantes :
Le registre de thèmes contient des données mises en cache indiquant à Drupal les hooks disponibles du thème et la façon de les manipuler selon leurs types. Dans les précédentes versions tous les appels de thème étaient exécutés à la volée. Comme beaucoup de travail est désormais effectué « sous le capot » par l'application, la mise en cache des instructions accélère les traitements, surtout en ce qui concerne les gabarits. Le moteur de thème qui exécute votre thème doit en principe automatiquement enregistrer pour vous les hooks de thème.
Il y a des situations particulières pour lesquelles vous aurez besoin de travailler directement avec le registre. Quand votre thème aura besoin d'enregistrer un nouveau hook qui n'était pas précédemment implémenté dans les couches inférieures du thème (celles du core, des modules, du moteur). Cela concerne des formulaires dont la présentation n'était pas explicitement réalisée par le core ou les modules mais était rattachée à la présentation défaut.
Les fonctions de pré-traitement ne s'appliquent qu'aux points d'entrée (hook) des thèmes implémentés en tant que gabarits. La tâche principale du pré-traitement est l'initialisation des variables qui seront utilisées dans les fichiers gabarits .tpl.php. Les fonctions de thèmes n'interagissent pas avec le pré-traitement.
Plain theme functions do not interact with preprocessors.
Remarques :
Il peut y avoir de nombreux pré-traitements pour chaque point d'entrée du thème. Chaque couche du noyau, les modules, les moteurs et les thèmes peuventt avoir le leur propre, chacun renseignant les variables au fur et à mesure, avant qu'elles ne soient mises en forme dans les gabarits. On conserve un balisage propre et facile à maintenir si on place la majeure partie des traitements dans les pré-traitements.
Voici la liste des pré-traitements. Quand ils existent, ils s'exécutent dans cet ordre :
Fourni par le core et toujours ajouté. Les variables générées ici (variables generated here) sont utilisées par chaque point d'entrée du gabarit.
2. template_preprocess_hook
Le module ou le core qui implémente le point d'entrée fourni le template_preprocess_hook. La création des variables spécifiques au point d'entrée se fait généralement ici.
3. moduleName_preprocess
A ne pas confondre avec le pré-traitement précédent. Celui-ci permet aux modules, qui n'implémentent pas initialement de point d'entrée, d'agir sur les variables. S'appliqueàtous les points d'entrées.
4. moduleName_preprocess_hook
Même principe que le pré-traitement précédent mais restreintàdes points d'entrées spécifiques.
5. engineName_engine_preprocess
Le pré-traitement des moteurs de thème. S'appliqueàtous les points d 'entrée.
6. engineName_engine_preprocess_hook
Autre pré-traitement pour moteurs de thèmes mais ne portant que sur un seul point d'entrée.
7. engineName_preprocess
DÉCONSEILLÉ - Premier pré-traitement pouvant être utilisé à l'intérieur du thème. Il peut être nommé d'après le nom du moteur qui fait tourner le thème. S'applique à tous les hooks.
8. engineName_preprocess_hook
DÉCONSEILLÉ - Autre pré-traitement nommé d'après le nom du moteur de thème mais propre à un seul point d'entrée.
9. themeName_preprocess
Ce pré-traitement est nommé d'après le nom du thème. S'applique à tous les hooks.
10. themeName_preprocess_hook
Identique au pré-traitement précédent mais pour un hook en particulier.
Tout ceci offre de nombreuses possibilités pour l'initialisation des variables. Dans la plupart des cas, ce sont les deux premiers pré-traitements qui seront utilisés. Le premier déclarant les variables par défaut et le second ajoutant un paramétrage spécifique à un point d'entrée.
Les modules additionnels tirant partie des pré-traitement (3 et 4) devraient documenter leur comportement. Ce point ne sera pas développé ici.
Quand c'est possible, le PHPTemplate par défaut ne s'appelle pas dans cette liste (5 et 6)
While it is possible, the default PHPTemplate does not inject itself to this list. (5 & 6)
Les thèmes peuvent ajouter leurs pré-traitement en septième position dans la liste. Les fonctions de pré-traitement devraient êtres ajoutées aux fichiers template.php des thèmes. Cependant, étant donné les problèmes listés ci-après, il est conseillé que les thèmes utilisent leurs propres noms comme préfixe (9 et 10). Il est possible d'agrandir cette liste au-delà du dixième pré-traitement ci-dessus en ayant des sous-thèmes ajoutant des pré-traitements avec leurs propres noms de sous-thème comme indiqué dans les deux derniers exemples.
Quelques remarques :
Notez qu'aucune valeur ne devrait être retournée par ces fonctions et que les variables sont passées par référence, comme l'indique la perluète devant les noms de variables : &$variable.
Les variables initialisées dans les premiers pré-traitements sont utilisées par l'ensemble des pré-traitements suivants, puisque passées par référence. Faites attention de ne pas remettre à zéro les variables ajoutées avant votre thème. Il est possible de les réinitialiser mais si vous le faites accidentellement vous aurez bien évidemment du mal à trouver l'origine d'un mauvais comportement.
Exemple d'initialisation d'un module implémentant le point d'entrée « foo » :
<?php
function template_preprocess_foo(&$variables) {
$variables['foo_list'] = array(
'list item 1',
'list item 2',
'list item 3',
);
}
?>
Le pré-traitement créé à partir du thème pour ajouter une valeur à la variable créée précédemment :
<?php
function drop_preprocess_foo(&$variables) {
// Ne pas faire ceci, à moins que vous ne sachiez pourquoi :
$variables['foo_list'] = array('list item 4');
// Faites plutôt ceci :
$variables['foo_list'][] = 'list item 4';
}
?>
Les variables que l'on retrouve dans le fichier gabarit sont les clés initialisées dans $variables. Dès lors, dans l'exemple précédent, la variable du gabarit sera retournée dans $foo_list.
Quand vous lancez un pré-traitement non spécifique à un point d'entrée de thème, un deuxième paramètre peut être utilisé qui passe toujours le hook. Utiliser une fonction de pré-traitement plus spécialisée, comme celle de l'exemple ci-dessus, est plus facile à maintenir mais si le code doit être partagé entre plusieurs points d'entrée, vous préférerez peut-être ce qui suit :
<?php
function drop_preprocess(&$variables, $hook) {
// Partagé entre les points d'entrée 'foo' et 'bar'
// Shared between the 'foo' and 'bar' theming hooks.
if ($hook == 'foo' || $hook == 'bar') {
$variables['foobar_item'] = 'foobar item';
}
// Specific to 'foo'. Propre à 'foo'
if ($hook == 'foo') {
$variables['foo_item'] = 'foo item';
}
// Specific to 'bar'. Propre à 'bar'
elseif ($hook == 'bar') {
$variables['bar_items'] = 'bar item';
}
}
?>
Dans Drupal 7, il existe deux jeux de fonctions de traitement de variables. Le premier est le jeu existant de fonctions de pré-traitement. Le deuxième rassemble les fonctions de traitement qui sont exécutées après les pré-traitements. Tous les préfixes et suffixes s'appliquent de la même façon à ce second jeu. C'est utile lorsque des variables doivent être travaillées en deux cycles. Par esemple, l'ajout de classes dans un tableau lors de la phase de « pré-traitement » puis leur mise à plat dans une chaîne de caractères lors de la phase de « traitement » afin qu'elle puisse être mise en forme dans une mise en page.
« Snippets » et « HowTo » connexes :
Traduction de la page http://drupal.org/node/226776
publiée/actualisée le 11 Mars 2011 sur Drupal.org
Ce qui suit est la référence des variables disponibles dans tous les fichiers gabarits. Elles sont générées par les fonctions de pré-traitement (preprocessor function) et template_preprocess. Les variables propres à un thème sont documentées dans leur fichier.
Le chemin du thème, relatif à l'installation de base. Exemple :sites/all/themses/monTheme.$is_admin
Traduction de la page http://drupal.org/node/350634
publiée / actualisée le 1 Mars 2011 sur drupal.org
Personnaliser le login Utilisateur, l'enregistrement et la réinitialisation du mot de passe est assez simple et utilise les concepts suivants :
Dans le dossier principal de votre thème, créez ou éditez votre fichier template.php.
Recherchez une fonction appelée yourtheme_theme() et modifiez-la pour lui ajouter ces valeurs retour ou, si elle n'existe pas, ajoutez le code suivant :
<?php
/**
* Registers overrides for various functions.
*
* In this case, overrides three user functions
*/
function yourtheme_theme() {
return array(
'user_login' => array(
'template' => 'user-login',
'arguments' => array('form' => NULL),
),
'user_register' => array(
'template' => 'user-register',
'arguments' => array('form' => NULL),
),
'user_pass' => array(
'template' => 'user-pass',
'arguments' => array('form' => NULL),
),
);
}
?>
Remarques sur ce code :
Maintenant, implémentez trois fonctions de pré-traitement (pre-process functions). Il y a de meilleures façons de coder ce qui suit, mais ça marche aussi très bien comme ça, alors n'hésitons pas !
<?php
function yourtheme_preprocess_user_login(&$variables) {
$variables['intro_text'] = t('This is my awesome login form');
$variables['rendered'] = drupal_render($variables['form']);
}
function yourtheme_preprocess_user_register(&$variables) {
$variables['intro_text'] = t('This is my super awesome reg form');
$variables['rendered'] = drupal_render($variables['form']);
}
function yourtheme_preprocess_user_pass(&$variables) {
$variables['intro_text'] = t('This is my super awesome insane password form');
$variables['rendered'] = drupal_render($variables['form']);
}
?>
Remarques sur ce code :
Créez les gabarits dont les noms correspondront aux valeurs passées à l'item template. Dans cet exemple nous n'avons besoin que de deux fichiers : user-login.tpl.php et user-register.tpl.php (veillez à taper un tiret et non un signe souligné)
Copiez le code suivant dans le fichier user-login.tpl.php. Modifiez-le si besoin pour user-login.tpl.php et user-register.tpl.php:
<?php print $intro_text ; ?> </p>
<div class="my-form-wrapper">
<?php print $rendered ; ?>
</div>
?>
Sauvegardez ces fichiers dans le dossier principal de votre thème.
Reconstruisez le cache : menu Administrer » Configuration du site » Performance » clic sur « Supprimer les données du cache » en bas de la page.
Maintenant, votre page de connexion Utilisateur contiendra le nouveau texte issu de la fonction de pré-traitement, et les fichiers tpl.php pourront être modifiés pour répondre aux besoins de votre site.
Traduction de la page
http://drupal.org/node/581786
publiée / actualisée le 1 Mars 2011 sur drupal.org
Cet exemple explique comment personnaliser le code HTML pour le bloc de recherche proposé par défaut. Ce bloc est créé par le module Search.
Cela peut se faire en utilisant la méthode fichier tpl.php :
Vous allez maintenant modifier le fichier qui se trouve dans le dossier de votre thème.
Dans search-block-form.tpl.php vous trouverez ce code-source :
Dans le code qui suit, on a enlevé l'instruction d'affichage précédente et on l'a remplacé par nouveau code HTML en charge de l'affichage, comme indiqué dans les directives figurant au début du fichier:
Ce code HTML a simplement été prélevé dans le code-source de la page d'origine (via Firebug, ou en affichant le code-source de la page) puis a été réorganisé. Vous pouvez bien évidemment ajouter d'autres balises, des CSS ou d'autres contenus dont vous auriez besoin. Assurez-vous cependant de ne pas modifier les noms et les ID des éléments, faute de quoi le formulaire ne sera pas correctement traité.
La destination des variables affichées dans ce code-source modifié est expliquée dans le fichier search-block-form.tpl.php initial (situé dans racine_du-site/modules/search/search-block-form.tpl.php).
Voici les clés de $search, disponibles dans les commentaires :
Traduction de la page http://drupal.org/node/778900
publiée/actualisée le 1 Mars 2011 sur drupal.org
Une liste de composants du noyau Drupal (core) et comment les surcharger.
Traduction de la page http://drupal.org/node/778884
publiée/actualisée le 1 Mars 2011 sur drupal.org
Le noyau Drupal génére des blocs qui disposent chacun d'un ID CSS unique. Avec Drupal 7, la plupart de ces ID ont été changés pour indiquer plus clairement le but du bloc.
Déclaration de style CSS, à la sauce Drupal 6 :
Déclaration de style CSS, à la sauce Drupal 7 :
Traduction de la page http://drupal.org/node/779016
publiée/actualisée le 1 Mars 2011 sur drupal.org
Dans Drupal 6, le fichier de mise en page reçoit une variable particulière nommée $mission. Elle contient l'objectif du site et l'affiche en page d'accueil. Les thèmes Drupal 6 disposent également d'une option dans leurs pages de configuration pour décider de l'affichage ou pas de l'objectif du site.
Dans .info :
Dans page.tpl.php :
<?php
print $mission;
?>Dans Drupal 7, le paramètre Objectif du site est supprimé, ainsi que son paramètre d'affichage. A la place, on utilise le système d'affichage des blocs dans des régions. Le système de thèmes de Drupal 7 dispose désormais d'une région nommée « highlighted » qui utilise le même affichage que l'objectif du site de Drupal 6. Le contenu de cette zone dépend désormais des paramètres d'affichage des blocs et il n'est plus limité à la page d'accueil du site.
Si votre thème déclare des régions personnalisées et n'incorpore pas une région « highlighted », vous pouvez déclarer la région en l'ajoutant à la liste des régions énumérées dans votre fichier .info. Si le thème ne déclare pas de régions dans le fichier .info, les régions fournies par le noyau seront automatiquement héritées et vous n'aurez qu'à vous assurer qu'elles soient traitées dans votre fichier page.tpl.php.
Dans .info :
Dans page.tpl.php :
<?php
print render($page['highlighted']);
?>
Traduction de la page http://drupal.org/node/778906
publiée/actualisée le 1 Mars 2011 sur drupal.org
Les liens Primaire et Secondaire de Drupal 6 ont été renommés en Main et Secondary dans Drupal 7. Les thèmes qui les utilisent doivent être actualisés pour utiliser les nouveaux noms de variables.
Traduction de la page http://drupal.org/node/778922
publiée/actualisée le 1 Mars 2011 sur drupal.org
Drupal dispose de la Taxonomy, une fonctionnalité du noyau qui permet aux utilisateur de « tagger » du contenu.
Traduction de la page
http://drupal.org/node/778926
publiée / actualisée sur drupal.org le 1 Mars 2011
Dans Drupal 6, les fichiers node.tpl.php peuvent utiliser la variable $taxonomy s'ils ont besoin d'accéder à un tableau de liens de taxonomie, non mis en forme, associé au node en cours.
Ce n'est plus le cas dans Drupal 7. A la place, tous les liens ont été déplacés dans l'objet $node.
Le tableau de liens de taxonomie non mis en forme se trouve désormais dans $node->content['links']['terms']['#value'] (à noter que ce tableau doit être utilisé avec précautions, puisque le texte qu'il contient n'a pas été « échappé » pour éviter les attaques XSS).
Les liens de taxonomie mis en forme n'ont pas été touchés; les fichiers node.tpl.php continuent d'y accéder comme avant, via la variable $terms. Dans la plupart des cas, c'est cette variable $terms que vous voudrez utiliser dans votre thème, et vous voudrez peut-être remplacer par elle les références à $taxonomy,comme dans l'exemple suivant :
6.x
7.x
Traduction de la page
http://drupal.org/node/988842
publiée / actualisée sur drupal.org le 1 Mars 2011
La nouvelle fonction theme_links($variables) de Drupal 7 ne reçoit qu'un tableau associatif pour toute la structure du lien. Comme vous pouvez le lire dans la documentation, vos liens doivent être passés en tant que tableaux associatifs via un argument links, mais ne décrit pas où et comment vous trouver cette variable.
L'exemple suivant explique comment faire avec le menu utilisateur :
<?php
$user_menu = menu_navigation_links('user-menu');
print theme('links', array(
'links' => $user_menu,
'attributes' => array(
'id' => 'user-menu',
'class' => array('links', 'clearfix'),
),
'heading' => array(
'text' => t('User menu'),
'level' => 'h2',
'class' => array('element-invisible'),
),
));
?>Qu'est donc l'argument user-menu dans la fonction menu_navigation_links($menu_name, $level = 0) ? C'est le nom du menu qui doit être affiché. Vous trouverez le nom du menu de cet exemple dans la page d'administration User menu (Administration > Structure > Menus > User menu ) ou http://example.com/admin/structure/menu/manage/user-menu/edit de votre site.
Dans cet exemple, la variable $user_menu n'est pas obligatoire, mais en procédant de la sorte, vous pourrez l'utiliser ensuite dans une instruction conditionnelle qui est plus courante dans un gabarit.
Traduction de la page
http://drupal.org/node/988694
publiée / actualisée sur drupal.org le 1 Mars 2011
Créez une fonction override dans votre fichier template.php :
<?php
function themename_links__system_MENUNAME_menu($variables) {}
?>Un paramètre $variables est passé et il contient un index nommé links. Chaque lien contient, entre autres, un href et un title.
A l'intérieur de votre fonction override, parcourez les liens :
<?php
foreach ($variables['links'] as $link) {}
?>Si nous voulons juste afficher une balise <a>, sans utiliser Drupal, nous écririons normalement :
<?php
echo "<a href="{$link['href']}">{$link['title']}</a>";
?>Cependant, Drupal dispose d'une fonction l() qui crée les liens pour nous. Il vaut mieux l'utiliser car elle traite les cas particuliers comme le lien <front>.
Aussi, nous ferons plutôt ça :
<?php
echo l($link['title'], $link['href'], $link);
?>La fonction l() s'occupera d'ajouter une classe active si le lien est destiné à la page en cours.
Au finale, votre fonction override ressemblera à ceci :
<?php
function themename_links__system_MENUNAME_menu($variables) {
$output = '';
foreach ($variables['links'] as $link) {
$output .= l($link['title'], $link['href'], $link);
}
return $output;
}
?>Vous devez être familiarisé avec la raison d'être du registre de thème (purpose) avant de poursuivre la lecture de cette page. Les explications qui suivent portent sur l'enregistrement manuel d'un point d'entrée de thème et sur comment le manipuler (manipulated)
Le cas le plus fréquent demandant l'enregistrement manuel des points d'entrée sont les formulaires. Le design des éléments de formulaire est personnalisable mais il existe un autre aspect concernant la façon dont ils sont traités.
Dans un formulaire, on peut trouver des éléments génériques tels que cases à cocher, boutons radios, listes déroulantes, boutons, etc. Chacun de ces éléments est personnalisable et surcharger leurs styles n'implique pas de devoir enregistrer manuellement les points d'entrée qui leurs sont associés.
Le nouvel aspect dont il est question vient avec les formulaires personnalisés dans lesquels chaque élément est disposé de façon très particulière. Dans certains formulaires, ces éléments viennent déjà organisés, designés et enregistrés. Pour ces formulaires, l'enregistrement manuel n'est pas nécessaire.
The forms that are not explicitly themed will default to how form API renders them.
Voici un exemple pour deux des formulaires de recherche enregistrés par le module Search, la boite de recherche et le bloc de recherche. Chaque formulaire est associé à un identifiant unique.
L'enregistrement des identifiants sert également de point d'entrée de thème. Dans cet exemple, il s'agit de search_theme_form et search_block_form.
<?php
function search_theme() {
return array(
'search_theme_form' => array(
'arguments' => array('form' => NULL),
'template' => 'search-theme-form',
),
'search_block_form' => array(
'arguments' => array('form' => NULL),
'template' => 'search-block-form',
),
...
);
}
?>
L'API Form passe le contrôle de sa présentation au handler du point d'entrée enregistré.
Form API passes control of its presentation along to the handler of the registered hook.
Dans cet exemple, il est enregistré avec le type de gabarit et ses arguments par défaut. La sortie sera facilement modifiée par le thème puisqu'il a déjà été déclaré comme gabarit (template).
L'auto-découverte des points d'entrée ne se produit qu'avec les points d'entré de thèmes enregistrés avant la couche du thème (voir illustration : http://www.kolossaldrupal.org/docs/la-surcharge-themes#theming-overrides)
Il y a un autre formulaire de recherche qui n'est pas enregistré. C'est le formulaire avec l'identifiant search_form utilisé dans la page de recherche principale. Les données du formulaire sont construites dans une fonction (constructed in a function), tout comme n'importe quel autre formulaire, mais on laisse l'API Form s'occuper de la présentation en la basant sur la structure de données du formulaire.
Pour pouvoir la surcharger, vous devez l'enregistrer depuis votre thème avec un hook_theme. Mettez le code suivant dans votre fichier template.php en remplaçant le préfixe « drop » par le nom de votre thème. Le point d'entrée est l'identifiant du formulaire :
<?php
function drop_theme() {
return array(
'search_form' => array(
'arguments' => array('form' => NULL),
),
);
}
?>Les formulaires au design personnalisé ont toujours un argument form. Puisque le gabarit n'a pas été spécifié, le point d'entrée sera vu comme une fonction de thème et non comme un gabarit. Une fonction de thème doit avoir un préfixe correspondant au thème qui l'a enregistré. phptemplate_* ne marchera pas. Aussi, avec la valeur précédente, la fonction de thème ressemblera à ceci :
<?php
function drop_search_form($form) {
$advanced = '';
$simple = '';
foreach (element_children($form) as $element) {
if ($element == 'advanced') {
$advanced .= drupal_render($form[$element]);
}
else {
$simple .= drupal_render($form[$element]);
}
}
return $advanced . $simple;
}
?>
La seule chose modifiée ici est le positionnement du formulaire de recherche avancé.
La manipulation manuelle du registre de thème est une fonctionnalité avancée. Vous pouvez en prendre connaissance en cliquant sur « Theme registry » dans le bloc fourni par le module Devel. Il peut également être retourné avec theme_get_registry.
A compléter...
(c'est la version anglaise qui indique : A compléter...)
Traduction de la page http://drupal.org/node/223440
publiée/actualisée le 11 Mars 2011 sur Drupal.org
Les « templates suggestions » sont des maquettes de mise en pages (gabarits) alternatives basés sur des fichiers .tpl.php existants.
Ces « suggestions » sont utilisées quand une circonstance particulière est rencontrée et qu'un fichier correspondant existe. Toutes les couches du core, des modules, des moteurs de thèmes et des thèmes peuvent fournir des suggestions. Vous pouvez les imaginer comme étant des conseils qui indiquent à l'application de choisir une mise en page adaptée à un contexte donné. Le concept est simple mais il s'agit d'une puissante fonctionnalité fournissant une autre couche de personnalisation.
Module Devel affichant une « template suggestion » pour possible "page" templates.
Une liste des toutes les suggestions pour le core peut être trouvée dans Core templates and suggestions.
Les noms de ces suggestions sont indiquées dans les fonctions de pré-traitement (preprocess functions). Il en existe de nombreuses fournies par le core. Si vous avez besoin de les enrichir davantage, ajoutez un pré-traitement pour le hook de thème dans votre fichier template.php. L'exemple ci-dessous ajoute des suggestions pour les hooks node et page. On peut en ajouter à n'importe quel hook implémenté en tant que gabarit.
Une liste de toutes les suggestions du core est disponible sur la page Drupal 6, suggestions de modèles de mise en page.
Le préfixe « drop » doit être remplacé par le nom de votre thème.
<?phpfunction drop_preprocess_page(&$variables) {
global $user;
// Add a single suggestion based on the throttle module in core.
if (module_invoke('throttle', 'status') && isset($user->roles[1])) {
$variables['template_file'] = 'page-busy';
}
// Add multiple suggestions for pages based on the logged in user's roles.
if (!empty($user->roles)) {
foreach ($user->roles as $role) {
$filter = '![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s';
$string_clean = preg_replace($filter, '-', drupal_strtolower($role));
$variables['template_files'][] = 'page-'. $string_clean;
}
}
}
?>
Vous pouvez améliorer le code précédent pour avoir des suggestions pour chaque type de contenu de votre site.
Ensuite, créez votre fichier de mise en page sous la forme page-node-votre_type_de_contenu. Si ce fichier est manquant, ce sera la mise en page par défaut qui sera utilisée.
Il y a deux façons d'ajouter ces suggestions :
Dans l'exemple précédent, Drupal tentera d'utiliser une fichier nommé page-busy.tpl.php lorsque le seuil d'engorgement sera atteint pour les les utilisateurs anonymes (1 est habituellement affecté à l'identifiant des rôles anonymes). Les autres conditions informent Drupal de regarder les gabarits basés sur les rôles attribués à l'utilisateur courant, par exemple « page-authenticated-user.tpl.php ». Si aucun ne correspond, le gabarit de base page.tpl.php sera utilisé.
Ce sont des exemples simples. Vous pouvez paramétrer n'importe quel contexte basé sur les données dont vous disposez.
Quelques remarques :
<?php
// Ne faites pas ceci :
$variables['template_files'] = array('hook-suggestion');
// Faites plutôt cela :
$variables['template_files'][] = 'hook-suggestion';
?>Traduction de la page http://drupal.org/node/171188
publiée/actualisée le 3 Janvier 2010 sur drupal.org
Cette page fournit des informations de base sur l'architecture sous-jacente des thèmes. Elle intéressera ceux qui ont besoin d'une compréhension plus poussée sur la façon dont fonctionnent les surcharges.
Une pratique courante en programmation consiste à dissocier la partie programmation proprement dite de la partie présentation des données. Il y a de nombreuses raisons à cela, la plus évidente étant que les compétences requises pour la programmation sont très différentes de celles demandées pour l'élaboration d'une charte graphique ou d'une interface utilisateur efficace.
En tant que concepteur de thème, vous pouvez contrôler certains aspects des données disponibles, mais vous ne pouvez agir que sur leur présentation. Seuls le core Drupal et les modules travaillent avec les données saisies. Par exemple, un module peut implémenter un formulaire avec une présentation par défaut et une gestion des saisies utilisateur, puis sauvegarder les données dans la base de données. Le rôle du thème consiste simplement à modifier la présentation.
Dans Drupal, cette abstraction est assurée par le biais des fonctions de thème. C'est un accès vers le sous-système des thèmes. Il permet aux moteurs de thème de fournir une couche intermédiaire, facultative, à destination des « tagging languages » tels que PHPTAL ou Smarty. Il permet aussi aux thèmes de contrôler toutes les balises de présentation. Les moteurs de thèmes sont facultatifs en tant que « tagging languages ». PHPTemplate est le moteur par défaut. Comme son nom l'indique, il utilise le langage PHP lorsque les variables affichées sont mélangées avec du balisage xHTML.
A partir de Drupal 6, les exigences pour la création de thèmes ont été sensiblement réduites.

Toutes les couches peuvent implémenter une personnalisation de l'affichage des données, mais (à quelques exceptions près) la surcharge ne peut avoir lieu qu'à l'intérieur des couches du thème. Les moteurs de thème peuvent surcharger la présentation des sorties provenant du core ou des modules, tandis que les thèmes peuvent surcharger tout le reste.
Notez que le moteur PHPTemplate ne surcharge aucune sortie mais que d'autres moteurs de thèmes peuvent le faire. Il existe le cas particulier d'un module pouvant modifier les sorties en partie ou en totalité, mais il a été prévu pour des situations très particulières qui ne devraient en principe pas se produire dans les cas courants. Il s'agit du module devel theme qui surcharge toutes les sorties, pour aider à la conception des thèmes (aid theme development). D'autres infos sont exposées dans cette section.
Vous pouvez ignorer tout ceci en grande partie si votre thème est entièrement basé sur des styles CSS, mais si c'est le balisage qui doit être modifié, vous devez savoir comment localiser sa création pour pouvoir le modifier.
L'utilisation de JavaScript ajoute des effets de présentation dynamiques aux thèmes. En plus des fichiers JavaScript personnalisés, beaucoup de développeurs Drupal apprécient l'utilité de jQuery. Il s'agit d'une bibliothèque JavaScript légère incorporée à Drupal. jQuery contient tout ce qui traite le DOM, les événements, les effets et les fonctions AJAX.
Drupal 6.0 à 6.2 utilisent jQuery 1.2.3. Drupal 6.3 utilise une mise à jour de jQuery 1.2.6.
Pour le développement d'un module qui a besoin de la toute dernière version de jQuery, appliquez le module jQuery update. Le fichier jquery.js est inclus automatiquement.
Dans Drupal 7, jQuery 1.8 a été ajouté au noyau (core). Vous trouverez les fichiers jQuery UI dans misc/ui et vous pourrez ajouter des fichiers javascript et CSS à vos pages à partir de là avec les fonctions drupal_add_js() et drupal_add_css(), il n'y a pas d'appels de fonctions spéciales requis.
Tout comme il y a un fichier style.css qui est automatiquement incorporé à votre thème, il y a un fichier nommé script.js qui est automatiquement inclus pour vous permettre d'ajouter du code JavaScript à un thème. Ce fichier doit être placé dans le dossier principal du thème. Dans Drupal 6 ce fichier était automatiquement ajouté, avec Drupal 7 le fichier doit être spécifié dans le fichier .info.
Il y a désormais un mécanisme de theming pour le code JavaScript. Travaillant de concert avec le fichier script.js automatiquement inclus (si aucun autre fichier script n'est déclaré dans .info), cela permet plus de liberté aux concepteurs de thèmes concernant la gestion des événements dans les sites Drupal. Les développeurs utilisent souvent du code JavaScript pour insérer un balisage dans une page. Toutefois, ce code peut contenir du HTML codé en dur dans le script, ce qui ne permet pas de modification du code inséré.
Les modules fournissent des fonctions de thème par défaut dans le drupal.theme.prototype.namespace. Par exemple, le code suivant utilise la fonction de thème powered (pour afficher une icône « propulsé par Drupal») :
<?phpDrupal.theme.prototype.powered = function(color, height,
width) {
return '<img src="/misc/powered-'+ color +'-'+ height +'x'+
width +.png" />";
}
?>Une méthode pour l'appeler serait :
<?php$('.footer').append(Drupal.theme('powered', 'black', 135, 42));
?>IMAGE
Le code qui suit dans un thème surcharge tout ça, par exemple en appelant un fichier situé dans un dossier de thème particulier au lieu du dossier /misc :
<?phpDrupal.theme.prototype.powered = function(color, height,
width) {
return '<img
src="/sites/all/themes/powered_images/powered-'+ color +'-'+
height +'x'+ width
+.png" />";
}
?>Cet exemple met à profit le code JavaScript pur. La fonction ci-dessus sera placée dans un fichier JavaScript du thème, ce qui vous épargne la modification des fichiers JavaScript liés aux modules.
Les fonctions JavaScript sont entièrement libres quant aux valeurs qu'elles retournent. Cela peut aller de la simple chaîne de caractères jusqu'aux types de données complexes telles que : objets, tableaux et éléments jQuery. Reportez-vous à votre fonction de thème initiale pour voir ce que votre fonction personnalisée devrait retourner.
Pour plus d'information sur l'utilisation de JavaScript et jQuery, reportez-vous à la section JavaScript du guide du développeur. Vous pouvez aussi joindre le groupe JavaScript sur Groups.Drupal.org pour trouver des conseils sur Javascript et jQuery: http://groups.drupal.org/javascript.
Reste à compléter : introduction à jQuery, comment ajouter un aggrégat (?) (patch sur http://drupal.org/node/119441) etc.