SPIP - Contrib

SPIP - Contrib

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

182 visiteurs en ce moment

fontsizeup fontsizedown
[350 commentaires]

Les crayons

Un plugin pour une édition directe sur le site public

mercredi 23 avril 2008, par Fil, toggg

Toutes les versions de cet article : [English] [Español] [français]

  • Digg
  • Del.icio.us
  • Facebook
  • Google
  • Technorati
5 votes

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é squelettes est des plus simples : il repose sur la classe #EDIT{...} adjointe aux éléments qu’on veut rendre modifiables.

Actualité

La version 1.1 a été publiée le 31 août 2008.

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.
  • renvoie une vue des données modifiées, et déclenche les comportements javascript précisés par la fonction onAjaxLoad de SPIP.

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.

Notes

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

Retour en haut de la page

350 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |...

  • Répondre à ce message

    26 décembre 2008 11:34 , par Danièle LV

    J’utilise depuis peu ce plugin avec la version 2.02 de SPIP.

    Il marche parfaitement SAUF si je tente d’utiliser (par CFG) "activer la barre de typo" dans ce cas le plugin tourne à vide et on ne peut plus accéder à la partie à modifier.

    Est ce qu’il faut faire quelque chose de particulier ?

    NB : j’utilise également les plugins Spip Bonux 2.0 et Thickbox v2 et les squelettes IENSEP pour la version de Spip 2.0

    Y a t-il une incompatibilité avec ces plugins ?

    Danièle LV

  • Répondre à ce message

    24 décembre 2008 00:09 , par pierre

    Les articles que je modifie dans la partie publique, avec le plugin Crayons deviennent inaccessibles dans la partie privée : Error 500 - Internal server error

    Quelqu’un a-t-il une idée, une solution ?

    Je suis en train de migrer vers la version spip2.0. Je vais voir avec spip.2.0.2 qui vient de sortir. Je vous tiens au courant

    Merci de votre aide.

    Pierre Puiseux

  • Répondre à ce message

    21 décembre 2008 21:09

    J’utilise SPIP 2, Crayons et scrollto sur plusieurs site sans problème.

  • Répondre à ce message

    21 décembre 2008 00:54

    Bonjour,

    Je souhaite utiliser "Crayons" sur un site en Spip 2 avec un javascript "Scrollto". Toutefois apres l’activation de "Crayons" et sa mise en place sur les pages du site, le plugin ne fonctionne pas. Y aurat-il une incompatibilité avec "Scrollto" ? Une subtilité pour l’utiliser sur des pages avec du javascript ?... Merci pour votre aide

  • Répondre à ce message

    15 décembre 2008 17:45 , par chryjs

    Gros soucis : si j’active le "filet", les crayons changent la largeur de mes objets (ce qui n’ont pas de witdh définie donc auto, ou à 100% par exemple). J’ai l’impression que offsetWidth les mets en 100px !!! En outre le cadre qui s’affiche est complètement décalé par rapport au texte !

    D’autre part est-il possible de modifier les couleurs du yellow fade... pour que ca devienne un red fade par exemple (en dehors d’une modif du JS j’entends) ?

  • Répondre à ce message

    10 décembre 2008 19:23

    Bonjour la merveilleuse communauté de spip

    Je viens de rencontrer un drôle de souci avec ce génial plugin.

    Tout fonctionne à merveille sur un site en 1.9.2e avec la version du plugin 0.9 à condition de surfer avec firefox... Avec Internet Explorer ça se complique ! (testé avec du ie 5,6 et 7)

    Pas moyen de valider un changement sur un texte un titre un descriptif.... J’ai essayé avec les raccourcis clavier donnés sur la doc mais toujours aucun changement. Il ne se passe tout simplement rien quand on clique sur valider ou sur sur la croix.

    Quelqu’un a-t-il déjà rencontré ce problème ? y a-t il une solution ??

    (Edit, je suis en train de tester ici avec internet explorer et ça fonctionne très bien.. c’est ennervant tout de même)

  • Répondre à ce message

    22 novembre 2008 17:36 , par GG

    J’ai le même problème : comment modifier la couleur du background du textarea ? En effet le texte apparaît en noir sur fond noir !! -> impossible à utiliser. Merci d’avance pour votre réponse. Amicalement

  • Répondre à ce message

    5 novembre 2008 22:12 , par MKO

    Merci Pierre Bourgeois, c’était bien (jquery.js) dans squelettes/js qu’il faut supprimer.

  • Répondre à ce message

    4 novembre 2008 12:31 , par Pierre Bourgeois

    Je me répond. J’avais une vieille version de jquery (jquery.js) qui trainait dans mon dossier squelettes/js qui surchargeait celle appelée par le plugin. En la supprimant cet fichier tout est revenu à la normale.

  • Répondre à ce message

    22 octobre 2008 08:46 , par martinus

    Merci pour cette reformulation, mais cela ne répond pas du tout à mes questions...

    A quel moment, à partir d’où, et avec quel statut peut-on modifier ?

    Un rédacteur peut-il modifier avec ce plugin un article déjà publié, ou bien le plugin est-il uniquement à l’usage des administrateurs ? Est-ce que le plugin permettrait à un rédacteur de créer et modifier ses articles avant de les proposer à la publication ? Comment ? Si l’une de ces deux propositions est vraie, c’est une modification importante qu’il faut absolument expliciter. Sinon, je ne vois toujours pas comment ça marche et à quoi ça sert exactement ...

    PS : l’anglais "Edit" peut se traduire par "Modifier" ou "Corriger", mais pas par "Editer" !

Pages 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |...

Répondre à cet article

Retour en haut de la page

Ça discute par ici