Os lápis

Um plugin para uma edição direta a partir do site público

Este plugin permite editar os conteúdos nas páginas públicas do site, sem passar pelo espaço privado de SPIP.

A modificação de parâmetros nos esqueletos é muito simples : ela se baseia na classe #EDIT{...} próxima aos elementos que queremos que sejam modificáveis.

Resumo

Após a ativação do plugin, os conteúdos podem ser diretamente editados nas páginas públicas do site, por pessoas autorizadas.

Para isso é necessário preparar seus esqueletos para que se tornem compatíveis com o plugin (observação : é o caso da maioria dos esqueletos distribuídos por SPIP-Contrib). O principio é simples : o bloco é editável se ele contém a classe crayon objet-champ-id. Uma balisa #EDIT{} facilita ainda mais a redação. Na verdade, para permitir a edição do título de um artigo, deve-se substituir no esqueleto da página article.html, a linha (por exemplo) :

<h1>#TITRE</h1>

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

ou ainda, mais simplesmente :
<h1 class="#EDIT{titre}">#TITRE</h1>

Outro exemplo, para tornar « lapisável » o texto de um artigo, transformar :
[<div class="texte">(#TEXTE|image_reduire{520,0})</div>]

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

As páginas envolvidas devem obrigatoriamente comportar uma balisa </head>, escrita precisamente desta forma (letras minúsculas).

Funcionamento

Fabricação da página no servidor

Durante o carregamento de uma página, o plugin age na pipeline affichage_final.

Ele verifica então :

  • se o utilizador está identificado ;
  • se a página contem ao menos uma cadeia de caracteres « crayon xxxx-yyyy-nn » ;
  • e se o utilizador possui os direitos em ao menos um dos elementos assim marcados

Se aplicável, o plugin insere no código <head> da página o script externo crayons.js bem como os dados de configuração ; o script é executado ao final do carregamento da página, e verifica em intervalos regulares se novos lápis estão disponíveis, de modo de os ativar se necessário.


Carregamento pelo navegador

Quando a página termina de ser carregada (e se o visitante possui direitos de edição nos lápis presentes na página), o script crayons.js seleciona todos os elementos possuidores da classe crayon type-champ-id, e se eles são autorizados pelo utilizador inscrito, oferece uma imagem clicável (um lápis) e acrescenta a classe crayon-autorise para indicar que eles são « editáveis ».

Um clique sobre a imagem do lápis, e também um duplo-clique sobre o próprio elemento, provocam a ativação do formulário de edição.


Ativação do lápis

Um clique no « lápis » (ou um duplo clique no elemento) inicia uma solicitação no servidor, que envia o formulário de modificação que vai « substituir » o elemento exibido.

A demanda especifica ao servidor o « tipo », o « campo » e a « id » para os quais o formulário foi solicitado.

Após a verificação da existência dos dados e dos direitos sobre os mesmos, o servidor envia o formulário (na forma de dados javascript, no formato JSON). O tipo e as dimensões do campo são determinados de acordo com a sua natureza e a posição reservada ao elemento. O formulário contém a fonte bruta do texto, como quando o mesmo é editado no espaço privado ; a fonte, o tamanho e a cor dos caracteres são preservados.

crayons.js associa este formulário ao elemento e depois « esconde » este último.

O utilizador pode agora modificar os dados.

Atenção : a exibição final só pode ser realizada pelo servidor, um clique fora da zona de entrada após as modificações realizadas mostrará novamente o conteúdo original.

Neste caso, uma engrenagem avisará que você realizou modificações. Clicar no botão ou dar um duplo clique no elemento fará o utilizador voltar ao texto e as modificações não serão perdidas.
Se você, no entanto, abandonar a página, um último aviso propõe de salvar o texto.


Backup

O formulário possui uma série de botões/comandos associados :

  • OK (bem como o botão Enter [1] permite de salvar ;
  • Anular (bem como a tecla Escape) abando qualquer atualização ;
  • Um clique fora das áreas de digitação esconde estas zonas e retorno à exibição inicial.

Ele contem também identificadores e chaves associadas aos dados.

O formulário é submetido em POST por ajaxForm, então assíncrono. Assim que recebe, o servidor :

  • analisa os dados submetidos, sua coerência e sua atualidade (apara anular o envio se os dados foram modificados) ;
  • verifica novamente os direitos de edição ;
  • chama os processos internos de SPIP para atualizar os dados ;
  • envia uma « visualização » dos dados modificados, e inicia os comportamentos javascript especificados pela função onAjaxLoad de SPIP.

O sistema alimenta notadamente o histórico das modificações, da mesma forma do que no espaço privado.

Configuração

O plugin propõe várias opções, que podem ser ativadas via o plugin CFG ; notadamente :
-  uma mensagem se confirmamos OK mas nada foi modificado ;
-  um alerta que permite salvar as modificações se abandonamos a página quando um texto está sendo editado ;
-  a ativação da barra tipográfica ;
-  cores que permitem uma melhor identificar as zonas modificáveis.

Observação : se o plugin está ausente ou desativado, a balisa #EDIT{...} envia uma cadeia vazia ; isto permite então de « passar um lápis » em esqueletos mesmo se ficar decidido de não utilizar o plugin

Utilização expandida

Todas as tabelas standard de SPIP (articles, notas, sessões, etc) são geradas, incluindo também os fóruns e as assinaturas de petição (mas, para estas últimas, é necessário utilizar o plugin Autoridade para permitir as modificações) ; para cada uma destas tabelas, todos os campos de tipo « linha » (título, subtítulo etc), ou « texto » (texto, cabeçalho, descrição...) são passíveis de serem editados pelo lápis.

Os logotipos também podem ser editados com o lápis #EDIT{logo} ; uma regulagem permite de redimensionar os logotipos rapidamente durante o upload.

Os documentos são modificáveis com o lápis #EDIT{fichier} : o novo documentos substitui o antigo e o seu tamanho, a sua altura e sua largura são atualizadas. (NB : ainda não compatível com documentos remotos).

Enfim, a partir de SPIP 2, é possível editar os campos extra.

A notar :
-  Os lápis funcionam com qualquer tabela — sob condição de que esta tabela possua uma chave primária (numérica) que se chama id_xxx, por isso o nome da tabela é spip_xxxs.
-  para a tabela table spip_meta que não propõe este tipo de index numérica, deve-se utilizar a balisa #EDIT de uma maneira um pouco diferente prefixando o campo a editar por meta-, por exemplo [2] : #EDIT{meta-descriptif_site}

-  Se um texto editável pelo lápis é um campo MySQL MEDIUMTEXT ou mais longo, os lápis exibem um código TEXTAREA, ou um INPUT.
-  Apenas os administradores plenos podem assim editar com o lápis textos oriundos de uma tabela não-SPIP.

Edições simultâneas de vários campos

A obtenção do formulário de edição (« controladores ») bem como a visualização obtida de retorno são carregadas por simples esqueletos (ver exemplos nos repertórios controleurs/ e vues/ do plugin).

Estes formulários podem trabalhar em paralelo em vários campos de um salvamento (artigo), mesmo de vários salvamentos de uma mesma tabela ou de tabelas diferentes [3] : muita coisa que pode ser feita para interfaces de edição especializadas e muito eficazes.

Como sempre, os contribuidores são bem-vindos !

Notes

[1Bem como, em computadores Mac, o comando ctrl-S, e em PCs os comandos alt-S ou F8, ou ainda a combinação MAJ-Enter.

[2Isto é válido a partir da versão 1.6.1 do plugin. Para as versões precedentes a sintaxe é diferente. Deve-se inserir manualmente a classe no seguinte código a sintaxe meta-valeur-XXX na qual XXX representa o nome da propriedade a ser modificada. Por exemplo, para modificar o nome do site (propriedade : mon_site) poderíamos fazer :

<h1 class="crayon meta-valeur-nom_site">#NOM_SITE_SPIP</h1>

[3Por exemplo para abrir em edição o conjunto dos campos de descrições de um endereço postal.

Debug : Os lápis possuem um modo de debug que pode ser ativado colocando no mes_options.php a seguinte linha : define('_DEBUG_CRAYONS', true);
Este código retarda um pouco o funcionamento, pois o script é recarregado toda vez, mas facilita a localização de bugs e o desenvolvimento de novas funcionalidades.

Ver também : Documentação complementar

Discussion

Aucune discussion

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