Page 1 sur 1

Garder la position d'un scroll au retour sur une page via un

Posté : 01 sept. 2007, 16:50
par dread
Bonjour à tous.

Je ne sais pas trop dans quelle catégorie poster mon message, donc je me risque ici.

J'ai une page d'administration d'un site qui contient plusieurs enregistrements, dans une boucle php, issus d'une base de données.

Comme j'ai plusieurs centaines de résultats, le scroll de ma page est assez important.

Dans mon exemple, imaginez 400 résultats apparaissant sous la forme d'un tableau de 400lignes avec donc la possibilité de les modifier ou de les supprimer.

Si je souhaite modifier l' enregistrement 399 (par exemple) que l'on atteint donc en scrollant jusqu'à arriver en bas de la page et que je décide de le modifier.

J'arrive donc sur la page de modification et une fois les modifs executées j'appuie sur un bouton de type submit qui me ramène après traitement sur la fameuse page contenant la liste des 400 résultats.

Mon problème, c'est qu'une fois revenu sur cette page, je me retrouve au tout début de celle ci (c'est à dire tout en haut) et si je souhaite modifier le résultat 400, j'ai plus qu'à me retaper la descente de la page.

N'existerait-il pas un moyen de "sauvegarder" la position sur la page pour que cela soit plus pratique et que je ne sois pas obligé de toujours redescendre dans la page si je veux modifier des enregistrements?

En espérant être assez précis et clair dans l'explication de mon interrogation, merci par avance pour toute aide que vous voudrez bien m'apporter.

Posté : 01 sept. 2007, 19:52
par AB
Tu peux utiliser une ancre.
sur le principe
$i=0;

{//boucle pour afficher tes lignes
$i++;
//pour chaque ligne
id = 'ancre'.$i;
...
}
Il faut penser à faire $i = $i - 1 quand tu supprimes une ligne.

Posté : 02 sept. 2007, 11:16
par dread
Après moultes recherches, j'en suis arrivé moi aussi à l'utilisation des ancres.

Par contre, je ne l'ai pas utilisé comme dans ton exemple, AB. J'ai intégré l'ancre à un lien qui mène vers la page de modification avec comme variable le numéro id, présent dans la table issue de la base de données, du résultat que l'on souhaite modifier ou supprimer.

L'avantage, c'est que ce numéro id se retrouve partout et notammant sur les pages processor qui contiennent des header. Ce qui fait que je fais un header avec : header ('location: mapage.php#ancre'.id);(dont la valeur est récupérée soit par une requête, soit par un $_GET)

Par contre, ce qui m'embetait avec cette méthode, c'est que si je supprime un enregistrement, l'id n'est plus valable pour retrouver l'ancre. J'avais pensé moi aussi à faire un truc du genre id-1, mais imaginons que ce id-1 n'existe pas parce que l'enregistrement d'avant aurait été lui aussi supprimé?

Je vais creusé ce que tu viens de me proposer, mais juste pour savoir: comment fais-tu pour retrouver la bonne valeur de $i une fois que tu es sur une autre page censée te ramener sur la page des résultats via un header ou un lien de retour par exemple?

Tu mets la valeur en session?

Posté : 02 sept. 2007, 16:17
par AB
j'utilise l'id de la table comme ancre uniquement pour la partie visiteurs.

Pour la partie administrateur, effectivement on se heurte au pb que tu as rencontré. Quand on supprime une ligne, l'id précédent n'est pas forcément = à l' id de la ligne supprimée - 1.

J'ai donc dans un premier temps utilisé la méthode que je t'ai donnée au début.
Pour transmettre le numéro de l'ancre je la mets dans une variable transmise dans l'url.

Ensuite dans la majorité de mes tables, il y a un champ "ordre" pour chaque enregistrement qui me permet de pouvoir modifier l'ordre de présentation des photos ou produits (qui va de 1 à 50 par exemple si j'ai cinquante lignes). Pour l'affichage je fais donc un select.. order by ordre. Dans ces cas là je me sert de ce numéro d'ordre comme ancre.

Posté : 03 sept. 2007, 08:53
par dread
Je comprend l'utilité d'un tel champ "ordre" mais comment fais-tu, si tu supprimes l'enregistrement dont la valeur de ce champ est 25 par exemple pour que celui venant après reprène cette valeur 25 et que la valeur du dernier ne soit plus 50 mais 49?

Sinon quelle différence avec le numéro id de l'enregistrement, si ce n'est une actualisation des valeurs de ce champ ordre?

Merci de m'éclairer sur le remplissage et le mode de mise à jour de ce champ "ordre".

Posté : 03 sept. 2007, 17:04
par AB
Les avantages et inconvénients de cette méthode ici
http://www.phpfrance.com/forums/viewtopic.php?t=32436

Posté : 03 sept. 2007, 17:08
par Gaap
au moment de ton submit, j'appellerais une fonction javascript qui me donne la place de la scrollbar ScrollTop(), je mettrais ces valeurs en get ou post avant de faire un form.submit() et j'appellerais un scrollto() pour replacer ma scrollbar...rapide et simple a mon sens

Posté : 04 sept. 2007, 12:32
par dread
Salut à tout le monde!!

Je me suis creusé la tête et j'ai trouvé une solution qui me satisfait.

J'ai rajouté une colonne intitulé "numéro" au tableau qui m'affichait mes 400 résultats soit 400 lignes.

Cette colonne s'incrémente de 1 pour obtenir les numéros des lignes en utilisant :
$compteur =1;
while ..... //début de ma boucle
...
 <td>$compteur</td>
...
$compteur++;
} //fin de ma boucle
J'envoi ensuite sur chacun de mes liens, à savoir modification et suppression, et dans l'url la valeur de $compteur, dans l'ancre, correspondante à la ligne que l'on souhaite soit modifier ou supprimer.

Puis sur la page de traitement de suppression, je déclare une variable égale à la valeur de l'ancre récupérée dans l'url -1 dont le résultat sera repassé via le header:
$repere =$_GET['ancre'] -1;

$query_supprimer_produit="DELETE FROM tbl_produit WHERE id_produit = '".$_GET['produit']."'";
$supprimer_produit = mysql_query($query_supprimer_produit);

header("Location: admin-produit.php#ancre".$repere);
Et du coup, je ne suis pas obligé de créer un nouveau champs dans chacune de mes tables, mais par contre je suis obligé de faire suivre ma valeur de l'ancre dans l'url. Mais bon, du côté administration du site, c'est moins gênant.

Et pour la modification des résultats, c'est le même principe sauf que je renvoi directement la valeur du $_GET['ancre'] dans le header sans faire le -1.

Je te remercie AB pour m'avoir aiguillé vers la solution.

Bonne continuation à tous!!