Los lápices (les crayons)

Un plugin para la edición directa desde el sitio público

Este plugin permite editar el contenido directamente sobre las páginas públicas del sitio, sin pasar por el espacio privado de SPIP. Respeta las autorizaciones asignadas en el espacio privado.

Actualizaciones directas con javascript insertados por jQuery en la página, respetando las autorizaciones y el funcionamiento nativo de SPIP.

La parametrización del esqueleto es muy simple : se basa en agregar la baliza #EDIT{...} a los elementos que se quiere volver modificables.

Puesta en marcha

Este plugin se desarrolla en spip-zone en http://trac.rezo.net/trac/spip-zone.... Está disponible a través de SVN o en el snapshot [1] http://zone.spip.org/files/spip-zon...

Como todos los plugins, el primer paso de la instalación consiste en copiar el directorio crayons/ en el subdirectorio plugins/ del sitio, y luego activarlo desde la interfaz privada de gestión de plugins. (el zip está preconfigurado en plugins/lápices/ )

Los esqueletos usados deben obligatoriamente contener una baliza #INSERT_HEAD en el <head>, ya que es indispensable para insertar los scripts js necesarios por jQuery. Si usas los esqueletos por defecto de la versión 1.9.2, no tienes nada que modificar, ya son compatibles.

Luego, para hacerlo operativo, basta con agregar en el atributo class de un elemento la baliza #EDIT{campo}. Por ejemplo, para volver « crayoneable » el texto de un artículo deberías modificar
el código

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

del esqueleto article.html por :

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

Cuando SPIP calcula la página, si los lápices se activan, la baliza
#EDIT{texte} será tranformada en crayon type-champ-id, y la magia podrá entonces operar. Si el plugin no está activo, el código será <div class="texte"> como de costumbre. Por lo tanto, es posible "crayonear" un esqueleto sin que cambie nada cuando el plugin no esté activo.

Funcionamiento

Fabricación de la página del lado del servidor

Cuando se carga una página, el plugin actúa en la tubería (pipeline) affichage_final.

Entonces comprueba :

  • si el usuario está identificado
  • si la página contiene al menos una cadena de caracteres “crayon xxxx-yyyy-nn”,
  • y si el usuario posee derechos sobre al menos uno de los elementos así señalados

Cuando las condiciones se cumplen, inserta en el

de la página el script externo crayons.js así como de los datos de configuración que incluyen, en particular, la lista de los elementos autorizados para este usuario. El cuerpo de la página no es modificado, y el script tiene un impacto despreciable en los resultados si no hay un usuario conectado.

Carga por el navegador

Cuando la página termina de cargarse (y si el visitante tiene derechos de edición sobre los lápices presentes en la página), el script crayons.js selecciona todos los elementos poseedores de la clase crayon type-champ-id, y si se autorizan para el usuario en curso, se adjunta una imagen cliqueable (un lápiz) y se agrega la clase crayon-autorise para indicar que son « editables ».

Un click sobre esta imagen, y también un dobleclick sobre el propio elemento, activan el formulario de edición.


Activación del lápiz

Un click sobre el « lápiz » (o un dobleclick sobre el elemento) desencadena una petición al servidor, que devuelve el formulario de modificación que va a « sustituir » al elemento indicado.

La petición especifica al servidor el « tipo », el « campo » y el « id » que se pide para el formulario.

Después de la comprobación de la existencia de los datos y derechos sobre estos, el servidor devuelve el formulario (en forma de datos javascript, en formato JSON). El tipo y las dimensiones de los campos se determinan según su naturaleza y el lugar reservado al elemento. Contiene el texto en bruto, como cuando se publica desde el espacio privado ; se preservan el formato, el tamaño y el color de los caractéres.

crayon.js asocia este formulario al elemento y luego « oculta » a este último.

El usuario puede entonces modificar los datos.

Atención : la visualización final no puede ser realizada sino por el servidor : un click fuera del cuadro de edición mostrará de nuevo el contenido original.

Cuando cambian algo, una rueda dentada les indica que introdujeron una modificación. Click sobre el botón o doble-click sobre el elemento para salvar el cambio.
Y si abandonan la página, un último recordatorio les propondrá salvar los cambios.


Seguridad

El formulario posee una serie de botones/teclas asociadas :

  • OK (así como la tecla Enter) permite salvar los cambios.
  • Annuler (así como la tecla Escape) abandona toda actualización.
  • Un click fuera de las zonas de edición oculta el formulario y muestra de nuevo el elemento original.

Contiene también identificadores y claves asociados a los datos.

El formulario es procesado en POST por ajaxForm, ya que es asincrónico. Al recibir los datos, el servidor :

  • analiza los datos presentados, su coherencia y su actualidad (con el fin de cancelar el envío si los datos se modificaron al mismo tiempo desde otra conexión).
  • comprueba de nuevo los derechos de edición.
  • llama a los procedimientos internos de SPIP para actualizar los datos en la base.

Vale aclarar que el sistema registra el historial de modificaciones, de la misma forma que lo hace el espacio privado.

Configuración

La configuración básica es especificada por una función opcional crayons_config() dentro de mes_options.php. Esta función debe devolver una tabla asociativa |Nombre|PorDefecto|Efecto| |msgNoChange|false|alerta si se aprienta OK pero no hay cambio |

msgAbandon true confirmación para salvar cambios si se abandona la pagina

El resto de la configuración se hace por medio de las clases asignadas al elemento.

Se puede añadir a las clases #EDIT{campo} (crayon type-champ-id) la clase #EDIT (type--id)
Indica que es necesario agregar al elemento, al lado del lápiz una imagen cliqueable (la celebre +) para pasar a la edición privada del objeto.
Por ejemplo en el texto de un artículo :
[<div class="#EDIT{texte} #EDIT texte">(#TEXTE|...)</div>]

Ver los esqueletos por defecto como ejemplo.

Ampliaciones

Hasta el 15/11/2006, sólo las tablas de artículos, de brèves y de secciones se podían modificar ; para cada una de estas tablas, todos los campos de tipo « linea » (título, subtítulo, etc.), o « texto » (texto, epígrafe, etc...) son widgetisables.

No obstante, los documentos, los autores, los sitios y los foros se pueden "crayonear" con las recientes versiones.

La obtención del formulario (controleur/) así como la vista obtenida a cambio (vue/) son sustituibles.
Un lápiz para un id puede poseer varios campos.
Internamente, los textos están disponibles en alemán, inglés, francés, italiano y el que tu quieras traducir.

Entre las obras posibles :
-  varios ídem en un lápiz, administrar listas
-  hacer lápices de fecha
-  un sistema de tags manera del.icio.us para modificar las palabras clave asociadas
-  utilizar estos lápices para hacer interfaces de edición especializadas (o ultraeficaces)
-  etc

¡Como siempre, los contribuidores son bienvenidos !

Notes

[1Este archivo zip se actualiza automaticamente con la ultima versión en desarrollo

Para tener en cuenta : antes del 3 de diciembre de 2006 « les crayons » se llamaba « Widgets », lo que puede ser útil si quieres conocer sus pasos de desarrollo.

Discussion

Une discussion

  • 1

    Atención !!!

    ¡¡¡Al instalar este plugin (y solo este) todos mis artículos han perdido sus tildes !!!

    He perdido un montón de información...

    Todos los campos de todas las tablas están ahora en codificación de caracteres latin1_swedish_ci.

    Desconozco si estaban así antes de instalar el plugin.

    AYUDA POR FAVOR !!

    La web es www.divulgauned.es

    • Solucionado.

      Las tablas no habían sido alteradas, solo la declaración del tipo de código utilizado en la parte HEAD de mi web.

       : )

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom