Je bosse avec un logiciel de CRM : Salesforce. Le but est d’afficher un tableau de résultats paginé avec une case à cocher permettant de sélectionner l’ensemble des élements de toutes les pages.
Bon c’est facile pour moi en me basant sur le language mais étant donné qu’il faut réaliser les opération côtés serveur, ça prends du temps.
J’ai donc pensé à travailler la pagination, le tri des colonnes et le fameux cochage en masse en JQuery pour aller plus vite sauf que j’y connais que dalle.
Bref j’ai zieuté pas mal de temps et j’ai réussi à intégrer les scipts tablesorter et tablepager. Reste le truc des cases à cocher.
J’ai chopé une petit script qui marche bien mais qui coche uniquement les cases visibles et non l’ensemble des cases quelque soit la page :
donc tu as plusieurs pages, et tu voudrais qu’en validant la case à cocher , ça valide toutes les case de toutes les pages?
ou j’ai pas bien compris ? !!!
C’est ça, mon tableau est paginé et ça me coche uniquement les cases à cocher de la page courrante et non celles de l’ensemble des pages :(. Dans le screen je suis sur la page 1/3 et en cochant la case du header du tableau, ça me coche pas les cases en page 2 et 3
il faudrait faire une variable globale … euh oui mais non c’est pas possible. … quand tu changes de page HTML, tout ton code est relu … il faudrai à la rigueur pouvoir envoyé l’information de Check_all lorsque tu cliques sur “Page suivante”
Il peut pas appliquer la nouvelle definition de l’event click vu que tes cases n’existent pas.
La solution pour que ton script marche serait de construire tes cases mais avec ta pagination ca va être compliqué…
Sinon il faudrait ajouter ton petit script à la fin de l’execution des boutons ‹ Page next › ‹ Page previous › pour relancer l’event. Ca sent la merde ton truc à cause de ton plugin de pagination…
Quelle action veux-tu entreprendre une fois que tout est coché ???
PS : ca me choque pas qu’une case « Select all » ne selectionne que les elements presents sur la page et non dans la pagination : tu le nommes « Select all visible ».
Et, par ex, tu fais un bouton « Delete All » (si tu veux delete) en bas pour effacer meme les non cochés.
Effectivement, l’ensemble de la table est bien généré mais l’affichage est restreint par le plugin de pagination. Les éléments existent bien puisque des changements dans les pages sont bien gardés en mémoires, donc il gère bien l’état. Ca doit donc se trouver quelque part en mémoire.
Sinon oui, moi non plus ça ne me choque pas que la case ne coche que les éléments visibles mais effectivement, que ça soit par un bouton ou un lien, il faudrait avoir un moyen de cocher absolument tout. Comment ? Faire en sorte de changer de naviguer entre les pages automatiquement de cocher chaque page puis de revenir sur la page courante ? De dépaginer le tableau, cocher puis repaginer ? Je sais pas je connais pas la manière de fonctionner du jquery et je trouve pas d’exemple
T’as pas repondu à ma question : à quoi ca te sert de tout selectionner ??
Si c’est juste pour avoir une feature, laisse tomber et cocher les visibles suffirra.
Si c’est pour entrainer un traitement en masse, fous un bouton qui traite en masse sans meme avoir coché.
Alors pour le coup c’est plutôt un test mais généralement c’est pour sélectionner des contacts à ajouter à des campagnes, des contacts à rendre actif… Donc oui le but final c’est de faire une mise à jour en masse. C’est vraiment un truc assez classique que les client demande, quitte à tout sélectionner puis désélectionner 1 ou 2 lignes
Il doit bien avoir en effet un tableau des valeurs cachées, faudrait se plonger dans le code du plugin… ouais… euh… ca te dérange si je réponds que j’ai pas super le temps là ???
Ton systeme de pagination fout trop la merde, surtout qu’il redefinie une balise genre placeholder… donc pas super gérable par JQuery (on aurait pu mettre un event sur la construction d’une balise input mais avec ton plugin de pagination… niet).
Laisse tel quel et augmente la nb de vu par page ou change ton plugin de pagination
bon… j’ai zieuté vite fait
dans le fichier
/force/resource/1354811840000/tablepager"
A chaque changement de page il rappelle cette function donc ajoute juste en dessous var s blablabla…
$(« input[type=‹ checkbox ›] »).attr(‹ checked ›, $(’#checkall’).is(’:checked’));
ca devrait marcher mais ca modifie le plugin de pagination, fais bien gaffe à pas le mettre à jour de maniere automatique, tu paumerais tes modifs.
Bon, j’ai pas beaucoup de temps ce soir, mais rapidement :
je n’ai jamais utilisé le plugin tableSorter, mais j’ai pas mal joué avec datatables, qui en est un autre, et qui permet (entre autre) de faire en sorte que chaque ligne soit gérée un peu comme un formulaire : exemple.
Il y a énormément de possibilités avec ce plugin, aussi, si jamais tu ne t’en sors pas avec les conseils de Donjohn qui me semblent pas du tout déconnant mais qui nécessitent de modifier la lib (avec potentiellement des impacts que tu identifies pas tout de suite), zieutes là dessus
Merci beaucoup pour vos conseils ! Clairement toutes les bonnes idées sont à prendre, je débute et je peux tout à fait utiliser un autre plugin :). Je testerais ça demain matin et vous ferais mes retours !
Oublie ma solution, ça marcherait techniquement mais c’est inutile. Ton but c’est de cocher tout le monde puis de pouvoir décocher 2/3 et récuperer la liste des cochés.
Avec mon systeme bidon, tu peux pas. Dans tous les cas, tu ne pourras connaitre les non cochés que sur la page en cours.
Refais ta pagination avec un autre plugin dont tu peux recuperer ton tableau complet une fois trié/coché.
Autre solution, tu fais un systeme similaire à gmail et son systeme de recherche. Une checkbox generale permet de selectionner tous les items de la page en cours. Une fois cochée et tous les items de la page selectionnés, une ligne indiquant
Via le lien, on t’indique ensuite que tu as selectionné toutes tes conversations et tu peux faire ton action sur celle-ci.
Haha oui le système Gmail qui demande si tu veux sélectionner l’ensemble des conversations quelque soit la page, pourquoi pas, mais encore faut-il m’expliquer comment parcourir les enregistrements invisibles
Bon je vais essayer avec le plugin de Gratz et je vous dit
Bon… J’ai intégré le datatable. Déjà j’aime bien la boite de recherche et la pagination.
Par contre, il touche au css de mon tableau donc va falloir que je me crée mon propre fichier css. Pas trop grave mais bon c’est chaint et j’ai pas vu de paramètre lui disant de foutre la paix à ma table.
J’ai de plus remis mes 3 lignes de codes pour le selectAll. Alors non seulement ça ne coche toujours pas les lignes se trouvant sur les autres pages mais en plus, si on a le malheur de cliquer alors qu’on est sur la page 2 par exemple, ça nous remet à la page 1…
Ha oui et bon, j’ai un soucis de droit sur le champ Email pour la page publique mais quelque soit le script, ça refuse de me trier si c’est un input text dans la colonne. Dommage… Pas forcément handicapant, j’ai pas de use case où un client m’a demandé un trie sur un champ modifiable mais ça pourrait arriver…