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 chamaid_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 pormeta-
, 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ódigoTEXTAREA
, ou umINPUT
.
- 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 !
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |