Page 1 sur 2
Comment s'y prendre?
Posté : 12 mars 2012, 17:45
par Fre3z69
Salutation à vous.
J'aimerais faire dans ma liste des catégorie ou forums, dans mon panel d'admin, un système de lien direct, qui changerais la position d'un forum ou d'une catégorie.
Je ne vous pas comment m'y prendre, alors je viens demander votre aide.
Voici une image de ce que je souhaite faire, sauf que si on peux plus monter un forum, alors on grise la flèche, et de même si on peux plus descendre un forum.
(fonctionnement similaire pour les catégories)
C'est un peu similaire (même beaucoup) à
ce topic et au panel d'administration de phpbb3.
Image:
Pourriez vous m'indiquer la marche à suivre, afin d'arriver à cela?
Je rajoute, que j'ai un champ Order dans les catégories et les forums, ce qui me permet de définir leur emplacement sur la page d'accueil du forum.
Merci de votre aide
Cordialement
Re: Comment s'y prendre.
Posté : 12 mars 2012, 17:46
par xTG
Il faut que tu gères un champ position dans ta table.
Après il suffit d'échanger deux positions entre elles.
Et l'affichage, un ORDER BY ce champ.
Re: Comment s'y prendre.
Posté : 12 mars 2012, 17:48
par Fre3z69
Il faut que tu gères un champ position dans ta table.
Après il suffit d'échanger deux positions entre elles.
Et l'affichage, un ORDER BY ce champ.
J'imagine bien, mais c'est ça que j'ai du mal a agencer.
Pourrais tu me montrer un exemple, que je comprenne le truc stp?
Merci
Cordialement
Re: Comment s'y prendre?
Posté : 12 mars 2012, 17:50
par xTG
Euh c'est à dire... C'est quelle partie qui te pose problème ?
Car bon c'est un système très simple, c'est similaire à un swap de valeur entre deux variables...
Re: Comment s'y prendre?
Posté : 12 mars 2012, 17:51
par Fre3z69
Arf, j'ai mal compris, j'ai ce champ, il s'agit du champ Order, mais je ne comprend pas comment faire que les flèches montent et descendent l'ordre des forums ou cats, et de même comment faire pour griser la flèche en cas d'impossibilité de monter ou descendre (pour le premier et le dernier)
Merci
Cordialement
Re: Comment s'y prendre?
Posté : 12 mars 2012, 18:40
par Fre3z69
J'ai modifier l'affichage des flèches pour griser les impossibilités.
maintenant, que me reste t'il à faire sur les flèches, et dans le traitement, pour faire fonctionner ce système??
Merci de votre aide
Re: Comment s'y prendre?
Posté : 12 mars 2012, 19:21
par sirakawa
Je suppose que tu veux que :
initialement les éléments soient toujours dans le même ordre,
le premier ait une flèche : descendre activable
le dernier ait une flèche: monter activable
les autres aient une flèche monter et une flèche descendre activables
le changement de position se fasse sur un simple clic sur une flèche.
Re: Comment s'y prendre?
Posté : 12 mars 2012, 19:49
par xTG
Tu récupères toutes tes catégories/forums dans un array.
Le premier de l'array a une flèche descendante mais pas montante.
Le dernier a une flèche montante mais pas descendante.
Après il suffit de transmettre l'ID ou la position de l'élément concerné (avec l'ordre descente ou montante) dans l'url.
Puis grâce à l'array tu connais tout de suite les voisins et il suffit d'opérer les requêtes SQL de type UPDATE.
Re: Comment s'y prendre?
Posté : 12 mars 2012, 22:20
par Fre3z69
Pour les flèches c'est régler, le problème est résolut, mais oui sirakawa, je veux bien faire le changement de position par un simple clic sur une flèche.
J'ai comparer les ordres avec le nombre total de catégories (ou forums)
D'après ce que tu m'as dit xTG, dans mon url je fait par exemple:
index.php?catid=1&pos=desc
Et dans ma page de traitement j'inverse les deux catégories??
C'est cela le principe?
Merci de votre aide
Cordialement
Re: Comment s'y prendre?
Posté : 13 mars 2012, 07:40
par xTG
Oui, en travaillant avec un tableau cela revient à un simple échange de variable.
Bon après pour garder à jour il faut rajouter les requêtes SQL, mais c'est pas grand chose.
Re: Comment s'y prendre?
Posté : 13 mars 2012, 07:50
par Fre3z69
Merci, mais je vais encore un peu t'embêter
A moins que je comprenne pas le terme exactement, je ne pense pas savoir faire un échange de variable.
Peux tu me définir comment faire cela STP?
Merci de votre aide
Cordialement
Re: Comment s'y prendre?
Posté : 13 mars 2012, 07:57
par moogli
Salut,
Le plus simple pour toi c'est de faire une procédure stockée sur le sgbd. Celle ci prend en paramètre ms l'id de la catégorie à modifier et le sens (que tu as dans l'url).
Dans cette procédure :
-mise à jour de la ligne précédente (ou suivante) avec un update + / - 1
-mise à jour de la ligne concernée avec la nouvelle position
Tu peu bien entendu y intégrer les contrôles des possibilités de changement de la catégorie.
Tu peux faire exactement la même chose en php avec deux appel ms au sgbd
Pour info order est un mot réservé SQL c'est une très mauvaise idée en nom de champs (select ... order by order c'est moyen

)
@+
Re: Comment s'y prendre?
Posté : 13 mars 2012, 08:41
par xTG
Un échange de variable :
$maVar1 = 1;
$maVar2 = 2;
$tmp = $maVar1;
$maVar1 = $maVar2;
$maVar2 = $tmp;
Re: Comment s'y prendre?
Posté : 13 mars 2012, 09:48
par Fre3z69
Merci de votre aide, je vais m'y atteler.
C'est pas exactement order, c'est cat_order et forum_order ^^
Je vais tenter cela, je viens poster le résultat ici
Cordialement
Re: Comment s'y prendre?
Posté : 13 mars 2012, 10:34
par Fre3z69
J'ai réussir à faire cela grâce à vos conseils.
Voici le résultat:
<?php
// on séléction la catégorie principale (qui monte)
$query = $cnx->prepare('SELECT cat_id, cat_name, cat_order FROM t_cat
WHERE cat_id = :cat_id');
$query->bindValue(':cat_id',(int) $_GET['catid'],PDO::PARAM_INT);
$query->execute()or die(print_r($query->errorInfo()));
$data = $query->fetch();
$query->CloseCursor();
// on définit $cat_up
$cat_up=$data['cat_order']-1;
// et on séléctionne aussi celle qui va la remplacer
$query = $cnx->prepare('SELECT cat_id, cat_name, cat_order FROM t_cat
WHERE cat_order = :cat_order');
$query->bindValue(':cat_order',(int) $cat_up,PDO::PARAM_INT);
$query->execute()or die(print_r($query->errorInfo()));
$datai = $query->fetch();
$query->CloseCursor();
// on définit $cat_down
$cat_down=$datai['cat_order']+1;
// on prépare les requêtes qui permettront d'intervertir les deux champs
$query=$cnx->prepare('UPDATE t_cat
SET
cat_order = :cat_order
WHERE cat_id = :cat_id');
$query->bindValue(':cat_id',(int) $data['cat_id'],PDO::PARAM_INT);
$query->bindValue(':cat_order',(int) $cat_up,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
$query=$cnx->prepare('UPDATE t_cat
SET
cat_order = :cat_order
WHERE cat_id = :cat_id');
$query->bindValue(':cat_id',(int) $datai['cat_id'],PDO::PARAM_INT);
$query->bindValue(':cat_order',(int) $cat_down,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
header('Location: '.SITE_ADRESSE.'admin/index.php?r=forum');
?>
Le script pour déscendre est exactement le même sauf que on définit en premier cat_down
Merci de votre aide, Cordialement