Bonjour,
Je viens demander de l'aide ici, je n'ai pas de code à fournir car ce n'est pas encore fait, c'est la logique que je n'ai pas. Donc j'aimerai vous demander déjà comment traiter ce que je veux faire sur le papier avant de passer au code.
J'ai sur mon blog, des pages, à la différence des articles, eux, n'ont pas de dates, ils ne sont pas trier par ordre chronologique ou alphabétique, mais par une arborescence à l'aide d'un champ dans la table dans la BDD.
Par exemple si j'ai 6 page, chaque page se trouve dans la table "pages", et le champ arborescence va de 1 à 6 et c'est ce qui définit l'ordre.
Maintenant je veux faire un système de monter/descendre ainsi que créer une nouvelle page. Si je veux monter une page dans l'ordre par exemple passer la 5 à la 3ème place, cela va avoir une incidence sur ceux qui se trouvent après 3 (5 va devenir 3, 3 va devenir 4, 4 va devenir 5)
Mais en code, j'ai aucune idée de comment traiter ça.
Même chose pour la création d'une page, si je veux toujours créer une page et la mettre en position 3, tout va se décaler de +1 (bon ça encore, ça peut se gérer facilement dans le code)
Mais voilà, je bloque avec cette logique, je sais pas comment organiser ça :/
Merci de votre aide
Salut,
j'espère que j'ai bien compris, sinon je vais dire n'importe quoi :
Pour l'idée des flèches "plus haut, plus bas"
Il me semble que tu dois juste échanger les valeurs d'arborescence entre :
Pour insérer
Une idée serait d'utiliser la fonction MAX() de SQL pour récupérer l'arborescence maximum en base de données.
Ensuite tu boucle en diminuant, depuis ce maximum, vers la valeur de la l'arborescence que tu aimerai insérer :
Dans cette boucle tu incrémente la valeur de l'arborescence de chaque page.
Maintenant tu peux insérer ta nouvelle page avec l'arborescence demandée.
Ça m'a l'air confus alors je met du pseudo code pour "imager" un peu :
// par exemple tu veux ajouter une page en position 3 :
new_arbo = 3
SELECT MAX(arborescence) AS max_arbo FROM pages
tantque max_arbo >= new_arbo faire
{
UPDATE pages SET arborescence = arborescence + 1 WHERE arborescence = max_arbo
max_arbo--
}
// maintenant le nombre "new_arbo" est disponible, et tu insert la nouvelle page
INSERT INTO pages (... arborescence ...) VALUES (... new_arbo ...)
C'est une idée.
Attention :
Avant de faire ça il faut penser à vérifier 2 trucs :
(en fait dans les 2 cas, on pourrait ramener la valeur de "new_arbo" à "max_arbo + 1")
Bonjour,
Je vois une solution manuelle qui est très simple.
Vous crée une liste de toutes les pages dans un formulaire où le champ de l'arborescence serait un input modifiable.
Ce qui permettra de modifier manuellement l'arborescence.
Pour ajouter une nouvelle page, vous mettez un bas du formulaire (après la liste de page) les champs vides pour insérer une pages.
Puis lors du traitement, vous testez si ces derniers champs sont remplies ou non et si c'est le cas alors on ajoute la page sinon on ne fait rien.
Le problème est que les personnes autres que moi qui utiliseront ce système veulent du très simple, donc avec une flèche haut et bas, ça aurait été beaucoup plus pratique.
En somme c'est un peu comme du drag&drop, en fonction de là où on place la page, les valeurs changent pour le reste, mais je sais pas trop comment ça fonctionne en vrai
Ca me donne pas mal de piste à suivre ta proposition, au début j'avais dit passer de 5 à 3, mais en faite oui c'est inutile si je fait avec des flèches, puis ça sera PEUT-ÊTRE en ajax, donc la montée/descente sera instantané.
Je vais essayer ta méthode, merci ;)