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

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 :

  • 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.

Pourquoi j ai plus creer un nouveau compte

salut tout le monde

J'aimerais savoir pourquoi après cette exemple, j'ai plus adapter le login. i.e. pour demander un mot de passe. mais d un coup j ai perdu la creation d un compte (register). je comprends pas. j utilise la version 6.1.19 de drupal.

Si quelques c est pourquoi,j aimerais bien comprendre. :)

salut et bonne journee

fred s.

Bonjour, existe-t-il un tuto

Bonjour, existe-t-il un tuto équivalent dans le cas d'un thème Zen ?

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <css>, <php>, <html>, <ccss>, <ccss>, <drupal5>, <drupal6>, <html>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • You may use [view:viewname] tags to display listings of nodes.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet d'éviter le spam :
1 + 0 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.