captain_torche
vendredi 3 mars 2006 à 12:02
Bon, j'ai réussi à m'en sortir :
Donc, après avoir copié les
fichiers disponibles sur le site de script.aculo.us, et les avoir appelés dans ma page :
HTML
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="scriptaculous.js"></script>
J'ai créé ma liste, de façon très simple :
HTML
<ul class="dragdrop" id="dragdrop">
<li id="menu_1">Element 1</li>
<li id="menu_2">Element 2</li>
<li id="menu_3">Element 3</li>
<li id="menu_4">Element 4</li>
<li id="menu_5">Element 5</li>
</ul>
Petites explications, à ce stade :
L'id de la liste, servira à l'identifier pour l'initialisation du comportement.
Les id des éléments de liste sont indispensables, et doivent être de la forme toto_x, où toto est le texte qu'on veut, et x est incrémenté à chaque élément.
Ensuite, il suffit d'initialiser le comportement sur la liste :
HTML
<script type="text/javascript" language="javascript">
Sortable.create('dragdrop');
</script>
A ce stade, on a déjà une liste fonctionnelle (libre à vous de la styler), avec le comportement de base.
Ensuite, on crée le bouton/lien, qui permettra de récupérer le nouvel ordre de la liste :
HTML
<a href="#" onClick="go(Sortable.serialize('dragdrop'))">Valider</a>
On obtiendra, dans la fonction go (que je décris juste en-dessous), quelque chose du genre :
CODE
dragdrop[]=1&dragdrop[]=2&dragdrop[]=3&dragdrop[]=4&dragdrop[]=5
Avec l'ordre défini selon votre manipulation de la liste.
Il faut donc, dans la fonction go, supprimer ce qui nous est inutile (je pars dans l'optique que je veux récupérer quelque chose de ressemblant à '1,2,3,4,5')
J'ajoute donc dans le head de ma page, la fonction JavaScript suivante :
HTML
<script type="text/javascript">
function go(expr) {
var reg = new RegExp("(&)", "g");
var reg2 = new RegExp("[^0-9,]", "g");
var liste1 = expr.replace(reg, ",");
var liste = liste1.replace(reg2, "");
document.location = ('index.php?new_order='+liste);
}
</script>
La première variable (reg), est une expression régulière qui recherche tous les caractères amperstand (&).
La seconde (reg2), est également une expression régulière qui recherchera toutes les chaînes de caractères n'étant pas des chiffres, ou une virgule.
On remplace ensuite tous les amperstand par des virgules.
On remplace ensuite tous les caractères non-décimaux ni virgules, par une chaîne vide (on les efface).
On obtient donc la valeur recherchée (soit 1,2,3,4,5), qu'on passe en argument GET en appelant la page de traitement.
Ensuite, on pourra traiter la variable avec le langage désiré (PHP, par exemple).