Annonce

#1 2010-08-09 19:38:16

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Intégrer le nom de l'utilisateur dans un texte

Bonjour ;

------------------------------
EDIT :
P@t a proposé une meilleure solution, un peu plus bas dans le fil.
------------------------------


suite à de nombreuses demandes à ce sujet, pour pouvoir intégrer le nom de l'utilisateur dans un texte (description de catégorie, bloc [extension by plg] PWG Stuffs...), copier le code suivant dans le plugin personnel à l'aide de LocalFiles Editor :

Code:

// js_username_prefilter_trigger
// Adds a JavaScript variable named USERNAME in the header template,
// if this Smarty variable is set.
//
// no variables, no return
//
add_event_handler('init', 'js_username_prefilter_trigger');

function js_username_prefilter_trigger() {
  global $template;
  $template->set_prefilter('header', 'js_username_prefilter');
}

function js_username_prefilter($content, &$smarty) {
  return preg_replace(
    '/<\/head>/',
    '</head> <script type="text/javascript"> var USERNAME = "{if isset($USERNAME)}{$USERNAME}{/if}"; </script>',
    $content
  );
}

Une fois le Plugin Personnel activé dans la liste des plugins, purger les templates compilés : avec Piwigo 2.1.x, Admin > Outils > Maintenance > Purger les templates compilés .

Après quoi un texte pourra afficher le nom de l'utilisateur en y intégrant la partie en gras du texte suivant :

Test en cours.<br />
<script type="text/javascript">
if (USERNAME != '') document.write('Bonjour, ' + USERNAME + ' !<br />');
</script>

Eh bé voilà !

Dans cet exemple, que j'ai inclus dans un bloc PWG Stuffs, on voit :

Test en cours.
Eh bé voilà !

si aucun utilisateur n'est identifié sur la galerie ;
et :

Test en cours.
Bonjour, Luc !
Eh bé voilà !

si l'utilisateur "Luc" est actuellement identifié.

Démonstration :

non identifié ;
identifié en tant qu'utilisateur "Piwigo" (grâce à [extension by LucMorizur] Event Cats ('scusez pour la pub en passant ;-) !)).
N'hésitez pas à créer un nouvel utilisateur pour vérifier que ça fonctionne !

:-)

Dernière modification par LucMorizur (2010-08-10 17:59:23)

Hors ligne

#2 2010-08-10 13:18:29

P@t
Équipe Piwigo
Nice
2007-06-13
5694

Re: Intégrer le nom de l'utilisateur dans un texte

Bonne astuce, mais on peut faire bien plus simple:

add_event_handler('loc_begin_index', 'js_username_replace');

function js_username_replace()
{
  global $template, $user;

  $template->append('footer_elements', '
    <script type="text/javascript" >
    document.body.innerHTML = document.body.innerHTML.replace("USERNAME","'.$user['username'].'");
    </script >');
}

Ensuite, il suffit simplement d'écrire ceci dans le block perso de PWG Stuffs:

Bonjour USERNAME

Pour info, pas besoin d'utiliser un préfiltre pour rajouter du code dans le head de la page, il suffit d'utiliser la variable smarty $head_elements (exactement comme le code ci-dessus avec footer_elements)


P@t

Hors ligne

#3 2010-08-10 15:01:37

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

Je m'attendais un peu à ce genre de réponse...

En fait, j'étais vachement fier d'avoir trouvé un truc a priori utile pour une fois ;-) , et je me demandais ce que P@t allait en penser...

P@t a écrit:

Bonne astuce,

Cool !

P@t a écrit:

mais on peut faire bien plus simple:

(...)

J'en étais sûr |-( ...
Bien évidemment, ça fonctionne, j'ai mis à jour mes deux démos (non identifié et identifié).

P@t a écrit:

Pour info, pas besoin d'utiliser un préfiltre pour rajouter du code dans le head de la page, il suffit d'utiliser la variable smarty $head_elements (exactement comme le code ci-dessus avec footer_elements)

Je vois ça. J'avais vu $head_elements , mais je m'étais dit... enfin peu importe puisque c'était faux, mais je ne pensais pas pouvoir l'utiliser dans ce cas-là.

Merci P@t :-) !

Dernière modification par LucMorizur (2010-08-10 15:02:09)

Hors ligne

#4 2010-08-10 15:26:14

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

P@t a écrit:

Pour info, pas besoin d'utiliser un préfiltre pour rajouter du code dans le head de la page, il suffit d'utiliser la variable smarty $head_elements (exactement comme le code ci-dessus avec footer_elements)

Après coup, je me souviens pourquoi je n'ai pas utilisé $head_elements : je créais une variable JavaScript à l'aide d'une variable Smarty, donc je devais créer une variable Smarty (en l'occurrence, ç'aurait été un élément du tableau $head_elements) qui contenait une référence à une variable Smarty, à savoir a priori qqch du style :

$template->append('head_elements', '<script type="text/javascript"> var USERNAME = "{if isset($USERNAME)}{$USERNAME}{/if}"; </script>');

Je me suis dit que la partie "en Smarty" du code ci-dessus (la partie "{if isset($USERNAME)}{$USERNAME}{/if}") ne serait pas compilée puisqu'elle n'apparaîtrait qu'après la compilation.

Mais peut-être avais-je trop réfléchi :-) .

Une remarque sinon : en déclarant l'handler sur loc_begin_index , si je ne me trompe, cela ne fonctionne que sur les pages créées en passant par index.php . Donc entre autres pas sur les pages des images.

Dernière modification par LucMorizur (2010-08-10 15:26:59)

Hors ligne

#5 2010-08-10 15:39:29

P@t
Équipe Piwigo
Nice
2007-06-13
5694

Re: Intégrer le nom de l'utilisateur dans un texte

LucMorizur a écrit:

$template->append('head_elements', '<script type="text/javascript"> var USERNAME = "{if isset($USERNAME)}{$USERNAME}{/if}"; </script>');

Je me suis dit que la partie "en Smarty" du code ci-dessus (la partie "{if isset($USERNAME)}{$USERNAME}{/if}") ne serait pas compilée puisqu'elle n'apparaîtrait qu'après la compilation.

En effet, tu avais raison... mais... pourquoi utiliser une variable smarty? On peut faire par exemple:

$template->append('head_elements', '<script type="text/javascript"> var USERNAME = "'. ($user['id'] != $conf['guest_id'] ? $user['username'] : '') .'"; </script>');


P@t

Hors ligne

#6 2010-08-10 15:40:32

P@t
Équipe Piwigo
Nice
2007-06-13
5694

Re: Intégrer le nom de l'utilisateur dans un texte

LucMorizur a écrit:

Une remarque sinon : en déclarant l'handler sur loc_begin_index , si je ne me trompe, cela ne fonctionne que sur les pages créées en passant par index.php . Donc entre autres pas sur les pages des images.

Of course, j'ai utilisé machinalement loc_begin_index...


P@t

Hors ligne

#7 2010-08-10 15:50:23

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

P@t a écrit:

mais... pourquoi utiliser une variable smarty?

Ah mais tout simplement parce que je n'ai pas du tout pensé -- pour des raisons que je n'évoquerai pas ici ;-) -- à utiliser les variable PHP à l'intérieur du code PHP o_O ........... (la première qui rigole, euh... eh ben attention...)

P@t a écrit:

Of course, j'ai utilisé machinalement loc_begin_index...

On pourrait choisir loc_end_page_tail pour être sûr de pouvoir l'utiliser sur toutes les pages ?

Hors ligne

#8 2010-08-10 15:58:18

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: Intégrer le nom de l'utilisateur dans un texte

@Luc : ton astuce est-elle à jour ?

En tous cas bravo !!!


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#9 2010-08-10 16:40:30

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

Gotcha a écrit:

@Luc : ton astuce est-elle à jour ?

En tous cas bravo !!!

Ben, c'est plus l'astuce de P@t, maintenant ;-) ...

En tous cas, en utilisant loc_end_page_tail comme handler, ça fonctionne tout aussi bien sur les pages index (donc les pages [extension by P@t] Additional Pages, entre autres : pratique !), ainsi que sur les pages picture. Et, a priori, sur d'autres aussi, au cas où.

Je pense qu'il serait préférable d'avoir une confirmation de P@t, mais pour l'instant on peut dire que c'est à jour de la façon suivante :

add_event_handler('loc_end_page_tail', 'js_username_replace');

function js_username_replace()
{
  global $template, $user;

  if (!defined('IN_ADMIN')) $template->append('footer_elements', '
    <script type="text/javascript" >
    var regex = /USERNAME/g;
    document.body.innerHTML = document.body.innerHTML.replace(regex,"'.$user['username'].'");
    </script >');
}

Ensuite, il suffit simplement d'écrire ceci dans n'importe quel texte :

Bonjour USERNAME

Je modifierai ce post s'il y a lieu.

:-) !

Dernière modification par LucMorizur (2010-08-11 00:48:31)

Hors ligne

#10 2010-08-10 19:00:09

P@t
Équipe Piwigo
Nice
2007-06-13
5694

Re: Intégrer le nom de l'utilisateur dans un texte

Va pour loc_end_page_tail alors ;-)

Bon, de toute façon, depuis le temps que je veux le faire, je vais rajouter une option pour le bloc perso de PWG Stuffs qui permettra d'écrire du code smarty dans un bloc perso! D'ici la rentrée, j'espère...


P@t

Hors ligne

#11 2010-08-10 19:04:04

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

P@t a écrit:

je vais rajouter une option pour le bloc perso de PWG Stuffs qui permettra d'écrire du code smarty dans un bloc perso!

YESSS !!

Merci P@t ;-) !

Hors ligne

#12 2010-08-10 20:30:32

flop25
Équipe Piwigo
2006-07-06
6477

Re: Intégrer le nom de l'utilisateur dans un texte

Hors ligne

#13 2010-08-10 22:17:51

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

Oui mais alors si on commence à utiliser jQuery... moi je démissionne, hein ;-) ...

Merci flop25 ; mais la mise en œuvre de l'option de P@t me semble plus simple. Mais c'est quand même intéressant de voir aussi cette solution.

Hors ligne

#14 2010-08-11 00:25:00

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

|-( ...

P@t a écrit:

Va pour loc_end_page_tail alors

Rajoutons tout de même une condition, permettant d'éviter que USERNAME soit remplacé aussi dans les pages d'admin, où l'on veut justement l'inclure dans certains textes... je modifie mon post "de conclusion" :-/ ...

(Rajout de if (!defined('IN_ADMIN')) )

Dernière modification par LucMorizur (2010-08-11 00:26:18)

Hors ligne

#15 2010-08-11 00:47:50

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: Intégrer le nom de l'utilisateur dans un texte

... et aussi une petite regex avec option "g", afin de remplacer toutes les occurrences de USERNAME : jusqu'ici, seule la première occurrence était remplacée.

Post modifié. Là je crois que ça commence à être correct ;-) !

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter facebook newsletter Faire un don Piwigo.org © 2002-2020 · Contact