Une image gravatar dans la sidebar pour les derniers commentaires

TibawbawTibawbaw Member
mars 2013 modifié dans Modifications
Salut à tous,


Voilà, je me suis un peu amusé avec mon thème aujourd'hui, et je voulais ajouter dans les derniers commentaires de ma sidebar l'avatar Gravatar de l'auteur.


Pour celà, j'ai du bidouiller deux fichiers : class.plx.show.php et sidebar.php


Tout d'abord, il faut savoir comment fonctionne Gravatar. Les utilisateurs inscrits ont un avatar enregistré sur le site de Gravatar, que l'on peut récupérer grace à l'adresse mail de l'utilisateur. Il faut hacher cette adresse avec md5. Exemple, avec mon adresse mail passée en md5, j'obtiens ce code : e15e636dcbe625dec8f070555fd70f14

Mon avatar est donc disponible à cette adresse : http://www.gravatar.com/avatar/e15e636dcbe625dec8f070555fd70f14


Si l'adresse mail n'est pas reconnue par Gravatar, vous pouvez passer un paramètre pour qu'il génère un avatar "aléatoirement" (je mets de guillemets, car cet avatar sera toujours le même pour cet email).


J'ai un peu bidouillé pour les personnes n'ayant pas laissé d'adresse mail dans leur commentaire (je n'ai pas obligé les utilisateurs à faire cela). Si l'utilisateur n'a pas laissé d'adresse mail, je prend juste son nom, que je passe en md5. Cela permet de tout de même générer un avatar, qui sera toujours le même si l'utilisateur utilise toujours le même pseudo. La limite de cette bidouille : si deux personnes laissent un commentaire sans adresse email et avec le même pseudo, ils auront le même avatar !



Je voulais donc que la fonction lastComList (dans le fichier class.plx.show.php) me retourne le md5 de l'adresse mail de l'utilisateur, et si l'adresse mail n'est pas renseignée, le md5 du nom d'utilisateur.

J'ai donc ajouté les lignes suivantes ligne 1096, juste avant "# On génère notre ligne" :

[== PHP ==]
if ($com['mail'] == '')
{	$md5 = md5( strtolower($com['author']) );
	$row = str_replace('#com_gravatar',$md5, $row);
}
else
{	$md5 = md5( strtolower($com['mail']) );
	$row = str_replace('#com_gravatar',$md5, $row);}


La fonction lastComList peut donc prendre une nouvelle variable : #com_gravatar




Dans mon sidebar, j'appelle la liste de mes derniers commentaires de la façon suivante :

[== PHP ==]
$plxShow->lastComList('<div style="text-align:justify; height:75px;"><a href=#com_url><img  src="http://www.gravatar.com/avatar.php?gravatar_id=#com_gravatar?d=identicon" class="avatar" height=\'75\' width=\'75\' style="float:left;" alt="#com_author"/>#com_author a dit</a> : #com_content(100)</div><br />');


J'appelle donc la fonction, et je construis l'URL de mon gravatar :
http://www.gravatar.com/avatar.php?gravatar_id= <-- Base fixe
#com_gravatar <-- mon mail/nom d'utilisateur en md5
?d=identicon <-- L'option qui permet de générer un avatar aléatoire à partir du md5 si celui-ci n'existe pas dans leur base de données



Et voilà, au final, on a une icône à gauche du commentaire, comme vous pouvez le voir sur mon site : www.rock-anecdotes.fr. Ca ne sert à rien, mais je trouve ça sympa :-)



En espérant que ça puisse inspirer quelqu'un...


Thibaut

Réponses

  • bankaibankai Member
    J'adore personnellement :) je trouve plus esthétique comme ça .
    J'adore le rock, Hard Rock et Metal :) sympa le site.
  • yep cool comme modif.
    Je me demande s'il est possible de faire des ancres dans ce genre de fonction. Histoire d'ajouter la modif avec un plugin ...
    Tu pourrais aussi mettre un fil d'Ariane sur ton site ...
    Etant fan de PinkFloyd, je ne connaissais pas l'origine de leur nom :D Merci. Coïncidence, j'ai des places pour The Australian Pink Floyd Show ce soir à Montpellier ... mais je ne peux pas y aller ! :(
  • bg62bg62 Member
    ce qui serait "top" serait d'en avoir un plugin ...
    car les modifs dans le core, je commence à en revenir ... dès qu'il y a une mise à jour, ou ça prend plus de temps, ou on ne se rappelle plus ....
  • StéphaneStéphane Member, Former PluXml Project Manager
    C'est pas ce que vous cherchez ?
    http://forum.pluxml.org/viewtopic.php?id=2937

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • bg62bg62 Member
    Stéphane a écrit:
    C'est pas ce que vous cherchez ?
    http://forum.pluxml.org/viewtopic.php?id=2937
    :cool:
    il est passé
    il a vu
    il a donné le lien
    !
  • EXCELLENT ! ADOPTÉ :D !!!!!
  • Stéphane a écrit:
    C'est pas ce que vous cherchez ?
    http://forum.pluxml.org/viewtopic.php?id=2937


    Pas tout à fait, je voulais que les avatars apparaissent dans la sidebar, dans la liste des derniers commentaires. Pas dans les commentaires sous les articles !
  • J'appelle donc la fonction, et je construis l'URL de mon gravatar :
    http://www.gravatar.com/avatar.php?gravatar_id= <-- Base fixe
    #com_gravatar <-- mon mail/nom d'utilisateur en md5
    ?d=identicon <-- L'option qui permet de générer un avatar aléatoire à partir du md5 si celui-ci n'existe pas dans leur base de données

    Désolé mais je suis un peu lent, je trouve cela interressant mais pas tout compris.
    je comprend la modif à faire dans le fichier "class.plx.show" et ce qu'il faut afficher dans la sidebar

    Mais pas compris la manip pour passer le pseudo via md5 ?
    et comment on la passe dans l'Url ?
    Qu'est-ce qu'on en fait ?


    Donc si la personne est inscrite sur "gravatar.com" elle a son image, sinon image alléatoire.
    Et pour le plugin "hamgravatar" il faut que les personnes soient incrites aussi?
    Est que les deux peuvent fonctionner en même temps?
  • Op un petit up, on ne sait jamais
  • Je vais répondre pour "ma partie", étant donné que je ne sais pas comment fonctionne hamgravatar (mais je suppose que c'est la même chose).


    Alors pour répondre au pseudo passé en md5, c'est juste un tour de pass-pass que je me suis amusé à faire. En fait, c'est uniquement parce que je n'ai pas forcé les utilisateurs à indiquer leur email lorsqu'ils laissent un commentaire. Du coup, je peux me retrouver avec un commentaire qui a bien un auteur, mais pas une adresse mail associée. Quand c'est le cas, j'utilise le nom de l'utilisateur à la place de l'adresse mail, pour obtenir tout de même un md5. Si l'utilisateur reposte un autre commentaire avec le même pseudonyme, il aura donc le même md5, et la même image.


    Je vais essayer d'en faire un plugin (je n'en ai jamais fait, ça sera une première !), je n'ai pas énormément de temps là tout de suite, mais promis, dès que je peux, je m'y attèle !
  • Merci de ta répnse,

    En fait je voulais juste savoir si la modif faite dans le fichier"class.plx.show.php"suffisait ou s'i fallait faire autre chose
    je vais déja tester cela en attendant

    A+
  • TibawbawTibawbaw Member
    mars 2013 modifié
    La modification dans class.plx.show.php et aussi du coup l'appel de la fonction lastComList dans ton thème :


    $plxShow->lastComList('<div style="text-align:justify; height:75px;"><a href=#com_url><img src="http://www.gravatar.com/avatar.php?gravatar_id=#com_gravatar?d=identicon" class="avatar" height=\'75\' width=\'75\' style="float:left;" alt="#com_author"/>#com_author a dit</a> : #com_content(100)</div><br />');


    Ce sont les deux seules modifications normalement ! (j'ai mis en gras ce qui normalement devrait correspondre à ton md5)


    Quand je plugin sera fait, ça sera normalement largement plus simple ! (je vais essayer de faire ça bien !)
  • C'est bon Tibawbaw
    je viens de piger le truc avec gravatar que je n'avais jamais utilisé.

    Ah au fait si tu retrouves ton fichier "toshop" pour l'exemple de ton "background avatar" je suis tjrs preneur
    A+
  • philou87philou87 Member
    mars 2013 modifié
    Merci pour ton fichier "psd.zip" mais je cherchais plutôt le comment faire et j'ai enfin trouvé (en fait c'est tout con)
    j'utilise INKSCAPE logiciel super bien LIBRE
    http://www.byteweiser.com/2011/11/09/inkscape-tutorial-5-how-to-make-clouds-and-sunbeams/

    pour ton histoire de magie avec l'image du gravatar dans la sidebar, j'ai testé mais pas réussit;
    sans l'url cela ne marche pas, je ne récupère pas l'image de gravatar; je guette ton plugin à venir...
    A+
  • Peux tu poster le code que tu as mis dans ta sidebar ?
  • philou87philou87 Member
    mars 2013 modifié
    Salut,
    j'ai mis ton hack:
    $plxShow->lastComList('<div style="text-align:justify; height:75px;"><a href=#com_url><img  src="http://www.gravatar.com/avatar.php?gravatar_id=#com_gravatar?d=identicon" class="avatar" height=\'75\' width=\'75\' style="float:left;" alt="#com_author"/>#com_author a dit</a> : #com_content(100)</div><br />');
    
    avec le <?php devant et?> en fin ???

    mais je récupère juste une image aléatoire et le prob aussi c'est que cela m'affiche
    #com_author a dit
    si je mets l'adresse mail c'est ok le gravatar passe

    Dans mon commentaire.php de mon template, j'ai ceci:
    <div class="gravatar">
    	 <img alt='' src='http://www.gravatar.com/avatar.php?gravatar_id=<?php echo md5( strtolower($plxShow->plxMotor->plxRecord_coms->f('mail')) ) ?>&default=http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802.jpgG&amp;r=G' class='avatar avatar-50 photo' height='110' width='110' />	 <div class="gravatar_mask"></div>
    	</div>
    

    En fait ton explication pour le fichier (lib/class.plx.show.php) est pas claire au niveau du placement du(if/else)
    Dans la fonction on a au début:
    public function lastComList($format='<li><a href="#com_url">#com_author a dit :</a><br/>#com_content(50)</li>',$max=5,$art_id='',$cat_ids='') {.............
    

    les numéros de lignes ne correspondent pas (j'utilise notepad++)
  • Voilà exactement ma fonction dans le fichier class.plx.show.php :


    [== PHP ==]
    	/**
    	 * Méthode qui affiche la liste des $max derniers commentaires.
    	 * Si la variable $art_id est renseignée, seulement les commentaires de cet article seront retournés.
    	 *
    	 * @param	format	format du texte pour chaque commentaire (variable: #com_id, #com_url, #com_author, #com_content(num), #com_content, #com_date, #com_hour)
    	 * @param	max		nombre de commentaires maximum
    	 * @param	art_id	id de l'article cible (24,3)
    	 * @param	cat_ids	liste des categories pour filtrer les derniers commentaires (sous la forme 001|002)
    	 * @return	stdout
    	 * @scope	global
    	 * @author	Florent MONTHEL, Stephane F
    	 **/
    	public function lastComList($format='<li><a href="#com_url">#com_author a dit :</a><br/>#com_content(50)</li>',$max=5,$art_id='',$cat_ids='') {
    
    		# Hook Plugins
    		if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastComList'))) return;
    
    		# Génération de notre motif
    		if(empty($art_id))
    			$motif = '/^[0-9]{4}.[0-9]{10}-[0-9]+.xml$/';
    		else
    			$motif = '/^'.str_pad($art_id,4,'0',STR_PAD_LEFT).'.[0-9]{10}-[0-9]+.xml$/';
    
    		$count=1;
    		$datetime=date('YmdHi');
    		# Nouvel objet plxGlob et récupération des fichiers
    		$plxGlob_coms = clone $this->plxMotor->plxGlob_coms;
    		if($aFiles = $plxGlob_coms->query($motif,'com','rsort',0,false,'before')) {
    			# On parcourt les fichiers des commentaires
    			foreach($aFiles as $v) {
    				# On filtre si le commentaire appartient à un article d'une catégorie inactive
    				if(isset($this->plxMotor->activeArts[substr($v,0,4)])) {
    					$com = $this->plxMotor->parseCommentaire(PLX_ROOT.$this->plxMotor->aConf['racine_commentaires'].$v);
    					$artInfo = $this->plxMotor->artInfoFromFilename($this->plxMotor->plxGlob_arts->aFiles[$com['article']]);
    					if($artInfo['artDate']<=$datetime) { # on ne prends que les commentaires pour les articles publiés
    						if(empty($cat_ids) OR preg_match('/('.$cat_ids.')/', $artInfo['catId'])) {
    							$url = '?article'.intval($com['article']).'/'.$artInfo['artUrl'].'#c'.$com['numero'];
    							$date = $com['date'];
    							$content = strip_tags($com['content']);
    							# On modifie nos motifs
    							$row = str_replace('#com_id',$com['numero'],$format);
    							$row = str_replace('#com_url',$this->plxMotor->urlRewrite($url),$row);
    							$row = str_replace('#com_author',$com['author'],$row);
    							while(preg_match('/#com_content\(([0-9]+)\)/',$row,$capture)) {
    								if($com['author'] == 'admin')
    									$row = str_replace('#com_content('.$capture[1].')',plxUtils::strCut($content,$capture[1]),$row);
    								else
    									$row = str_replace('#com_content('.$capture[1].')',plxUtils::strCheck(plxUtils::strCut(plxUtils::strRevCheck($content),$capture[1])),$row);
    							}
    							$row = str_replace('#com_content',$content,$row);
    							$row = str_replace('#com_date',plxDate::formatDate($date,'#num_day/#num_month/#num_year(4)'),$row);
    							$row = str_replace('#com_hour',plxDate::formatDate($date,'#hour:#minute'),$row);
    							if ($com['mail'] == '')
    							{	$md5 = md5( strtolower($com['author']) );
    								$row = str_replace('#com_gravatar',$md5, $row);
    							}
    							else
    							{	$md5 = md5( strtolower($com['mail']) );
    								$row = str_replace('#com_gravatar',$md5, $row);}
    							# On genère notre ligne
    							echo $row;
    							$count++;
    						}
    					}
    				}
    				if($count>$max) break;
    			}
    		}
    	}
    
  • OK pour la class.plx.show.php
    pour la sidebar faut il mettre les balises <?php et ?>
  • Plutôt que de modifier le core, tu pourrais faire un plugin qui utilise le hook plxShowLastComList, avec un return true à la fin pour stopper le reste du code de la méthode lastComList. Cela t'évitera des déconvenues lors de mises à jour de pluxml.
  • Je veux bien te croire, et j'aimerais le faire... Sauf que pour l'instant j'en suis incapable, je ne sais absolument pas créer un plugin :-D Il faut que j'étudie la chose !
Connectez-vous ou Inscrivez-vous pour répondre.