montrer l'adresse e-mail [résolu]

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.

Bonjour,
En principe, l'adresse électronique d'un utilisateur n'est pas montrée publiquement. Je voudrais néanmoins l'afficher sur la page profil, vu que c'est un site familial et donc cette adresse n'est pas secrète. Dois-je la faire re-rentrer par mes utilisateurs dans un champ profil ???

Merci,

Version de Drupal : 

En fait, je suis complètement gourde, elle fait partie des champs montrables dans une vue utilisateurs (et j'ai une vue utilisateurs), on peut même y mettre un mailto: et tout et tout. Donc dans mon cas cette solution suffira. Mais merci d'avoir fait la recherche, elle servira sans doute à quelqu'un d'autre -qui-pensera-à-chercher-avant-de-demander,LUI.

En revanche, je vais corser un peu l'exercice : j'ai un type de contenu avec un champ UserReference. Je voudrais afficher (dans le node-type.tpl.php cette fois) l'adresse électronique de l'utilisateur en question (son nom, et entre parenthèses son adresse sans mailto:). Sachant que le champ s'appelle field_event_qui, quelqu'un pourrait-il m'indiquer la variable à récupérer (j'ai examiné ce que contemplate me renvoyait, mais que nenni).

Avec toute ma reconnaissance enthousiaste.

Ca sent la petite fonction Drupal de derrière les fagots, ça...

<?php
$userref
= user_load(array('uid' => $uid));
print
$userref->mail;
?>

Le $uid étant ton champ user reference. Cela devrait aussi marcher avec 'name'.

ce n'est pas très loin, mais

<?php
 $userref
= user_load(array('uid' => $uid));
print
$userref->mail;
?>

me ramène l'utilisateur qui a créé le noeud
et

<?php
$userref
= user_load(array('uid' => $node->field_event_qui));
print
$userref->mail;
?>

me ramène l'utilisateur 1

Voilà une demi-heure que je tourne en rond à tâtonner, là il faut vraiment que je me mette au lit ; c'est frustrant !!

Merci pour le coup de pouce ...

Je croyait que tu avais une vue utilisateur où tu récupérait ton user reference, non? Donc installe Views CustomField, et ajoute un champs Customfield PHP à ta vue, du genre :

<?php
 
$userref
= user_load(array('uid' => $data->field_event_qui));
print
$userref->mail;
?>

Ce ne sera sans doute pas $data->node_field_event_qui qu'il faudta mettre, mais fait juste print_r($data) dans le customfield php, et il te donnera tous les noms, par ex. dans mon cas [node_field_event_qui] (ca dépend de comment est construite ta requête).

Customfield PHP est sans doute le champs de vue que j'utilise le plus!

p.s. : j'espère que tu as bien dormi quand même!

Alors, excuse moi si je n'ai pas été assez claire, cet affichage je le veux dans le noeud lui-même, pas dans la vue. Donc j'ai travaillé hier en insérant ton code dans le node-evenement.tpl.php.

Je n'avais pas pensé à intituler la variable $data (je n'y connais rien en code drupal, c'est la première fois que je travaille sur une fonction, donc je ne sais pas utiliser la doc de l'API). Je ne pourrai vérifier que vendredi soir car je ne suis pas chez moi (et j'ai un réseau un peu pourri), mais je ferai le test et je te tiens au courant.

Merci !

Oulà, non, $data est une variable spécifique à customfield PHP qui ne te donnera rien de bon dans un fichier template.

Dans un fichier template, je ne suis plus sûr du code, mais essaie plutôt $node->field_event_qui[0]['uid'].

Ca veut dite que $node->field_event_qui[0]['uid'] fonctionne, donc?

Si oui, dernier conseil pour la route : la fonction menu_get_object() renvoie notamment la variable $node courante. Donc dans une page, si dans un champs cck ou dans le corps tu écris print_r(menu_get_object()); tu pourra voir comment s'appellent toutes tes variables.

C'était bien ça ! :-)))
Je donne le code final pour qui en aura besoin :

<?php
 $userref
= user_load(array('uid' => $node->field_event_qui[0]['uid'])); print $userref->name; print t('&nbsp;(son adresse : ').$userref->mail; print t(')')
?>

Supermerci à toi emerya, c'était ma toute première fonction Drupal, me voici officiellement codeuse Drupal :->> !

Hé bien il va te falloir un foreach ou un while pour afficher toutes les valeurs.

Le [0] indique que c'est la première valeur. [1] sera la seconde, etc..

Un petit code du genre :

<?php
foreach ($node->field_event_qui as $nb){
 
$userref= user_load(array('uid' => $node->field_event_qui[$nb]['uid']));
  print 
$userref->name; print t('&nbsp;(son adresse : ').$userref->mail;
  print
t(')')
}
?>

A tester...

Je ne comprends pas ; ton code parait logique, pourtant il me retourne Parse error: syntax error, unexpected '}' in .../node-evenement.tpl.php on line 32. Il est logique de fermer l'accolade qu'on a ouvert !??..
Je continue à chercher, à tâtons... si tu vois quelque chose... ?

Oui mais là j'ai droit à un message rouge de drupal qui me dit

    * warning: Illegal offset type in .../node-evenement.tpl.php on line 30.
    * warning: Illegal offset type in .../node-evenement.tpl.php on line 30.

Et en dessous je vois juste s'afficher " (son adresse : ) (son adresse : ) "
(La bonne nouvelle, c'est qu'il y a effectivement deux valeurs à ce champ dans mon node de test).
J'ai cherché ce que signifiat le illegal offset type, apparemment c'est propre à la programmation orientée objet ; ce ne sont pas mes quelques notions en prog fonctionnelle qui vont m'aider (la POO je n'y connais rien !) !!...

Bon allez, pour clôturer la question, on va faire un while :

<?php
$no
=0;
while (
$node->field_event_qui[$no]['uid']){
 
$userref= user_load(array('uid' => $node->field_event_qui[$no]['uid']));
  print 
$userref->name;
  print
t('&nbsp;(son adresse : ').$userref->mail;
  print
t(')');
 
$no++;
}
?>

Ce n'est pas ce qu'il y a de plus propre, mais ça devrait fonctionner sans trop de pb.

edit : ha, oui, j'ai fait une erreur dans le foreach, vu que c'est un tableau qui contient des tableaux. Mais en fait le while est plus approprié car si tu met par ex. la limite à 4 entrées et que l'utilisateur n'en rentre que 2, tu aura 2 champs vides. Avec le while, il s'arrête dès qu'une case du tableau est vide.