Bonjour,
Je me permet de poster cette demande afin de me dépêtrer d'un problème me faisant mal à la tête.
A) Contexte :
J'ai développé un module basique de gestion de catégories et de sous catégories en PHP couplé avec MySQL. Ce module permet de créer, modifier, supprimer une Catégorie et d'y associer des sous-catégories que l'on peut également modifier et supprimer. Les sous-catégories peuvent être classées dans l'ordre voulu de l'utilisateur via un champ "position"
B) Problème :
Imaginons la catégorie "test de matériel". Cette dernière contient trois sous catégories :
- Vélos
- Vêtement
- Bivouac
Ces trois sous catégories ont une position, cette position permet de modifier le positionnement côté visiteur.
- Vélos a donc la position 1
- Vêtements a la position 2
- Bivouac a la position 3
Imaginons maintenant que l'utilisateur supprime la seconde sous catégorie.
On se retrouve avec un "trou" entre la catégorie "vélos" ayant la position 1 et "bivouac" ayant la position 3.
C) Question :
Comment faire pour tester ce type de trou sachant que le trou peut aussi bien affecter la première sous catégorie (et donc commencer à 2), une autre en plein milieu voir à plusieurs endroits en même temps ?
D) Code :
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 //exemple, nous récupérons trois sous catégories $nbre_liste = 3; //positions $tableau_position = array(); for ($i=1; $i<=$nbre_liste;$i++) { $position = intval($_POST['position_'.$i.'']); $id_position = intval($_POST['id_position_'.$i.'']); $tableau_position[$id_position] = $position; } //on tests s'il n'y à pas de doublons dans les positions que l'on a récupérer et on fait une mise à jour de la position if ($tableau_position == array_unique($tableau_position)) { foreach($tableau_position as $id_position => $new_position) { $update_position ='UPDATE ref_type_groupe SET position = \''.$new_position.'\' WHERE id = \''. $id_position .'\''; mysql_query($update_position); } } else { echo'<script type="text/javascript"> alert("Vous ne pouvez pas mettre deux fois la même position")</script>'; } echo '<center><b style="color:red"> Mise à jour effectuée</b></center><br />';
Il faudrait donc pouvoir faire appel à une fonction qui supprimerai ces "trous" en modifiant les positions avant l'update . pouvez-vous me donner des axes de réflexions ?
Par avance merci.
Partager