Bonjour,
Par le biais d'une requête SQL, j'affiche une liste de livres comportant pour chaque livre son ou ses auteurs et, le cas échéant, son ou ses traducteurs (un livre peut avoir été écrit et/ou traduit par plusieurs "contributeurs").
Pour gérer cette éventuelle multiplicité de contributeurs, j'utilise le code suivant (fourni par Sabotage) :
Le code est pleinement fonctionnel. Parallèlement, j'ai mis en place une système de filtre qui permet de filtrer la liste de livres par contributeur (via la méthode get en passant par l'url l'ID du contributeur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 <?php $ID_CONTRIBUTEUR= (iSset($_GET['id_contributeur']) ? $_GET['id_contributeur'] : null); $selectcontrib = "SELECT L.ID_LIVRE,CB.NOM_CONTRIBUTEUR, CB.PRENOM_CONTRIBUTEUR, F.NOM_FONCTION, CB.ID_CONTRIBUTEUR, F.ID_FONCTION FROM LIVRE L INNER JOIN PARTICIPE P ON P.ID_LIVRE = L.ID_LIVRE INNER JOIN CONTRIBUTEURS CB ON CB.ID_CONTRIBUTEUR = P.ID_CONTRIBUTEUR INNER JOIN FONCTION F ON F.ID_FONCTION = P.ID_FONCTION ORDER BY NOM_FONCTION,NOM_CONTRIBUTEUR ASC "; $resultat_contrib = mysql_query($selectcontrib); $livre_contributeurs= array(); while ($data = mysql_fetch_assoc($resultat_contrib)){ $livre_contributeurs[$data['ID_LIVRE']][$data['ID_FONCTION']][$data['ID_CONTRIBUTEUR']] = $data ['PRENOM_CONTRIBUTEUR'] . " " . $data ['NOM_CONTRIBUTEUR']; if (!isset($tblFonctions[$data['ID_FONCTION']])) { $tblFonctions[$data['ID_FONCTION']] = $data['NOM_FONCTION']; } } foreach ($livre_contributeurs[$data['id_livre']] as $fonction_id => $contributeurs) { $echo_contrib = ""; foreach($contributeurs as $contributeur_id => $contributeur_nom) { $echo_contrib .= '<p class="p_inline"><a href="filtre_phase5.php?id_contributeur='.$contributeur_id.'&tri=date_achat">'.$contributeur_nom.'</a>; </p>'; }//fin du 1er foreach // on retire le dernier point-virgule echo substr($echo_contrib, 0 , -6); }//fin du 2eme foreach ?>
Lors du filtre, je souhaiterais surligner le contributeur objet du filtre. J'ai modifié la fin du code précédent :
Mais le problème est que ce code me surligne tous les contributeurs du livre affiché et pas seulement celui dont l'ID est passé dans l'url. Exemple pour un livre A qui a 2 auteurs : auteur1 et auteur2, et un traducteur1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <?php foreach ($livre_contributeurs[$data['id_livre']] as $fonction_id => $contributeurs) { $echo_contrib = ""; foreach($contributeurs as $contributeur_id => $contributeur_nom) { if ($ID_CONTRIBUTEUR != null ) {// pour gérer surlignage : <span class="surlign"> $echo_contrib .= '<p class="p_inline"><a href="filtre_phase5.php?id_contributeur='.$contributeur_id.'&tri=date_achat"><span class="surlign">'.$contributeur_nom.'</span></a>; </p>'; } else { $echo_contrib .= '<p class="p_inline"><a href="filtre_phase5.php?id_contributeur='.$contributeur_id.'&tri=date_achat">'.$contributeur_nom.'</a>; </p>'; } }//fin du 1er foreach // on retire le dernier point-virgule echo substr($echo_contrib, 0 , -6); }//fin du 2eme foreach ?>
Si je filtre sur l'auteur1, tous les contributeurs seront surlignés (auteur1, auteur2 et traducteur1) et pas seulement l'auteur1. Est-il possible de gérer ce surlignage partiel ? Merci.
Partager