[résolu] comment remplacer le texte du bouton "se connecter" par "ok" dans le bloc connexion utilisateur ?

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.

Voilà, ça peut paraître simple aux habitués de l'overriding, mais moi je bloque là-dessus. Je voudrais, de la manière la plus simple qui soit, tout simplement remplacer le texte du bouton "se connecter" par "ok" dans le formulaire généré par le bloc connexion utilisateur.

Mais attention, je ne veux pas que cela s'applique à la page de connexion se trouvant à l'adresse /user. Uniquement dans le bloc connexion utilisateur.

Une idée facile à mettre en oeuvre ?

Merci d'avance.

Version de Drupal : 

Si c'est un bouton image, tu passes par CSS et si c'est du texte, tu va devoir créer un module dans lequel tu vas mettre un hook_form_alter qui va modifier le texte du bouton avant que le formulaire ne soit publié.

Ce n'est pas un bouton image mais bien du texte. D'où mon souci car je suis plutôt un "themeur CSS" qu'un développeur PHP... Du coup, même si je te remercie pour cette suggestion, je ne vois pas trop comment faire concrètement. Sans te demander de me faire un tuto, peux-tu m'en dire plus ?

Merci d'avance.

Difficile sans faire un petit tuto :)

Si tu es themeur, la solution qui t'es dédiée (celle dont je parlais était la solution développeur) est la suivante :

1/ Repérer l'identifiant de ton formulaire. Il n'y a pas de moyen très simple pour cela, sauf à aller voir dans le code. El n'occurence l'identifiant du formulaire dans le bloc "se connecter" est user_login_block.

2/ Tu rajoutes dans le template.tpl.php de ton thème, un hook_theme pour détourner le rendu du formulaire vers un template classique.

function mon_theme_theme() {
return array(
    'user_login_block' => array(
     'template' => 'user-login-block',
     'arguments' => array('form' => NULL)
    ));
}

3/ Tu ajoutes une fonction de preprocessing qui va te permettre de modifier ton formulaire (Lorsque tu ne sais pas où taper, tu peux mettre dans la fonction un var_dump($vars); pour repérer ce que tu dois modifier). Dans la foulée, on va aussi générer le rendu formulaire et la stocker dans $variables['rendered'] qui donnera dans le template la variable $rendered. Tu aurais pu faire cela dans le template mais la règle de base est "le moins de code possible dans les templates".

function mon_theme_preprocess_user_login_block(&$variables) {
      $variables['form']['submit']['#value']="ok";
       $variables['rendered']=drupal_render($variables['form']);
}

4/ Tu va créer le nouveau template user-login-block.tpl.php qui va renvoyer simplement la variable

$rendered</code<
<code>
<?php print $rendered; ?>

5/ Ajoutes à la fin de ton template.php un appel au rebuild du "themes registry" comme cela tu verras les résultats sans avoir à vider les caches, juste par F5.

   drupal_rebuild_theme_registry();

6/ Lorsque tout fonctionne, tu METS EN COMMENTAIRE le rebuild de la registry, sous peine de transformer ton site en grosse brouette :)

Ça marche nickel. MERCI. Enfin un tuto clair et direct sur la question ! Je crois que tu devrais en profiter pour le mettre dans la doc...

PS : attention, t'as fait une petite boulette à l'étape 4, tu devrais éditer ton post pour éviter les confusions ; en effet, comme tu l'expliques très bien, il faut uniquement copier/coller le code <?php print $rendered; ?> dans le fichier user-login-block.tpl.php

Encore merci.

edit : ah oui, pour ceux qui comme moi n'ont pas le PHP comme langue maternelle, il va de soi qu'il faut remplacer 'mon_theme' par le nom de votre thème dans les morceaux de code proposés...

De rien, la technique est un peu vicieuse et pas super documentée :) Mais une fois qu'on a le coup, il est possible de modifier n'importe quel formulaire à la volée. Le seul truc que je n'aime pas beaucoup, c'est le template qui ne sert finalement pas à grand chose. Je suis persuadé qu'il doit y avoir moyen de s'en passer en faisant appel à une fonction de thème php. Faudrait tester.

PS: l'édition des posts est un peu erratique par ici, et là je ne peux plus changer le mien :)

PS': pense à changer ton post d'origine (si tu peux le faire ;-) pour mettre un [résolu]

Bonjour Yoran,

Effectivement on peut se passer d'un template en faisant une fonction de thème, voici mon code testé et placé dans le template.php de mon thème :

function montheme_theme() {
  return array(
    'user_login_block' => array(
      'arguments' => array('form' => NULL)
      )
    );
}

function montheme_user_login_block($form) {
  $rendered = '';
 
  $form['submit']['#value'] = 'OK';

  $rendered .= drupal_render($form);

  return $rendered;
}

Salut...
Wow..j'avais le même souhait pour ce bouton de connexion. Je cherchais depuis un moment un moyen simple (genre css ou trouver la chaîne "Se connecter" dans les fichiers.., j'ai aussi voulu chercher dans les fichiers .po qui semblent traduire en français...)
Et je suis tombé sur ce tuto.
Chapeau , ça fonctionne en local chez moi. Mais avant de faire de même sur le site en ligne, n'y a-t-il vraiment pas de chaîne de caractère genre ici "Se connecter" quelque part dans tous les fichiers du site ? Comment peuvent-ils afficher ça sans que cela soit écrit quelque part (puisque ce n'est pas une image) ? ça me dépasse.
Merci pour une éventuelle explication de cela.

Sinon encore chapeau pour ce tuto..Je n'ai pas tout capté, mais en tous cas ça fonctionne.

Tiffoun

Je dis ca je dis rien et ton tuto est nickel Yoran, mais c'est un peu prendre un bazooka pour tuer une mouche nan ?
Vu que ce champs est du texte, il est tout simplement traduisible par l'interface drupal, donc tu vas dans "admin/build/translate/search", tu cherches "Log in" ou "Se connecter" et hop tu peux changer ce champs la ;)

Le mot clef de ce problème est "dans le formulaire de connexion". Il y a un autre moyen qui fonctionne effectivement pour toutes les occurrence de "connectez-vous" en passant simplement par la traduction.

Maintenant tu peux évidement modifier le code source (dans modules/user) mais c'est une TRES mauvaise idée. Mets le doigt là dedans et tu passeras des nuits blanches à mette à jour ta version de Drupal ;-)

Il y a bien une chaîne "Se connecter" que tu peux traduire à la volée via Construction du site > Traduction de l'interface. J'ai essayé sauf que ça va te le traduire partout où on trouve l'expression "se connecter", y compris sur les pages de type /user, /user/register, ce qui, dans mon expérience, n'est pas du tout satisfaisant... Donc la solution de Yoran est vraiment la meilleure. Et en tout cas adaptée précisément à ma demande. ;-)