[Résolu] Question toute bête sur les templates

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonsoir

Je prend le temps de découvrir Drupal. J'ai trouvé le moyen de résoudre mon problème initial en me baladant sur le web, mais j'aimerai qu'on m'éclaire sur la mécanique des templates avec Drupal.

Je voulais simplement modifier le bloc qui permet a un utilisateur de se connecter (id: user_login_block), je souhaite inverser deux balises html. Donc pour faire bien, je me suis dit que le mieux était de passer par la modification du template concerné or impossible de mettre la main ce sur dernier ! j'ai recherché la chaine "user_login" dans tout mon dossier Drupal mais aucun fichier template n'apparait.

Comme dis avant, j'ai pu trouver le contenu du template "à priori" mais j'aimerai comprendre, surtout pour la suite...si jamais je tombe sur un bloc/formulaire que je souhaite modifier, savoir comment m'y prendre pour le trouver..

En vous remerciant =)

Forum : 
Version de Drupal : 

Bonjour,

Pour faire simple et sans trop rentrer dans les détails du fonctionnement du moteur de template de Drupal 6/7.

Prenons l'exemple du module "block".
emplacement du module block core : /modules/block.tpl.php

Tout template (même core) est déclaré par un hook_theme() ( en l'occurrence block_theme() )

function block_theme() {
  return array(
    'block' => array(
      'render element' => 'elements',
      'template' => 'block',
...
    ),

On voit qu'il déclare un template "block.tpl.php" (l'extension du fichier tpl.php est implicite).
A la racine du module "block" on retrouve donc un fichier block.tpl.php utilisé par défaut.

Il suffit de copier ce fichier dans le thème actuel du site pour le modifier.
exemple d'emplacement de theme custom /sites/all/themes/VotreTemplate/templates/block.tpl.php

En modifiant comme ceci le fichier block.tpl.php tous les bloc du site utiliserons le même template.

Si vous voullez aller un peu plus loin et personnaliser indépendament chaque bloc (ce qui est souvent le cas), vous devez utiliser un nom de template qui permettera au moteur de choisir le bon fichier à utiliser.

C'est ce que l'on appel les "theme hook suggestions".

Toujours avec l'exemple du module block, ces theme hook suggestions sont généré dans un hook_preproccess.
Voici ce que l'on trouve dans le module block.

function template_preprocess_block(&$variables) {
...
  $variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->region;
  $variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->module;
  // Hyphens (-) and underscores (_) play a special role in theme suggestions.
  // Theme suggestions should only contain underscores, because within
  // drupal_find_theme_templates(), underscores are converted to hyphens to
  // match template file names, and then converted back to underscores to match
  // pre-processing and other function names. So if your theme suggestion
  // contains a hyphen, it will end up as an underscore after this conversion,
  // and your function names won't be recognized. So, we need to convert
  // hyphens to underscores in block deltas for the theme suggestions.
  $variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->module . '__' . strtr($variables['block']->delta, '-', '_');
...

On à donc à notre disposition plusieurs suggestions :
block__NOMDELAREGION
block__NOMDUMODULE
block__NOMDUMODULE__BLOCKDELTA

concrétement, il suffit de créer un fichier
block--NOMDELAREGION.tpl.php
block--NOMDUMODULE.tpl.php
block--NOMDUMODULE--BLOCKDELTA.tpl.php

Block delta correspond au nom de votre block.

Donc si nous voulions modifier le bloc de connexion :

Le bloc est déclaré dans le module "user"

function user_block_info() {
  $blocks['login']['info'] = t('User login');
  // Not worth caching.
  $blocks['login']['cache'] = DRUPAL_NO_CACHE;
}

Sont delta est : login.

Donc en suivant les hook suggestions : block--user--login.tpl.php

Plus d'info sur cette page : https://drupal.org/node/1089656