Annonces
Question aléatoire
Livre d'or

Par Le Goff Décor

Bonjour,

Félicitations pour votre script que j'utilise sur mon site, les possiblités nombreuses qu'offr'e PHPBoost m'ont tout de suite séduit !

[Suite...]

Livre d'or

Mini sondage
Etes-vous satisfait du support PHPBoost ?










Résultats

 
   Le 15/02/10 à 21h23 Citer      

Booster Roquette

Développement Modules

Sexe:
Inscrit le: 08/09/09
Messages: 433
Lieu: Québec, Canada
Salut à tous,

Un autre projet pour lequel j'ai besoin de votre aide.

Je veux être en mesure de récupérer la couleur des pseudos partout dans le forum. J'ai réussi à le faire lorsque l'on consulte un sujet, soit à la page du topic. Comment j'ai fait :

1. J'ai récupéré une fonction existante du fichier forum_functions.php :

Code PHP :
 
$group_color = User::get_group_color($row['user_groups'], $row['level']);
switch ($row['level']) //Coloration du membre suivant son level d'autorisation. 
{ 		
	case -1:
	$status = 'visiteur';
	break;			
	case 0:
	$status = 'member';
	break;			
	case 1: 
	$status = 'modo';
	break;			
	case 2: 
	$status = 'admin';
	break;
} 


2. Par la suite, j'ai modifié le fichier topic.php pour inclure cette fonction. Grâce à la requête sql qui s'y trouve, ej pouvais récupérer la valeur des variables user_groups et level :

Code PHP :
 
$result = $Sql->query_while("SELECT msg.id, msg.timestamp, msg.timestamp_edit, msg.user_id_edit, m.user_id, m.user_groups, p.question, p.answers, p.voter_id, p.votes, p.type, m.login, m.level, m.user_mail, m.user_show_mail, m.timestamp AS registered, m.user_avatar, m.user_msg, m.user_local, m.user_web, m.user_sex, m.user_msn, m.user_yahoo, m.user_sign, m.user_warning, m.user_readonly, m.user_ban, m2.login as login_edit, s.user_id AS connect, tr.id AS trackid, tr.pm as trackpm, tr.track AS track, tr.mail AS trackmail, msg.contents
FROM " . PREFIX . "forum_msg msg
LEFT JOIN " . PREFIX . "forum_poll p ON p.idtopic = '" . $id_get . "'
LEFT JOIN " . DB_TABLE_MEMBER . " m ON m.user_id = msg.user_id
LEFT JOIN " . DB_TABLE_MEMBER . " m2 ON m2.user_id = msg.user_id_edit
LEFT JOIN " . PREFIX . "forum_track tr ON tr.idtopic = '" . $id_get . "' AND tr.user_id = '" . $User->get_attribute('user_id') . "'
LEFT JOIN " . DB_TABLE_SESSIONS . " s ON s.user_id = msg.user_id AND s.session_time > '" . (time() - $CONFIG['site_session_invit']) . "' AND s.user_id != -1
WHERE msg.idtopic = '" . $id_get . "'	
ORDER BY msg.timestamp ...


De cette façon, ça fonctionne et je peux attribuer la couleur des pseudos (après avoir fait des modifs au fichier tpl et utiliser une nouvelle variable pour en extraire la couleur).

Par contre, si j'essaie de faire la même chose au niveau de l'index du forum, ça ne fonctionne pas. Voilà la requête sql que j'ai modifiée :

Code PHP :
 
$result = $Sql->query_while("SELECT c.id AS cid, c.level, c.name, c.subname, c.url, c.nbr_msg, c.nbr_topic, c.status, c.last_topic_id, t.id AS tid, 
t.idcat, t.title, t.last_timestamp, t.last_user_id, t.last_msg_id, t.nbr_msg AS t_nbr_msg, t.display_msg, m.user_id, m.login, [b]m.user_groups, m.level AS user_level[/b], v.last_view_id 
FROM " . PREFIX . "forum_cats c
LEFT JOIN " . PREFIX . "forum_topics t ON t.id = c.last_topic_id
LEFT JOIN " . PREFIX . "forum_view v ON v.user_id = '" . $User->get_attribute('user_id') . "' AND v.idtopic = t.id
LEFT JOIN " . DB_TABLE_MEMBER . " m ON m.user_id = t.last_user_id
WHERE c.aprob = 1 " . $display_sub_cat . " " . $unauth_cats . "
ORDER BY c.id_left", __LINE__, __FILE__);
 


Où j'ai ajouté la récupération de m.user_groups et m.level AS user_level de la table DB_TABLE_MEMBER. je ne vois pas pourquoi je suis incapble d'extraire la couleur. Serait à cause qu'il n'y a pas de leftjoin avec la table DB_TABLE_SESSIONS ?

Je sais, c'est ambitieux, mais j'aimerais bien réussir.

Merci à l'avance de votre aide. ;)

pm patrick.dubeau@ccq.org http://www.mageialinux-online.org    
   Le 16/02/10 à 00h53 Citer      

Administrateur

Equipe historique

Sexe:
Inscrit le: 04/08/05
Messages: 11001
Lieu: Aix en Provence
Oui c'est exact, il n'y a pas de jointure sur la table en question.
Rajoute ça à la suite des LEFT JOIN
Code SQL :
LEFT JOIN " . DB_TABLE_MEMBER . " m ON m.user_id = t.user_id

Je n'ai pas testé, si il y a une erreur, colle-la ici.
____________________
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++:
"There are two ways to write error-free programs; only the third works."

pm ben.popeye@phpboost.com http://www.phpboost.com    
   Le 16/02/10 à 20h59 Citer      

Booster Roquette

Développement Modules

Sexe:
Inscrit le: 08/09/09
Messages: 433
Lieu: Québec, Canada
Salut ben.popeye,

Ce n'est pas plutôt DB_TABLE_SESSIONS ? :heink

Une fois testé et avoir cahngé l'alias m pour s comme tu me le propose (parce que ça créait une erreur), aucun effet. incapable d'extraire la couleur. Il me manque un truc et je ne vois pas quoi.



Edité par DaaX Le 16/02/10 à 21h12

pm patrick.dubeau@ccq.org http://www.mageialinux-online.org    
   Le 16/02/10 à 21h09 Citer      

Administrateur

Chef de projet
Développement Noyau

Sexe:
Inscrit le: 27/02/09
Messages: 7993
Lieu: Alsace
non c'est bien ca ;)

pm http://www.phpboost.com    
   Le 16/02/10 à 21h22 Citer      

Administrateur

Equipe historique

Sexe:
Inscrit le: 04/08/05
Messages: 11001
Lieu: Aix en Provence
T'as une erreur avec le code que je t'ai donné ?
____________________
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++:
"There are two ways to write error-free programs; only the third works."

pm ben.popeye@phpboost.com http://www.phpboost.com    
   Le 16/02/10 à 23h10 Citer      

Booster Roquette

Développement Modules

Sexe:
Inscrit le: 08/09/09
Messages: 433
Lieu: Québec, Canada
Une fois que j'ai changé l'alias, non.

En fait, ça ne change rien du tout. J'ai fait des tests de variable afin de voir si tout était ok. Ça me semble effectivement bien. Je crois avoir réussi pour l'index seulement avec cette fonction :

Code PHP :
 
$group_color = User::get_group_color($row['user_groups'], $row['user_level']);
switch ($row['user_level']) //Coloration du membre suivant son level d'autorisation. 
{ 		
	case -1:
	$status = 'visiteur';
	break;			
	case 0:
	$status = 'member';
	break;			
	case 1: 
	$status = 'modo';
	break;			
	case 2: 
	$status = 'admin';
	break;
} 


J'ai modifié la variable $last ainsi :

Code PHP :
 
$last = '<a href="topic' . url('.php?id=' . $row['tid'], '-' . $row['tid'] . '+' . url_encode_rewrite($row['title'])  . '.php') . '" class="small_link">' . $last_topic_title . '</a><br />
<a href="topic' . url('.php?' . $last_page .  'id=' . $row['tid'], '-' . $row['tid'] . $last_page_rewrite . '+' . url_encode_rewrite($row['title'])  . '.php') . '#m' .  $last_msg_id . '"><img src="../templates/' . get_utheme() . '/images/ancre.png" alt="" /></a> ' . $LANG['on'] . ' ' . gmdate_format('date_format', $row['last_timestamp']) . '<br />' . $LANG['by'] . ' ' . ($row['last_user_id'] != '-1' ? '<a href="../member/member' . url('.php?id=' . $row['last_user_id'], '-' . $row['last_user_id'] . '.php') . ' style="color:' . $group_color . '"' . '" class="' . $status . '">' . $row['login'] . '</a>' : '<em>' . $LANG['guest'] . '</em>');
 


où j'ai ajouté ceci : ' style="color:' . $group_color . '"' . '" class="' . $status

Ça semble fonctionner sur ma plate-forme de test, mais je devrai faire d'autres tests avec la présence de plusieurs groupes.

Je vous tiens au jus. :)

pm patrick.dubeau@ccq.org http://www.mageialinux-online.org    
   Le 18/02/10 à 20h10 Citer      

Booster Roquette

Développement Modules

Sexe:
Inscrit le: 08/09/09
Messages: 433
Lieu: Québec, Canada
Salut tout le monde,

Ben voilà, après avoir modifié les requêtes des fichiers php ainsi que les variables correspondantes et avoir utilisé la fonction de colorisation, j'ai réussi à propager la couleur des pseudos dans tout le forum.

Merci à tous de votre aide.

Idéalement, je crois que pour la prochaine version, la couleur devrait faire partie de la table des membres.

pm patrick.dubeau@ccq.org http://www.mageialinux-online.org    
   Le 18/02/10 à 20h52 Citer      

Administrateur

Equipe historique

Sexe:
Inscrit le: 04/08/05
Messages: 11001
Lieu: Aix en Provence
DaaX:
Idéalement, je crois que pour la prochaine version, la couleur devrait faire partie de la table des membres.


Non, la couleur est une valeur calculée en fonction des données de l'utilisateur, ce genre de champ ne se stocke pas en base de données.
____________________
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++:
"There are two ways to write error-free programs; only the third works."

pm ben.popeye@phpboost.com http://www.phpboost.com    
   Le 18/02/10 à 22h38 Citer      

Booster Roquette

Développement Modules

Sexe:
Inscrit le: 08/09/09
Messages: 433
Lieu: Québec, Canada
Salut ben.popeye,

Je ne suis pas d'accord avec toi. Elle peut être stocké au moment de l'ajout/modification d'un utilisateur. Une fois la valeur stocké, il est facile de la passer en paramètre de la balise style. :)

pm patrick.dubeau@ccq.org http://www.mageialinux-online.org    
   Le 18/02/10 à 23h21 Citer      

Administrateur

Equipe historique

Sexe:
Inscrit le: 04/08/05
Messages: 11001
Lieu: Aix en Provence
Je suis bien d'accord qu'elle peut-être stockée, mais conceptuellement, ce n'est pas une bonne chose de faire ça. Théoriquement, on ne doit pas stocker les champs calculés.

Le problème c'est pas au niveau de la base de données mais au niveau du framework qui devrait permettre d'obtenir directement la classe correspondante.
____________________
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++:
"There are two ways to write error-free programs; only the third works."

pm ben.popeye@phpboost.com http://www.phpboost.com    
   Le 19/02/10 à 00h07 Citer      

Booster Roquette

Développement Modules

Sexe:
Inscrit le: 08/09/09
Messages: 433
Lieu: Québec, Canada
Salut ben.popeye,

Tu as bien raison concernant les champs calculés parce que dans ce cas-ci, il l'est. Mais il n'est pas obligé d'être calculé. Si on le défini aux niveau de l'ajout/modificxation du membre, ce champ devient une donnée statique (un code de couleur).

Effectivement, il ne suffit pas que d'ajouter le champ dans la base. Le framework doit permettre de générer la couleur de chaque membre ainsi que son groupe. Un peu comme le fait phpbb.



Edité par DaaX Le 19/02/10 à 19h31

pm patrick.dubeau@ccq.org http://www.mageialinux-online.org    
1 Utilisateur en ligne :: 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne: Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
Annonces