SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Rédaction > Édition publique > Crayons

Les crayons

Un plugin pour une édition directe sur le site public

mercredi 23 avril 2008, par Fil, toggg. Dernier ajout samedi 3 mai 2008

Toutes les versions de cet article :


Ce plugin permet d’éditer les contenus sur les pages publiques du site, sans passer par l’espace privé de SPIP.

Le paramétrage côté squelette est des plus simples : il se base sur la classe #EDIT{...} adjointe aux éléments qu’on veut rendre modifiables.


Actualité

La version 1.0 a été publiée le 23 avril 2008 à 00h04

Résumé

Après l’activation du plugin, les contenus peuvent être directement édités « en place » sur les pages publiques du site, par les personnes autorisées.

Cela demande de préparer vos squelettes pour les rendre compatibles avec ce plugin (à noter : c’est le cas de la plupart des squelettes distribués sur SPIP-Contrib). Le principe est simple : un bloc est éditable s’il contient la classe crayon objet-champ-id. Une balise #EDIT{} facilite encore l’écriture. En fait, pour permettre d’éditer le titre d’un article, il suffit de remplacer dans le squelette de la page article.html, la ligne (par exemple) :

<h1>#TITRE</h1>

par :
<h1 class="crayon article-titre-#ID_ARTICLE">#TITRE</h1>

ou encore, plus simplement :
<h1 class="#EDIT{titre}">#TITRE</h1>

Autre exemple, pour rendre « crayonnable » le texte d’un article, transformer :
[<div class="texte">(#TEXTE|image_reduire{520,0})</div>]

en :
[<div class="#EDIT{texte} texte">(#TEXTE|image_reduire{520,0})</div>]

Les pages concernées doivent obligatoirement comporter une balise </head>, écrit précisément de cette façon (lettres minuscules).

Fonctionnement

Fabrication de la page coté serveur

Lors du chargement d’une page, le plugin agit dans le pipeline affichage_final.

Il vérifie alors :

  • si l’utilisateur est identifié
  • si la page contient au moins une chaîne de caractères “crayon xxxx-yyyy-nn”,
  • et si l’utilisateur possède des droits sur au moins un des éléments ainsi marqués

Le cas échéant, il insère dans le <head> de la page le script externe crayons.js ainsi que des données de configuration ; le script s’exécute à la fin du chargement de la page, et vérifie à intervalles réguliers si de nouveaux crayons sont disponibles, de façon à les activer en cas de besoin.


Chargement par le navigateur

Lorsque la page finit de se charger (et si le visiteur a des droits d’édition sur les crayons présents dans la page), le script crayons.js sélectionne tous les éléments possédant la classe crayon type-champ-id, et si ils sont autorisés pour l’utilisateur inscrit, leur adjoint une image clicable (un crayon) et leur ajoute la classe crayon-autorise pour indiquer qu’ils sont « éditables ».

Un clic sur cette image, mais aussi un double-clic sur l’élément lui-même, provoquent l’activation du formulaire d’édition.


Activation du crayon

Un click sur le « crayon » (ou un double-clic sur l’élément) déclenche une requête vers le serveur, qui renvoie le formulaire de modification qui va « remplacer » l’élément affiché.

La requête spécifie au serveur le « type », le « champ » et l’« id » pour lesquels le formulaire est demandé.

Après vérification de l’existence des données et des droits sur celles-ci, le serveur renvoie le formulaire (sous forme de données javascript, au format JSON). Le type et les dimensions du champs sont déterminés d’après sa nature et la place réservée à l’élément. Il contient le source brut du texte, comme lorsque on édite depuis l’espace privé ; la police, la taille et la couleur des caractères sont préservés.

crayon.js associe ce formulaire à l’élément puis "cache" ce dernier.

L’utilisateur peut maintenant modifier les données.

Attention : l’affichage final ne peut être réalisé que par le serveur, un click en dehors de la zone d’entrée après des modifications affichera à nouveau le contenu originel.
Dans ce cas, une roue dentée vous signale que vous avez introduit une modification. Click sur le bouton ou double-click sur l’élément vous y ramène, elles ne sont pas perdues.
Si vous abandonnez cependant la page, un dernier rappel vous propose de sauvegarder.


Sauvegarde

Le formulaire possède une série de boutons/touches associées :

  • OK (ainsi que la touche Entrée [1]) permet de sauvegarder,
  • Annuler (ainsi que la touche Escape) abandonne toute mise à jour,
  • Un clic en dehors des zones de saisie cache ces zones et revient à l’affichage initial.

Il contient aussi des identificateurs et des clés associés au données.

Le formulaire est soumis en POST par ajaxForm donc asynchrone. Sur réception, le serveur :

  • analyse les données soumises, leur cohérence et leur actualité (afin d’annuler l’envoi si les données ont été entre-temps modifiées par ailleurs).
  • vérifie une nouvelle fois les droits d’édition.
  • appelle les procédures internes de SPIP pour mettre à jour les données.

Le système alimente notamment l’historique des modifications, de la même façon que l’espace privé.

Configuration

Le plugin propose plusieurs options, activables via le plugin CFG ; notamment :
- un message si on confirme OK mais que rien n’est changé ;
- une alerte permettant de sauvegarder les modifications si on abandonne la page alors qu’un texte est en cours d’édition ;
- l’activation de la barre typographique ;
- des couleurs permettant de mieux repérer les zones modifiables.

À noter : si le plugin est absent ou désactivé, la balise #EDIT{...} renvoie une chaîne vide ; cela permet donc de « crayonner » des squelettes même si l’on décide finalement de ne pas utiliser le plugin

Utilisation étendue

Toutes les tables standard de SPIP (articles, brèves, rubriques, etc.) sont gérées, y compris les forums et les signatures de pétition (mais, pour ces deux dernières, il faut utiliser le plugin Autorité pour permettre des modifications) ; pour chacune de ces tables, tous les champs de type « ligne » (titre, soustitre etc), ou « texte » (texte, chapo, descriptif...) sont crayonnables.

On peut également éditer les logos avec le crayon #EDIT{logo} ; un réglage permet de redimensionner ces logos à la volée lors de l’upload.

Les documents sont modifiables avec le crayon #EDIT{fichier} : le nouveau document vient remplacer l’ancien et sa taille, hauteur et largeur sont mises à jour. (NB : pas encore compatible documents distants).

Enfin, et à condition d’utiliser une version très récente (SVN, dite « 1.9.3 ») de SPIP, on peut éditer les champs extra.

À noter :
- Les crayons fonctionnent avec n’importe quelle table — à condition que cette table possède une clé primaire (numérique) qui s’appelle id_xxx, où xxx est le nom de la table.
- Si un texte "crayonnable" est un champ MySQL MEDIUMTEXT ou plus long, les crayons affichent un TEXTAREA, et sinon, un INPUT.
- Seuls les admins complets peuvent ainsi crayonner des textes provenant d’une table non-SPIP.

Chantiers

L’obtention du formulaire d’édition (« contrôleurs ») ainsi que la vue obtenue en retour sont surchargeables, par de simples squelettes (voir les exemples dans les répertoires controleurs/ et vues/ du plugin).

Ces formulaires peuvent travailler en parallèle sur plusieurs champs d’un enregistrement (article), voire plusieurs enregistrements d’une même table ou de tables différentes : il y a là de quoi faire des interfaces d’édition spécialisées et très efficaces.

Comme toujours, les contributeurs sont bienvenus !

P.-S.

Les crayons ont un mode de débug activable en mettant dans mes_options.php la ligne suivante :
define('_DEBUG_CRAYONS', true);
Ce code ralentit un peu le fonctionnement, puisque le script est rechargé à chaque fois, mais facilite le repérage de bugs et le développement de nouvelles fonctionnalités.

Documents joints

Notes

[1] Ainsi que, sur Mac, la touche ctrl-S, et sur PC les touches alt-S ou F8.


Répondre à cet article

  • Affichage vide pendant l’édition

    12 mai 2008 00:15, par Bruno

    Bonjour et merci à tous les contributeurs

    Je viens d’installer crayons sur SPIP 1.9.2c J’ai modifié mon squelette comme indiqué.

    Lorsque je passe le curseur sur le texte, le petit crayon s’affiche. Lorsque je double-clique sur le texte, j’ai un picto OK et un X qui s’affichent et la zone de texte est toute vide. Mais je n’arrive pas à éditer le texte.

    J’ai désactivé tous les plugins sauf CFG et SESSIONS. Mais c’est toujours pareil.

    Répondre à ce message

    Retour au début des forums

  • Les crayons

    9 mai 2008 15:17, par gouZ

    Quelqu’un a-t-il une install fonctionelle de SPIP (1.9.2.d 11132) avec le plugin crayons en version 1.0 ???

    Je suis très habitué à ce plugin, et la impossible de le faire fonctionner... Mon firebug bug ( :) ) et j’ai deux erreur jvs dans ma console de FF :

    - une première dans la fonction eval(decompactage)
    - une deuxieme (surement liée à la première) : Erreur : cQuery.prototype.cfgCrayons is not a constructor

    Ca vous parle ??? Parce que la j’ai testé plusieurs versions, fait toutes les MAJ possibles et là j’ai plus d’idée...

    Répondre à ce message

    Retour au début des forums

  • Les crayons

    28 avril 2008 12:54, par JamesNicolas

    Serait-il possible d’avoir une largeur et une hauteur minimum. Par exemple j’ai une ligne dont le texte fait 10px et qui ne contient que 3-4 mots. Dans ce cas là je ne peux rien du tout faire, le champs est complètement masqué. (visible ici au niveau des descriptions de chocolat)

    Merci d’avance,

    JN

    Répondre à ce message

    • Les crayons 29 avril 2008 10:11, par JamesNicolas

      Autant pour moi, après de nombreuses cogitations, j’ai remarqué que j’avais mal orthographié la balise, désolé pour le dérangement.

      Répondre à ce message

    Retour au début des forums

  • indexation

    28 avril 2008 18:08, par Yoh

    Bonjour,

    Quelqu’un saurait-il comment ça se passe au niveau de l’indexation (pour le moteur de recherche) des sites (syndic) lors d’une modification avec ce plugin ?

    Merci

    Répondre à ce message

    Retour au début des forums

  • Les crayons

    25 avril 2008 16:21, par Stéph

    Bonjour

    Est il possible de "crayonner" spip_urls dans spip 1.9.3 dev. Mes premiers essais n’ont rien donnés de concluant.

    Répondre à ce message

    • Les crayons 25 avril 2008 17:21, par Fil

      Non car les URLs sont gérés de façon non commune (avec un MAX(date)). Il va donc falloir faire un système vue/contrôleur/editer_xxx() spécifique. Bonne idée en tous cas

      Répondre à ce message

    Retour au début des forums

  • Les crayons

    20 avril 2008 15:05, par Bernard

    Bonjour,

    à propos de

    #EDITfichier : le nouveau document vient remplacer l’ancien et sa taille, hauteur et largeur sont mises à jour. (NB : pas encore compatible documents distants)

    Il s’agit bien de modifier un document attaché à un article ?

    Je n’arrive pas à le faire marcher. J’étais content de trouver une façon de modifier un doc existant.
    J’ai essayé de deux façons :

    <div class="#EDIT{texte} #EDIT{fichier} texte">

    dans la boucle ARTICLES, et

    <div class="#EDIT{fichier} doc">

    dans la boucle DOCUMENTS

    Peux-tu expliquer un peu plus ?
    Que veut dire "pas encore compatible documents distants" ?

    J’ai les crayons version 0.9, SPIP 1.9.2a [9220]

    Merci

    Bernard

    Répondre à ce message

    • Les crayons & les documents 23 avril 2008 00:03, par Fil

      Oui ça marche, je viens de vérifier avec ce simple squelette :

      </head>
      <BOUCLE_d(DOCUMENTS){mode=document}{pagination}>
      <div class="#EDIT{fichier}">#FICHIER</div>
      </BOUCLE_d>

      Mais je teste en version dev de SPIP ; je ne garantis rien avec la version 1.9.2a.

      Répondre à ce message

      • Les crayons & les documents 24 avril 2008 00:50, par Bernard

        Salut,

        Je suis allé un peu plus loin (je n’utilisais pas la balise #FICHIER...).

        Dans la version SPIP que j’ai, il n’y a pas de champ "extension" dans la table spip_documents, ce qui empêchait le remplacement du vieux fichier par le nouveau. En la supprimant du query ça passe.

        Il reste aussi un défaut d’affichage après validation (appui sur OK) : le formulaire de saisie du nouveau fichier reste affiché en semi transparent. De plus, quand je quitte la page, il y a une demande de confirmation alors que tout s’est bien passé (le nouveau fichier a bien remplacé l’ancien).

        As-tu déjà rencontré cela ? (même chose avec Firefox et IE V6). J’ai essayé de regarder ce qui se passe, mais le code est complexe.

        merci

        Bernard.

        Répondre à ce message

        • Les crayons & les documents 24 avril 2008 01:16, par Fil

          Quelle version de SPIP ? Je crois que ce crayon ne fonctionne qu’en version dev.

          Répondre à ce message

        • Les crayons & les documents 24 avril 2008 13:55, par Pym_Nono

          Nous avons eu le même souci que toi. En version 1.9.2c et la toute dernière version de "crayons". Ce bug d’affichage cache en fait une erreur du script qui ne peut pas supprimer le « document temporaire et ceci en raison d’un appel indéfini vers la fonction get_spip_doc.

          Pour retrouver un comportement normal, nous avons ajouté ces lignes dans crayons.php (tirées de cfg_fichier.php) :

          if (!function_exists(’get_spip_doc’))

          function get_spip_doc($fichier)

          // fichier distant

          if (preg_match(’,^\w+ ://,’, $fichier))

          return $fichier ;

          // gestion d’erreurs, fichier=’’

          if (!strlen($fichier))

          return false ;

          // fichier normal

          return (strpos($fichier, _DIR_IMG) === false)

           ? _DIR_IMG . $fichier

           : $fichier ; J’espère que cela pourra te tirer d’affaire.

          Une validation de cette manip par Fil serait bienvenue

          Répondre à ce message

          • Les crayons & les documents 24 avril 2008 13:57, par Pym_Nono

            Ca m’énerve, je n’ai pas réussi à faire apparaitre les accolades ouvrantes et fermantes sur mon message ci-dessus...

            Tu rectifieras ....

            Répondre à ce message

            • Les crayons & les documents 24 avril 2008 14:06, par Bernard

              Merci,

              j’essaie ce soir.

              pour les accolades, essaie en encadrant ton code avec les balises

              <code>
              <\/code> (sans le "\")

              Bernard.

              Répondre à ce message

              • Les crayons & les documents 24 avril 2008 15:00, par Pym_Nono
              • Les crayons & les documents 24 avril 2008 15:01, par Pym_Nono

                C’est plus propre comme ça

                        if (!function_exists('get_spip_doc')){
                                function get_spip_doc($fichier) {
                                        // fichier distant
                                        if (preg_match(',^\w+://,', $fichier))
                                                return $fichier;

                                        // gestion d'erreurs, fichier=''
                                        if (!strlen($fichier))
                                                return false;

                                        // fichier normal
                                        return (strpos($fichier, _DIR_IMG) === false)
                                                ? _DIR_IMG . $fichier
                                                : $fichier;
                                }
                        }       

                Répondre à ce message

    Retour au début des forums

  • Les crayons

    24 avril 2008 12:54, par Yann

    Bonjour, Lorsque j’active le plugin et que je met la balise

    J’ai le message suivant :

    (#TEXTE)

    Fatal error : Call to undefined function interprete_argument_balise() in D :\Projets\CMS\xampp\htdocs\spip\plugins\crayons\tetecrayons.php on line 189

    Auriez vous une idée du problème ? impossible de trouver la fonction dans l’ensemble des fichiers.

    Répondre à ce message

    • Les crayons 24 avril 2008 12:55, par Yann

      Bon ya eu un méli mélo dans mon message précédent, donc la balise c’est le diezeEDIT

      et le message d’erreur c’est : Fatal error : Call to undefined function interprete_argument_balise() in D :\Projets\CMS\xampp\htdocs\spip\plugins\crayons\tetecrayons.php on line 189

      Répondre à ce message

    Retour au début des forums

  • Les crayons - Syntax Error

    23 avril 2008 12:17, par Chourak

    J’ai voulu essayer la dernière mouture sur un spip (1.9.2d) tout fraichement installé.
    Avec les crayons comme seul plugin et en utilisant les squelettes spip par défaut je me suis retrouvé face à une syntax error dans le crayons.js de type

    c =

    (merci firebug)
    La ligne incriminée (tjs selon firebug) serait

    ligne 132 : eval('c = '+c);

    Merci d’avance :)

    Répondre à ce message

    • Les crayons - Syntax Error 23 avril 2008 12:51, par Fil

      Nous voilà bien !! :-)

      Je viens de réessayer chez moi, sans problème... on a par contre une petite incompatibilité avec le plugin CFG, mais qui ne donne pas cette erreur-là. Est-ce que tu peux regarder dans Firebug le résultat des requêtes ajax (dans l’onglet "Console") ?

      PS : pour la suite c’est mieux de discuter sur la liste spip-zone@rezo.net

      Répondre à ce message

    Retour au début des forums

  • Les crayons : Résumé

    23 avril 2008 02:53, par André Vincent

    Seulement une petite suggestion...

    Après l’activation du plugin, installé dans le répertoire plugins/, les contenus peuvent être directement édités [...]

    On pourrait aussi ajouter :

    Après l’activation du plugin, installé dans le répertoire plugins/ (ou encore mieux, dans le répertoire plugins/auto/), les contenus peuvent être directement édités [...]

    Et avec une note en bas de page on pourrait préciser pourquoi c’est mieux. Quelque chose du genre :

    2. Dans la version 1.9.3 de SPIP, la mise à jour du plugin Crayons installé dans le répertoire plugins/auto/ sera grandement facilitée.

    Répondre à ce message

    • Les crayons : Résumé 23 avril 2008 14:02, par Fil

      En fait ce n’est pas vraiment le bon endroit pour faire un manuel d’installation des plugins. Mais ce serait une bonne idée de mettre un lien vers la bonne page de la doc (qu’il va sans doute falloir écrire auparavant).

      Répondre à ce message

    Retour au début des forums

  • Les crayons

    23 avril 2008 13:01, par noé

    Un petit commentaire pour suggérer d’implementer la fonctionnalité suivante (si ce n’est fait).

    Pouvoir paser à un #EDIT une liste de colonne plutôt qu’une seule colonne le tout terminé par une valeur servant de chaine de séparation.

    Le cas d’usage serait par le titre d’un article avec sur titre et sous titre qui’il me semble plus fonctionnel de pouvoir saisir dans un unique TEXTAREA que dans trois iINPUTs dès lors que l’on convient que le double saut de ligne est une chaine séparatrice.

    mes 2x100

    Répondre à ce message

    Retour au début des forums

  • Les crayons

    23 avril 2008 12:19, par rpapa

    Salut

    Le plugin crayons permet-il la création d’article (d’une sous rubrique) dans une rubrique depuis l’espace extérieur

    Répondre à ce message

    Retour au début des forums

0 | 25 | 50 | 75 | 100 | 125 | 150 | 175 | 200 |...



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net