SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

290 Plugins, 198 contribs sur SPIP-Zone, 91 visiteurs en ce moment

Accueil > Améliorations de l’espace privé > Rang : ordonner par Drag & Drop > Rang : ordonner une liste par Drag&Drop (archive)

Rang : ordonner une liste par Drag&Drop (archive)

9 octobre 2017 – par nicod_, Peetdu – 30 commentaires

17 votes

Ceci est une archive périmée mais qui reste intéressante, parfois autant pour l’article que les commentaires associés.

Dans l’espace privé, pouvoir ordonner une liste par glisser-déposer. Par exemple la liste des articles d’une rubrique.

Il devient possible d’utiliser le critère {par rang} dans vos squelettes.

Ceci est la documentation de la version 0.7 pour archive.
La nouvelle version (1.0) est documentée ici.

Ce plugin est un POC : Proof of concept, permettant de démontrer la faisabilité d’une idée.

Ce qu’il fait déjà

Il gère l’ordonnancement par drag&drop de

  • la liste des articles dans une rubrique ;
  • la liste des mot-clés dans un groupe de mots-clés.

et hop...

Installation et configuration

Il s’installe comme tous les plugins.

Il nécessite le plugin Déclarer parent

Configuration

Choisir les objets
…pour lesquels vous voulez activer le drag&drop.
Ici vous pouvez activer

  • les Articles ;
  • les Mots-clés ;
  • Autres [1].

Ranger les objets
Il s’agit ici de mettre automatiquement une nouvelle instance d’un objet à la fin de la liste.
C’est le cas lorsque l’on publie un article ou lorsque l’on crée un mot-clé (le mot-clé n’ayant pas de statut).

Dans vos squelettes

Il est possible d’utiliser le critère par rang pour les objets activés dans la configuration.

  1. <BOUCLE_articles(ARTICLES){id_rubrique}{par rang, num titre, titre}>
  2.         <h2>#TITRE</h2>
  3.         <div>#TEXTE</div>
  4. </BOUCLE_articles>

Télécharger

Notes techniques

a/ Ce plugin se base sur la balise #RANG du core de SPIP [2]

b/ Ce plugin se base aussi sur la notion de « Définir la relation à l‘objet parent dans la déclaration de l‘objet ». Notion introduite dans le ticket https://core.spip.net/issues/3844

c/ Lorsque vous activez un objet dans la config, le plugin va créer un champ ’rang’ dans la table de l’objet sélectionné ;

d/ La désinstallation supprime les champs ’rang’ de tous les objets activés et les choix fait dans la configuration.

Je veux utiliser ce plugin pour faire du drag&drop sur mon objet éditorial

Pré-requis
Que votre objet soit un enfant direct d’un parent.

  • un article est l’enfant d’une rubrique ;
  • une rubrique est l’enfant d’une rubrique ;
  • un mot-clé est l’enfant d’un groupe de mot-clés ;
  • etc.

1- Déclarer le parent
Pour les plugins dans la zone, vous pouvez ajouter votre déclaration au plugin
Déclarer Parent

Pour votre objet éditorial personnel, vous devez déclarer cette parenté, dans le fichier prefixeplugin/base/monobjet.php -> function function prefixeplugin($tables) { et ajouter la ligne suivante

  1. $tables['spip_monobjets']['parent'] = array(
  2.         array('type' => 'rubrique', 'champ' => 'id_rubrique'),
  3. );

Télécharger

Dans cet exemple, le parent est une rubrique (cas le plus courant).

2- Déclarer le contexte (si besoin)
Le contexte, c’est la page ecrire/?exec=....dans laquelle se trouve votre liste à ordonner. Rang a besoin de cette information pour savoir où il doit ajouter le code javascript qui permet de faire le Drag&Drop.

Par défaut, Rang propose trois contextes :

  • le contexte exec=rubrique pour pouvoir classer des articles dans une rubrique par exemple
  • les contextes exec=mots et exec=groupe_mots : ce sont les deux contextes dans lesquels on peut se retrouver avec le besoin d’ordonner des mot-clés.

Par ajouter un nouveau contexte, vous allez devoir passer par le pipeline rang_declarer_contexte prévu a cet effet.

Exemple de déclaration
D’abord, il vous faut déclarer le pipeline lui même, puis ajouter le code suivant dans le fichier préciser dans l’attribut inclure, :

  1. function monplugin_rang_declarer_contexte($contexte) {
  2.         $contexte[] = 'catalogue';
  3.         return $contexte;
  4. }

Télécharger

3- Activer le Drag&Drop sur une liste
Vous allez devoir modifier le fichier /objets/liste/objets.html.
Vous pouvez vous inspirer du travail fait dans le fichier rang/prive/objets/liste/articles.html

En résumé, il s’agit d’ajouter les points suivants :

  • activer la fonction drag&drop simplement en ajoutant l’id_objet sur la ligne correspondante du tableau ;
  • ajouter le critère par rang pour le classement du tableau ;
  • afficher le picto drag&drop  ;
  • afficher le rang de l’objet dans le tableau.

…avec comme contrainte de ne rien activer si

  • on est pas dans une page rubrique ;
  • l’objet n’est pas sélectionné dans la configuration du plugin.

Voici quelques explications

  1. <thead>
  2.         <tr class='first_row'>
  3.                 [(#ENV{id_rubrique}|et{#VAL{mon_objet}|rang_objet_dans_config}|oui)<th class="picto" scope="col"></th>]
  4.                 <th class='statut' scope='col'>[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th>,
  5.                 [(#ENV{id_rubrique}|et{#VAL{mon_objet}|rang_objet_dans_config}|oui)<th class="rang" scope="col">[(#TRI{rang,<span title="<:rang:lien_trier_rang|attribut_html:>"><:rang:info_rang_abbr:></span>,ajax})]</th>]
  6.                 …
  7.                 <th class='id' scope='col'>[(#TRI{id_mon_objet,<:rang:info_id:>,ajax})]</th>
  8.         </tr>
  9. </thead>
  10. <tbody>
  11. <BOUCLE_liste_mon_objet(MON_OBJET){…}>
  12.         <tr id="id_#ID_MON_OBJET" class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
  13.                 [(#ENV{id_rubrique}|et{#VAL{mon_objet}|rang_objet_dans_config}|oui)<td class="picto">[(#CHEMIN_IMAGE{draggable-16.png}|balise_img)]</td>]
  14.                 <td class='statut'>[(#STATUT|puce_statut{article,#ID_MON_OBJET,#ID_RUBRIQUE})]</td>
  15.                 [(#ENV{id_rubrique}|et{#VAL{mon_objet}|rang_objet_dans_config}|oui)<td class="rang" scope="col">[(#RANG).]</td>]
  16.                 …
  17.         </tr>
  18. </BOUCLE_liste_mon_objet>
  19. </tbody>

Télécharger

N.B. : toutes les occurences de ’mon_objet’ doivent être remplacé par le type de votre objet.

Dans le head du tableau (thead)
Ligne 3 : ajout de l’entête de colonne pour afficher le picto drag&drop
ligne 5 : ajout de l’entête de colonne pour afficher le rang de l’occurence de l’objet
ligne 7 : on change juste l’intitulé de la colonne présentant l’id. On passe de ’N°’ à ’ID’. Ceci pour éviter une confusion avec le N° de rang

Dans le corps du tableau (tbody)
ligne 12 : ajoute d’un identifiant ’id=« id_#ID_MON_OBJET »’ indispensable pour le fonctionnement du drag&drop
ligne 13 : ajout de la colonne pour afficher afficher le picto drag&drop
Ligne 15 : ajout de la colonne pour afficher le rang de l’occurence de l’objet

Voir en ligne : https://plugins.spip.net/rang

P.-S.

Merci à Nicod et Marcimat pour leur aide technique.

ATTENTION, si vous utilisez le plugin TAA (Traduction d’Articles Autrement), désactiver l’affichage compact des articles, sinon le drag & drop ne fonctionne pas. La version 1.4.1 du plugin TAA est maintenant entièrement compatible avec rang

Notes

[1les « Autres » ce sont des objets éditoriaux non historiques, issues de plugins.
Cette option est laissée ouverte pour les développeurs qui font des plugins ’maison’ et qui souhaitent tester la fonction Rang.

Dernière modification de cette page le 5 mai 2018

Retour en haut de la page

Vos commentaires

  • Le 1er mars à 23:50, par DD En réponse à : Rang : ordonner une liste par Drag&Drop

    Hello,
    J’essaie d’adapter ce plugin pour les listes de produits attachés aux rubriques.
    J’ai renommé et modifié le fichier rang/prive//objets/liste/articles.html comme dit en remplaçant les occurrences « article » par « produit » et en rangeant ce nouveau fichier dans rang/prive//objets/liste/produits.html

    (d’ailleurs je me demande s’il ne va pas être écrasé ors d’une mise à jour du plugin mais cela ne fonctionne pas si je le range dans squelettes/prive//objets/liste/produits.html

    Visuellement sur la page d’une rubrique dans l’admin tout va bien : il y a le picto drag&drop et les numéros d’ordre des produits.
    Mais j’ai beau drag&dropper il ne veut pas modifier l’ordre des produits.
    Lorsque je rajoute un produit il se met bien à la fin avec un numéro mais impossible de le déplacer ensuite.

    Pour les listes d’articles le drag&drop fonctionne.

    Est-ce que j’ai oublié une étape ?

    dd

    • Le 2 mars à 00:33, par Peetdu En réponse à : Rang : ordonner une liste par Drag&Drop

      Hello,

      Mais j’ai beau drag&dropper il ne veut pas modifier l’ordre des produits.

      Le plugin Rang va désormais chercher le nom du parent de l’objet à ordonner, ceci grâce à un nouveau formalisme qui est en train de se mettre en place doucement dans SPIP.

      En attendant, Nicod_ a créé le plugin https://plugins.spip.net/declarerparent.html. Il est nécessaire dans ton cas (je vais mettre à jour la doc très prochainement à ce propos).

      Quand tu parles de « produits », s’agit t-il du plugin Produits ? Si oui, il est déjà déclaré dans le plugin « Declarer Parent ». Sinon, il te faudra faire cette déclaration.

    • Le 2 mars à 10:31, par DD En réponse à : Rang : ordonner une liste par Drag&Drop

      Alors j’ai installé le plugin de Nicod. Comme c’est bien le plugin Produits que j’utilise je n’ai rien fait d’autre.. et ça ne fonctionne toujours pas.
      Je peux mettre mon fichier rang/prive//objets/liste/produits.html en ligne quelque part si vous voulez.
      merci

    • Le 2 mars à 11:03, par Peetdu En réponse à : Rang : ordonner une liste par Drag&Drop

      si tu peux déposer le code de ton fichier sur http://spip.pastebin.fr et on en discute sur IRC ?

    • Le 3 avril à 00:12, par DD En réponse à : Rang : ordonner une liste par Drag&Drop

      Hello,
      J’ai mis à jour mes plugins mais le drag&drop ne fonctionne toujours pas sur mes listes de produits. J’en déduis que c’est pas encore possible ?
      Pour l’instant je contourne en numérotant les titres des produits mais c’est manuel.
      Merci

    • Le 3 avril à 17:43, par Peetdu En réponse à : Rang : ordonner une liste par Drag&Drop

      Hello DD,

      Tu trouveras sur cette même page, dans l’encadré « Téléchargements » un fichier Zip contenant le fichier HTML (testé) pour une liste de produits compatible avec le plugin Rang.

    • Le 3 avril à 22:07, par DD En réponse à : Rang : ordonner une liste par Drag&Drop

      Yes ! Merci
      J’ai du dé-ré-installer le plugin et enlever les numéros existants dans la base mais c’est bon

      dd

    Répondre à ce message

  • Le 23 mars à 09:15, par Loiseau2nuit En réponse à : Rang : ordonner une liste par Drag&Drop

    Hello !

    Alors de 2 choses, l’une :
    MERCI pour ce plugin que j’ai appelé de mes voeux pendant des années et que j’utilise en production sur ma mutualisation sans soucis majeur depuis plusieurs semaines maintenant :D <3

    La seconde en revanche, côté squelettes, je coince un peu :
    J’essaie d’afficher mes articles :

    • par rang si une organisation a été définie (drag & drop ou numérotation)
    • sinon !par date (comportement standard de la rubrique)

    sauf que

    1.   <BOUCLE_articles(ARTICLES){id_rubrique} {par rang} {!par date}>
    2.       .../...
    3.   </BOUCLE_articles>

    Télécharger

    ne fonctionne pas.

    Autant les classement par rang s’affichent nickel, que dans les rubriques où je n’ai rien classé (et où j’ai même supprimé la numérotation) l’ordre d’affichage reste incohérent.

    Une idée ?
    Merci d’avance

    • Le 23 mars à 15:54, par DD En réponse à : Rang : ordonner une liste par Drag&Drop

      Chez moi cela fonctionne. je n’ai pas coché la case « Donner un rang aux objets quand ils sont publiés et les classer à la suite des autres. » dans la config du plugin.

      dd

    Répondre à ce message

  • Le 17 mars à 16:15, par ivandps En réponse à : Rang : ordonner une liste par Drag&Drop

    Bonjour j’ai activé Rang dans mon site.
    Depuis j’ai un problème avec le glossaire interne. Les contenus des mots clés issus de raccourcis <article98|descriptif> ne s’affiche plus. Voir mot Grace Kelly dans la page.
    J’ai désactivé le plugin. Les numéros de titres des objets sont toujours là. Avez-vous une idée ? Merci

    Répondre à ce message

  • Le 19 mars à 08:29, par Rainer Müller En réponse à : Rang : ordonner une liste par Drag&Drop

    Bonjour,

    je voulais juste signaler un petit bug. Quand aucun objet est définit dans la configuration, l’erreur suivant se produit :

    1 Erreur SQL 1096
    No tables used
    SELECT * LIMIT 1
    /srv/data/web/vhosts/www.histori.al/htdocs/ecrire/genie/maintenance.php	verifier_crash_tables() sql_select() ; 72

    voir discussion sur le forum : https://forum.spip.net/fr_268394.html?debut_forums=%40269380#forum269380

    Répondre à ce message

  • Le 16 mars à 04:12, par liberte En réponse à : Rang : ordonner une liste par Drag&Drop

    Bonjour,

    sous Spip 3.1.17

    Je n’arrive pas a mettre a jour Rang 0.7.10

    J’ai le message suivant :

    Le plugin Rang dépend de DECLARERPARENT [1.0.0 ;]

    • Le 16 mars à 07:58, par liberte En réponse à : Rang : ordonner une liste par Drag&Drop

      Rebonjour,

      Declarer Parent est marque compatible 3.2.

      Ca marche pour 3.1 ?

      Comment l’obtenir ?

      Puisque Rang est dependant de Declarer Parent, il n’y a pas moyen de forcer l’installation ensemble ?

    • Le 16 mars à 08:12, par Peetdu En réponse à : Rang : ordonner une liste par Drag&Drop

      Le plugin Declarer Parent est désormais compatible 3.1. Il devrait être mis à jour sur la zone d’ici une heure ou deux.

      Merci du signalement.

    • Le 16 mars à 11:01, par liberte En réponse à : Rang : ordonner une liste par Drag&Drop

      Merci pour le changement de compatibilite.

      Cependant, je n’arrive toujours pas a mettre a jour Rang dans la gestion des plugins. De plus, une recherche sur ajouter plugin Declarer Parent ne donne rien.

    • Le 16 mars à 13:29, par Maïeul En réponse à : Rang : ordonner une liste par Drag&Drop

      @peetdu : je me demande si pour que l’install automatique soit possible il ne faut pas que le plugin soit au moi en état « test ».
      @liberte : le zip était regénéré à 11h, mais pas les infos sur la version et la compatibilité dans le flux rss, qui est mis à jour toutes les 6 heures. Peux tu reessayer ?

    • Le 16 mars à 13:43, par Peetdu En réponse à : Rang : ordonner une liste par Drag&Drop

      @maieul : tout est ok. Ce n’est pas une question d’état du plugin (test / experimental / etc.)

      Il faut juste attendre (aussi) que le chron passe, ou le forcer dans son site Web. Voir Maintenance -> liste des travaux (svp_actualiser_depots ). Au pire il passe toutes les 6 heures.

    • Le 17 mars à 00:53, par liberte En réponse à : Rang : ordonner une liste par Drag&Drop

      Essaye et eprouve.

      Merci

    Répondre à ce message

  • Le 10 janvier à 14:56, par DD En réponse à : Rang : ordonner une liste par Drag&Drop

    Est-il possible d’utiliser par_rang avec le plugin « sélection d’articles » ?

    Celui-ci autorise la sélection d’articles à la racine du site :

    <BOUCLE_art(ARTICLES){id_rubrique=0}{par rang}>
    ....

    mais sur ma page sommaire le critère « par rang » n’est alors pas reconnu.

    Cela oblige à utiliser en parallèle sur un site les 2 plugins « sélection d’articles » et « rang » pour ranger à la fois le sommaire et ailleurs (si j’ai bien compris).

    Merci

    • Le 11 janvier à 12:45, par Peetdu En réponse à : Rang : ordonner une liste par Drag&Drop

      Bonjour DD,

      je ne comprend pas pourquoi tu as besoin du plugin Rang ici. Le plugin « Selection d’article » fait déjà le boulot (classer ta sélection avec Drag&Drop)

    • Le 11 janvier à 17:37, par DD En réponse à : Rang : ordonner une liste par Drag&Drop

      C’est parce qu’avec « sélection d’articles » il faut manuellement sélectionner les objets pour les ranger alors que « rang » le fait tout seul (mais pas partout).
      Et pour les utilisateurs c’est perturbant d’avoir 2 fonctionnements différents pour un résultat similaire (ou à peu près).

    Répondre à ce message

  • Le 13 octobre 2017 à 14:57, par ivandps En réponse à : Rang : ordonner une liste par Drag&Drop

    Canon, je suis fan de drag and drop. Merci

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Acces Restreint 3.0

    11 décembre 2008 – 837 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

  • Champs Extras 3

    16 janvier 2012 – 646 commentaires

    Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP. Screencast Vous n’aimez pas (...)

  • Export Spip vers Wordpress

    11 mai 2013 – 35 commentaires

    Problématique On souhaite migrer un site spip vers un site wordpress. Si seul le contenu des articles nous intéresse, on peut très bien utiliser un des plugins de Wordpress permettant d’importer un flux rss, ce flux rss étant créé par Spip. Cette (...)

  • LIM : alléger l’espace privé

    20 avril 2015 – 47 commentaires

    Ce plugin permet de désactiver l’affichage de blocs ou de boutons, présents par défaut dans SPIP mais qui peuvent devenir inutiles dans le cadre de votre projet. Il allège du coup l’interface d’édition et supprime d’éventuels risques de confusion dans (...)

  • Partageur

    29 janvier 2011 – 52 commentaires

    Permet de recopier facilement des articles d’un site SPIP partageur à l’autre. Présentation Ce plugin est né d’un besoin de partager des articles entre sites SPIP. Contrairement aux plugins SPIP2SPIP, Flux RSS en articles le principe d’import (...)