probleme d'affichage : plusieurs mêmes éléments sont affiché
Posté : 01 août 2007, 10:39
Bonjour tout le monde.
Je dispose d'un fichier qui fait un lien entre des contributeurs et des critères (qui définissent des pratiques) et d'un fichier qui fait le lien entre des pratiques et ces mêmes critères.
Ils sont de cette forme là :
J'ai donc fait un script qui permet d'afficher, losrqu'un contributeur se connecte, uniquement les pratiques qui ont les mêmes critères que lui. Ainsi, le contributeur ne peut agir (supprimer, éditer) uniquement sur les pratiques qui ont les mêmes crièteres que lui.
Voici mon code pour afficher ces pratiquess :
Merci de m'aider car là e ne vois pas comment faire.
Je dispose d'un fichier qui fait un lien entre des contributeurs et des critères (qui définissent des pratiques) et d'un fichier qui fait le lien entre des pratiques et ces mêmes critères.
Ils sont de cette forme là :
Code : Tout sélectionner
<root last_insert="3">
<link id="2">
<criteria idcat="1" idcrit="1"/>
<criteria idcat="2" idcrit="1"/>
<criteria idcat="3" idcrit="1"/>
<criteria idcat="3" idcrit="2"/>
<criteria idcat="3" idcrit="3"/>
<contributor (ou pratique) id="2"/>
</link>
</root>
Voici mon code pour afficher ces pratiquess :
<?
//on constuit le tableau qui contient les couples cat/crit pour lequel un contributeur a été enregistré.
//pour cela, on recherche dans la matrice l'id du contributeur actuellement
//connecté et on récupère tous les noeuds criteria pour ce contributeur
//fichier de matrice entre practice et critères
//on récupère déjà l'id du contributeur connecté
$criteriaCont = $xpCrit_cont->query('//link/contributor[@id="'.$_SESSION['contributorId'].'"]/../criteria');
for ($v=0; $v < $criteriaCont->length ; $v++) {
$idcat = $criteriaCont->item($v)->getAttribute('idcat');
$idcrit = $criteriaCont->item($v)->getAttribute('idcrit');
$arrayContributor[] = $idcat."/".$idcrit;
}
//on constuit le tableau qui contient les couples cat/crit de chaque practice
//pour cela, on recherche dans la matrice criteria-practice.xml
$compteur = 0;
for($i=0; $i < sizeof($arrayContributor); $i++) // tant que $i est inferieur au nombre d'éléments du tableau...
{
$var = $arrayContributor[$i];
$explode = explode("/", $var);
$idcat = $explode[0];
$idcrit = $explode[1];
$criteriaPract = $xpCrit_pract->query('//link/criteria[@idcat="'.$idcat.'" and @idcrit="'.$idcrit.'"]/../practice');
for ($b=0; $b < $criteriaPract->length ; $b++) {
$idPracticeCommune = $criteriaPract->item($b)->getAttribute('id');
$practice = $xpPractices->query('//practice[@id="'.$idPracticeCommune.'" and @subjected="1" and @validated="0"]');
for ($j=0; $j < $practice->length ; $j++) {
$idPractice = $practice->item($j)->getAttribute('id');
$name = $practice->item($j)->getAttribute('name');
$practiceFile = '../'.$cfg['ressources_root'].'content/practice/'.$idPractice.'.xml';
$domPractice = new DOMDocument('1.0','UTF-8');
$domPractice->load($practiceFile);
$xpPractice = new DOMXPath($domPractice);
$practiceCreated = $xpPractice->query('//item[@id="'.$idPractice.'"]');
$created = $practiceCreated->item(0)->getAttribute('date_created');
$explode = explode('-', $created);
$day = $explode[2];
$month = $explode[1];
$year = $explode[0];
$date = $day."-".$month."-".$year;
echo "<tr bgcolor='".( ($i++ % 2 == 0) ? '#FFFFFF' : '#EEEEEE' )."'>
<td>".$name."</td>
<td>".$date."</td>
<td align='center'>"; ?><a href="practice-edit.php?id=<? echo $idPractice; ?>"><? echo "<img src='../css/images/edit.gif' border='0'></a></td>
<td align='center'>"; ?><a href='?delete_commitee=<? echo $idPractice; ?>' onClick="return conf_suppr();"><? echo "<img src='../css/images/delete.gif' border='0'></a></td>
<td align='center'>"; ?><a href="?validated_commitee=<? echo $idPractice; ?>"><? echo COL_VALIDATE_PRACTICE."</td>
</tr>";
} //endfor
$compteur++;
}//endfor
}//endfor
if ($compteur == '0') {
echo "<tr bgcolor='".( ($i++ % 2 == 0) ? '#FFFFFF' : '#EEEEEE' )."'>
<td colspan='5' align='center'><strong>".TEXT_NO_PRACTICE_TO_EDIT."</strong></td>";
}
?>
Seulement voilà le problème, c'est que si on trouve des pratiques qui ont plusieurs fois un critère en commun, elle s'affiche plusieurs fois. Comment faire alors en sorte qu'lle ne s'affiche qu'une seule fois ?Merci de m'aider car là e ne vois pas comment faire.