Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Cette astuce permet d'afficher qui se trouve sur le même forum ou topic que vous (avec lien menant vers le profil).
PunOnline est requis.
Trouver dans footer.php (vers la ligne 113) ceci :
// Display debug info (if enabled/defined)
if (defined('PUN_DEBUG'))
{
// Calculate script generation time
list($usec, $sec) = explode(' ', microtime());
$time_diff = sprintf('%.3f', ((float)$usec + (float)$sec) - $pun_start);
echo "\t\t\t".'<p class="conr">[ Générée en '.$time_diff.' sec., '.$db->get_num_queries().' requêtes exécutées ]</p>'."\n";
}Après, ajouter
// Utilisateurs présents sur le forum/topic - Début
if($footer_style == 'viewforum' || $footer_style == 'viewtopic') {
// Initialisation des variables
$list_users = '';
if($footer_style == 'viewforum') {
$cur_id = $forum_id;
$message = 'Utilisateurs parcourant ce forum';
} else {
$cur_id = $id;
$message = 'Utilisateurs présents sur ce topic';
}
// Requête
$users_here = $db->query('SELECT o.user_id, o.ident, o.current_ip, u.realname FROM '.$db->prefix.'online AS o LEFT JOIN '.$db->prefix.'users AS u ON o.user_id=u.id WHERE o.current_page="'.basename($_SERVER['PHP_SELF']).'" AND current_page_id='.$cur_id);
// Div - Début
$users_here_content = '<div id="users_here">';
$users_here_content .= '<strong>'.$message.'</strong> : ';
while($user_here = $db->fetch_assoc($users_here)) {
// Si l'utilisateur n'est pas loggé, on masque une partie de son ip
if($user_here['ident'] == $user_here['current_ip']) {
$guest = true;
$max = strrpos($user_here['ident'], '.')+1;
$user_here['ident'] = substr($user_here['ident'], 0, $max).'xxx';
} else {
$guest = false;
}
// Si l'utilisateur a affiché son nom réel dans son profil, on l'affiche dans l'info-bulle du lien menant vers son profil
$realname_user = !empty($user_here['realname']) ? ' ('.$user_here['realname'].')' : '';
// On ajoute l'utilisateur en cours à la liste de tous les utilisateurs actuellement présents
$list_users .= ($guest) ? '<span style="font-weight:normal;">'.$user_here['ident'].'</span>, ' : '<a href="profile.php?id='.$user_here['user_id'].'" title="Voir le profil de '.$user_here['ident'].$realname_user.'" style="text-decoration:none; font-weight:normal;">'.$user_here['ident'].'</a>, ';
}
$users_here_content .= !empty($list_users) ? substr($list_users, 0, -2) : 'aucun';
$users_here_content .= '</div>';
$users_here_content .= '<hr style="clear:both; visibility:hidden;" />';
// Div - Fin
// Affichage
echo $users_here_content;
}
// Utilisateurs présents sur le forum/topic - Finet enfin, ajouter à la fin de votre fichier base.css situé dans le dossier style/imports/ ceci :
/* Footer > Qui est sur le forum/topic */
div#users_here {
float: left;
vertical-align: middle;
width: 100%;
height: 20px;
margin-top: 30px;
padding-top: 10px;
border-top: 1px solid gray;
}RESTRICTIONS (optionnel)
A) Cacher la liste à certains groupes
Modifier la 1ère ligne (la condition if) avec ceci (selon la restriction voulue) :
// Topic modos & admins, Forum tout le monde : if($footer_style == 'viewforum' || ($footer_style == 'viewtopic' && $pun_user['g_id'] <= PUN_MOD)) { // Topic admins, Forum tout le monde : if($footer_style == 'viewforum' || ($footer_style == 'viewtopic' && $pun_user['g_id'] == PUN_ADMIN)) { // Topic+Forum seulement personnes loggées (membres, modos & admins) : if($pun_user['g_id'] != PUN_GUEST && ($footer_style == 'viewforum' || $footer_style == 'viewtopic')) { // Topic+Forum seulement modos & admins : if($pun_user['g_id'] <= PUN_MOD && ($footer_style == 'viewforum' || $footer_style == 'viewtopic')) { // Topic+Forum seulement admins : if($pun_user['g_id'] == PUN_ADMIN && ($footer_style == 'viewforum' || $footer_style == 'viewtopic')) {
FONCTIONNALITES SUPPLEMENTAIRES (optionnel)
A) Cacher certains groupes de la liste
1) Après :
// Initialisation des variables $list_users = '';Ajouter :
$hide_grp_in_list = ''; // Groupe(s) à cacher (les séparer par une virgule si plusieurs) // 1=Administrateurs, 2=Modérateurs, 3=Invités (les parties d'IP donc)2) Dans la requête SQL (variable $users_here), trouver 'u.realname' (situé avant le mot 'FROM') et rajouter après :
, u.group_id3) Trouver $list_users .= près de l'accolade de fin du while et ajouter avant :
if(!in_array($user_here['group_id'], explode(',', $hide_grp_in_list)))
Dernière modification par nicolas2k10 (21-11-2006 18:40:59)
Hors ligne
Et pour que ca apparaisse au dessus et non en bas du forum??
Nous vivons peut-être tous sur la même planète, mais nous ne vivons pas tous dans le même monde !!
Hors ligne
fichier header.php au lieu de footer.php 
sauf que tu ne peux plus utiliser $footer_style pour la détection.
Mais normalement, ceci devrait fonctionner :
if (in_array(basename($_SERVER['PHP_SELF']), array('viewforum.php', 'viewtopic.php'))) {au lieu de :
if ($footer_style == 'viewforum' || $footer_style == 'viewtopic') {Pour la restriction aux admins seulement pour l'affichage sur les TOPICS, cela deviendrait :
if (basename($_SERVER['PHP_SELF']) == 'viewforum.php' || (basename($_SERVER['PHP_SELF']) == 'viewtopic.php' && $pun_user['g_id'] == PUN_ADMIN)) {Et pour l'intérieur :
if ($footer_style == 'viewforum')
devient
if (basename($_SERVER['PHP_SELF']) == 'viewforum.php')et
if ($footer_style == 'viewtopic')
devient
if (basename($_SERVER['PHP_SELF']) == 'viewtopic.php')Et forcément, tu ne dois plus chercher la partie se situant aux alentours de la ligne 113 (étant dans un autre fichier) mais un autre endroit qui te convient. Cherche en un dans les alentours du bloc annonce (announce) voire à la limite, dans le bloc annonce, séparé par une ligne horizontale (<hr />).
Dernière modification par nicolas2k10 (13-09-2006 22:05:52)
Hors ligne
Ca resemble à mon idée que j'ai développée sur http://www.editions-eridan.fr/forums et que j'ai noté sur ces forums je ne sais plus où !
Faut voir ce que ça donne 
Hors ligne
Ca marche pas sur mon forum, il y a toujours écris:
Utilisateurs présents sur ce topic : aucun
Alors que j'ai fait des tests avec des membres!!!
Je comprends pas!!
Nous vivons peut-être tous sur la même planète, mais nous ne vivons pas tous dans le même monde !!
Hors ligne
Quand tu as un problème, tu dois toujours chercher avec de la logique, c'est important en informatique. Faut pas se dire "ça marche pas" mais "pourquoi-t-il que ça ne marche pas ?
". Voilà la logique à avoir :
Si tu as toujours aucun, cela signifie que dans ceci :
$users_here_content .= !empty($list_users) ? substr($list_users, 0, -2) : 'aucun';la condition [ !empty($list_users) ] n'est pas vérifié. Autrement dit, $list_users est vide.
Pourquoi serait-il vide s'il était rentré au moins UNE fois dans le while ? --> au vu de ceci qui ajoute bien quelque chose dans cette variable :
$list_users .= '<a href...';On va donc voir la boucle (le while) car on est probablement pas entré dedans sinon $list_users ne serait pas vide.
Ce qui suit signifie "tant qu'il y a des résultats, faire..."
while($user_here = $db->fetch_assoc($users_here)) {Autrement dit, s'il n'y est pas entré DU TOUT, il n'y a pas de résultats.
Mais pourquoi donc ? On va donc remonter de nouveau.
Pour se faire, on voit ceci "$users_here" dans la condition de bouclage, on suit et on voit que cela contient la requête.
Le problème se situant donc à 99% de chances dans la requête.
On regarde donc les tables utilisées et on voit "$db->prefix.'online'".
1) On regarde si elle existe : réponse OUI (car de toute façon, elle y est d'origine)
2) On regarde ses attributs (ceux qui commencent par o. car on a définit un alias o pour online)
on voit ceci :
o.user_id, o.ident, o.current_ip3) On regarde si tous ces attributs, à savoir user_id, ident et current_ip existent bien dans la table.
Non ? PunOnline n'est probablement pas installé (tout du moins, correctement --> lancement du fichier install_mod.php non réalisé)
Oui ? Regarder via PhpMyAdmin (par exemple), si lorsque l'on est sur une page, une entrée est bien présente dans la table online contenant bien le nom de la page où l'on se trouve (ce qui signifierait que c'est au moment de récupérer via le SELECT que l'erreur se pose mais l'endroit où les membres se trouvent est bien présent dans la base).
Astuce bien pratique également lorsqu'une erreur se situe dans une requête.
$mavar = $db->query('...');
en dessous mettre :
print_r($db->error($mavar));Ce qui permet de t'afficher par exemple des erreurs explicites tel que :
Table '.....' doesn't exist
Voilà, il faut aller pas par pas et avec de la LOGIQUE.
De façon générale, sans ces pistes, ce n'est jamais facile d'aider quelqu'un (tout du moins en peu de temps et peu de gens vont mettre 3h pour trouver le problème d'un membre qui n'a rien dit d'autres que "ça marche pas"). Mais il faut juste prendre un peu de temps (et parfois, beaucoup plus !)... 
PS: Tu n'as pas besoin de demander à d'autres d'y aller car tu dois être affiché, étant présent sur le forum ou topic. Tu devrais donc voir ton pseudo dans la liste des présents (ou ton ip en partie masquée si non-loggé). Pour ne pas s'afficher, il suffit de rajouter une petite condition dans la requête SQL, ça c'est comme on veut...
Dernière modification par nicolas2k10 (14-09-2006 23:32:40)
Hors ligne
Mise à jour de l'astuce 
- Correction d'un problème mineur à savoir la suppression du lien menant vers le profil pour les invités (profil invité inexistant) [ci-dessous point 1+2].
- Liste de restrictions possibles (optionnel donc) selon le groupe pour l'affichage de la liste (faites votre choix dans les différentes conditions [cf. 1er post]).
- NEW : Correction d'un problème de dépassement du div si la liste est plus large que le site [ci-dessous point 3].
A ceux ayant déjà installé l'astuce sur leur forum, faites ceci :
1) Rajoutez "$guest = true" et "$guest = false" comme ceci :
// Si l'utilisateur n'est pas loggé, on masque une partie de son ip
if($user_here['ident'] == $user_here['current_ip']) {
$guest = true;
$max = strrpos($user_here['ident'], '.')+1;
$user_here['ident'] = substr($user_here['ident'], 0, $max).'xxx';
} else {
$guest = false;
}2) Modifiez :
$list_users .= 'par ceci :
$list_users .= ($guest) ? '<span style="font-weight:normal;">'.$user_here['ident'].'</span>, ' : '3) Avant :
// Div - Finajoutez :
$users_here_content .= '<hr style="clear:both; visibility:hidden;" />';
Dernière modification par nicolas2k10 (20-11-2006 21:25:23)
Hors ligne
Nouvelle mise à jour de l'astuce (conseillé)
Correction d'un problème CSS (voir post ci-dessus point 3).
Dernière modification par nicolas2k10 (21-11-2006 18:18:59)
Hors ligne
Nouvelle mise à jour de l'astuce (optionnel)
Ajout de la possibilité de cacher des groupes de la liste (pas d'origine, voir fin du 1er post dans "Fonctionnalités supplémentaires" pour l'appliquer).
Dernière modification par nicolas2k10 (21-11-2006 18:18:50)
Hors ligne
existe-il une version "invités aujourd'hui : x" ?
Dernière modification par pinch (26-11-2006 18:18:38)
Hors ligne
Je ne pense pas mais ton post aurait + sa place dans le topic "Membres en ligne aujourd'hui".
Hors ligne
Bonjours, j'ai le meme probleme que zillah.
J'ai mis print_r($db->error($users_here)); pour voir les erreurs et voila ce que j'ai:
Array (
[error_sql] => [error_no] => 0 [error_msg] => )La table online est bien présente dans la base de donnée, mais j'ai phpmyadmin me dit:
La colonne `user_id` ne devrait pas faire partie à la fois d'une clé unique et d'une clé indexLe mod punonline fonctionne correctement car je peut voir la liste des personne connecté dans online.php
Hors ligne
C'est normal, quelle est l'adresse de ton forum ?
Avant de poser une question, avez-vous consulté la FAQ ou fait une recherche ?
Pas de support si pas d'adresse de forum !
Hors ligne
Je l'avais mit dans ma signature, mais le voila
mon forum
Hors ligne
Change cette ligne :
$users_here = $db->query('SELECT o.user_id, o.ident, o.current_ip, u.realname FROM '.$db->prefix.'online AS o LEFT JOIN '.$db->prefix.'users AS u ON o.user_id=u.id WHERE o.current_page="'.basename($_SERVER['PHP_SELF']).'" AND current_page_id='.$cur_id);Par :
$users_here = $db->query('SELECT o.user_id, o.ident, o.current_ip, u.realname FROM '.$db->prefix.'online AS o LEFT JOIN '.$db->prefix.'users AS u ON o.user_id=u.id WHERE o.current_page="/forum/'.basename($_SERVER['PHP_SELF']).'" AND current_page_id='.$cur_id);Avant de poser une question, avez-vous consulté la FAQ ou fait une recherche ?
Pas de support si pas d'adresse de forum !
Hors ligne
Ca fonctionne 
Merci beaucoup de ton aide 
Hors ligne
zillah devra faire la même manipulation en changeant [c]/forum/[/c] par le dossier de son forum.
Avant de poser une question, avez-vous consulté la FAQ ou fait une recherche ?
Pas de support si pas d'adresse de forum !
Hors ligne
petite question, comment je pourrait combiner cette astuces avec la mod colored_usergroup ?
Hors ligne
petite question, comment je pourrait combiner cette astuces avec la mod colored_usergroup ?
Je l'ai fait, j'essaierai de donner l'astuce en fin de semaine. 
Avant de poser une question, avez-vous consulté la FAQ ou fait une recherche ?
Pas de support si pas d'adresse de forum !
Hors ligne
avec plaisir, vu que tu m'avais d'ailleurs déjà proposé tes sources à ce sujet 
Hors ligne
heu, c'est la fin de semaine je crois... 
au besoin, contactes-moi par mail ou via la discussion de ma traduction.
Hors ligne
Impatient !

Voici l'astuce :
Remplacer :
// Utilisateurs présents sur le forum/topic - Début
if($footer_style == 'viewforum' || $footer_style == 'viewtopic') {
// Initialisation des variables
$list_users = '';
if($footer_style == 'viewforum') {
$cur_id = $forum_id;
$message = 'Utilisateurs parcourant ce forum';
} else {
$cur_id = $id;
$message = 'Utilisateurs présents sur ce topic';
}
// Requête
$users_here = $db->query('SELECT o.user_id, o.ident, o.current_ip, u.realname FROM '.$db->prefix.'online AS o LEFT JOIN '.$db->prefix.'users AS u ON o.user_id=u.id WHERE o.current_page="'.basename($_SERVER['PHP_SELF']).'" AND current_page_id='.$cur_id);
// Div - Début
$users_here_content = '<div id="users_here">';
$users_here_content .= '<strong>'.$message.'</strong> : ';
while($user_here = $db->fetch_assoc($users_here)) {
// Si l'utilisateur n'est pas loggé, on masque une partie de son ip
if($user_here['ident'] == $user_here['current_ip']) {
$guest = true;
$max = strrpos($user_here['ident'], '.')+1;
$user_here['ident'] = substr($user_here['ident'], 0, $max).'xxx';
} else {
$guest = false;
}
// Si l'utilisateur a affiché son nom réel dans son profil, on l'affiche dans l'info-bulle du lien menant vers son profil
$realname_user = !empty($user_here['realname']) ? ' ('.$user_here['realname'].')' : '';
// On ajoute l'utilisateur en cours à la liste de tous les utilisateurs actuellement présents
$list_users .= ($guest) ? '<span style="font-weight:normal;">'.$user_here['ident'].'</span>, ' : '<a href="profile.php?id='.$user_here['user_id'].'" title="Voir le profil de '.$user_here['ident'].$realname_user.'" style="text-decoration:none; font-weight:normal;">'.$user_here['ident'].'</a>, ';
}
$users_here_content .= !empty($list_users) ? substr($list_users, 0, -2) : 'aucun';
$users_here_content .= '</div>';
$users_here_content .= '<hr style="clear:both; visibility:hidden;" />';
// Div - Fin
// Affichage
echo $users_here_content;
}
// Utilisateurs présents sur le forum/topic - FinPar :
// Utilisateurs présents sur le forum/topic - Début
if($footer_style == 'viewforum' || $footer_style == 'viewtopic') {
// Initialisation des variables
$list_users = '';
if($footer_style == 'viewforum') {
$cur_id = $forum_id;
$message = ''.$lang_common['Actually on forum'].':';
} else {
$cur_id = $id;
$message = ''.$lang_common['Actually on topic'].':';
}
// Requête
$users_here = $db->query('SELECT o.user_id, o.ident, o.color, o.current_ip FROM '.$db->prefix.'online AS o LEFT JOIN '.$db->prefix.'users AS u ON o.user_id=u.id WHERE o.current_page="/forOM/'.basename($_SERVER['PHP_SELF']).'" AND current_page_id='.$cur_id);
// Div - Début
$users_here_content = "\t\t\t".'<div id="users_here">';
$users_here_content .= '<strong>'.$message.' </strong>';
while($user_here = $db->fetch_assoc($users_here)) {
// Si l'utilisateur n'est pas loggé, on masque une partie de son ip
if($user_here['ident'] == $user_here['current_ip']) {
$guest = true;
$max = strrpos($user_here['ident'], '.')+1;
$user_here['ident'] = substr($user_here['ident'], 0, $max).'xxx';
} else {
$guest = false;
}
// On ajoute l'utilisateur en cours à la liste de tous les utilisateurs actuellement présents
$colorspan = (!empty($user_here['color'])) ? '<span style="color:'.$user_here['color'].'; font-weight:bold">' : '';
$colorspan2 = (!empty($user_here['color'])) ? '</span>' : '';
$list_users .= ($guest) ? "\n\t\t\t\t".'<span style="font-weight:normal;">'.$user_here['ident'].'</span>, ' : "\n\t\t\t\t".'<a href="profile.php?id='.$user_here['user_id'].'">'.$colorspan.pun_htmlspecialchars($user_here['ident']).$colorspan2.'</a>, ';
}
$users_here_content .= !empty($list_users) ? substr($list_users, 0, -2) : "\n\t\t\t\t".''.$lang_common['None'];
$users_here_content .= "\n\t\t\t".'</div>'."\n";
$users_here_content .= "\t\t\t".'<hr style="clear:both; visibility:hidden;" />'."\n";
// Div - Fin
// Affichage
echo $users_here_content;
}
// Utilisateurs présents sur le forum/topic - FinA noter que ma version est (pour moi) mieux que celle d'origine :
- J'ai corrigé les alignements dans la source.
- J'ai retiré le nom réel du membre (indiqué dans son profil) qui s'affichait lorsque le membre était connecté au sujet, je trouvais ça inutile.
J'ai adapté le code pour ton forum, tu as juste à remplacer le code existant. 
Avant de poser une question, avez-vous consulté la FAQ ou fait une recherche ?
Pas de support si pas d'adresse de forum !
Hors ligne
désolé por mon impatience 
merci beaucoup, je verrai ça dans l'après midi; pour l'affichage du nom je te remercie: je n'y avait pas pensé et je trouve ça moi aussi inutile 
Hors ligne
bon j'ai un léger soucis:
Fatal error: Call to undefined function: pun_url() in /mnt/115/free.fr/b/4/omhistorique/forOM/footer.php on line 219
Voici ma ligne 219:
$list_users .= ($guest) ? "\n\t\t\t\t".'<span style="font-weight:normal;">'.$user_here['ident'].'</span>, ' : "\n\t\t\t\t".'<a href="profil-'.$user_here['user_id'].'-'.pun_url($user_here['ident']).'.html">'.$colorspan.pun_htmlspecialchars($user_here['ident']).$colorspan2.'</a>, ';Hors ligne
DEBUT DE HORS SUJET
Parcontre rien à voir avec ceci, totalement hors sujet, je viens pour la 1ère fois de traduire littéralement en texte dans ma petite tête ceci en essayant de voir ce qui cloche:
$colorspan = (!empty($user_here['color'])) ? '<span style="color:'.$user_here['color'].'; font-weight:bold">' : '';
$colorspan2 = (!empty($user_here['color'])) ? '</span>' : '';
$list_users .= ($guest) ? "\n\t\t\t\t".'<span style="font-weight:normal;">'.$user_here['ident'].'</span>, ' : "\n\t\t\t\t".'<a href="profil-'.$user_here['user_id'].'-'.pun_url($user_here['ident']).'.html">'.$colorspan.pun_htmlspecialchars($user_here['ident']).$colorspan2.'</a>, ';c'est certainement pas grand chose pour toi mais pour moi c'est un très grand pas vers la compréhension et les modifications futures. Je remarque que je n'en suis pas encore au point de corriger le problème, mais en tout cas je suis tout émoustillé d'avoir appris un nouveau truc!
(même si une fois compris on se rend vite compte qu'en vrai c'était tout bête...)
Au passage tu n'aurais pas l'aadresse d'un tuto expliqant ceci? "\n\t\t\t\t"
désolé pour ce hors sujet, ya personne à côté de moi et fallait que je le dise à quelqu'un. Le téléphone c'est cher et tout mon entourage compare le php à l'égyptien, à l'arabe, au chinois, au grec et aux symboles consignes de llavage/repassage/... se trouvant sur nos t-shirt. 
FIN DE HORS SUJET
Hors ligne