Personnalisation et surcharge du Login Utilisateur, enregistrement et réinitialisation du mot de passe

Date du document original en anglais : 26 Août 2009 – 13h22 http://drupal.org/node/350634



Personnaliser le login Utilisateur, l'enregistrement et la réinitialisation du mot de passe est assez simple et utilise les concepts suivants :

  • pré-traitement pour initialiser les variables
  • dépôt des fonctions dans le registre de thèmes
  • création d'un ou plusieurs gabarits de thèmes.

Étape 1

Dans le dossier principal de votre thème, créez ou éditez votre fichier template.php.

Étape 2

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 :

  • Modifiez le nom de la fonction : remplaçez « yourtheme » par le nom de votre thème.
  • La valeur de template peut être la même pour les trois items. Dans cet exemple, on utilise un gabarit différent pour chaque cas : user-login, user-register et user-pass.
  • Le nom du gabarit doit utiliser un tiret et non un signe souligné.
  • C'est bien user_pass et non user_password.

 

Étape 3

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 :

  • Modifiez le nom de la fonction : remplaçez « yourtheme » par le nom de votre thème.
  • La ligne $variables['intro_text'] place le texte qui la suit dans la variable $variables, qui est, par la suite, acheminée au gabarit via la variable $intro_text.
  • La deuxième ligne façonne le formulaire et ajoute le code dans le tableau $variables, qui est passé au gabarit via la variable $rendered.

Étape 4

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é)

Étape 5

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>
?>

 

Étape 6

Sauvegardez ces fichiers dans le dossier principal de votre thème.

Étape 7

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.

Commentaires

Ne marche pas pour register !

Bonjour, Après avoir suivi le tutoriel je dois dire que cela ne semble pas fonctionner pour "register" puisqu'aucune description ne s'affiche. Pourtant cela marche très bien avec les autres. Je sais qu'il va être difficile de trouver la solution mais bon, pour info je suis sous zen_classic, dans template.php, dans la fonction j'ai aussi un array( 'template' => 'user-login-block', 'arguments' => array('form' => NULL), ), ?> J'en profite pour poser une deuxième question plus intéressante je trouve. Avec ce tuto on personnalise le contenu de ces nodes mais comment supprimer les trois onglets peu attrayants que sont "Créer un nouveau compte", "Se connecter" et "Demander un nouveau mot de passe" qui sont situés au dessus de ces trois pages ?

Salut, cela marche pour

Salut, cela marche pour register tu devrais vérifier ton code. Pour ce qui est des liens il faut jouer avec le tableau $form et supprimer les bonnes lignes : unset($variables['form']['links']); Moi mon problème c'est que la fonction render génère des div qui aide pas beaucoup à personnaliser le code.