Skip to content

fabiorizzo.com - PZP Rocks!!!

Sections
Personal tools
You are here: Home Zope Edição de Páginas Web "on-the-fly" usando Ajax no Zope
Document Actions

Edição de Páginas Web "on-the-fly" usando Ajax no Zope

Este artigo irá ensinar como editar páginas "on-the-fly" utilizando Ajax no Zope, com a biblioteca Prototype e Scriptaculous.

Instalando as Libs de Javascript

Para fazer a página que irá conter o mecanismo de edição online, é necessário que você instale o Prototype [http://prototype.conio.net/] e o Scriptaculous [http://script.aculo.us/]. Ambos estão disponíveis nos arquivos desse artigo.

Inclua os arquivos dentro do diretório como tipo file:



Criando a página de edição

Vamos criar um page template chamado inplace, que irá conter o seguinte conteúdo:

<html>
<head>
<title tal:content="template/title">The title</title>
<script src="prototype.js" type="text/javascript"></script>
<script src="scriptaculous.js" type="text/javascript"></script>
</head>
<body>

<h1>In-Place-Editor</h1>

Como alterar o dado de um form, sem estar em um form ;)

<p>Esta é uma alteração simples</p>

<p id="editme" tal:content="template/editme">Me altere!! :-)</p>
<script type="text/javascript">
new Ajax.InPlaceEditor('editme',
'salvar',
{callback: function(form, value)
{ return 'objeto=editme&valor=' + escape(value) }});
</script>


<p>Esta é uma looooonga alteração</p>

<p id="editme2" tal:content="template/editme2">Me faça uma loooooooonga alteração</p>
<script type="text/javascript">
new Ajax.InPlaceEditor('editme2',
'salvar',
{rows:15,
cols:40,
cancelText:'Cancelar',
okText:'Salvar',
callback: function(form, value)
{ return 'objeto=editme2&valor=' + escape(value) }});
</script>

</body>
</html>


E inclua duas novas propriedades no page template:



Coloque como valor em editme, a frase: Ajax no Zope! (apenas ilustrativo, você pode colocar o que quiser), e em editme2 a frase: Grande Ajax no Zope! :-)


Criando o arquivo que irá salvar os dados

Para salvar os dados editados, crie um python script chamado salvar:

fonte do arquivo salvar















Testando

Volte a página inplace, e clique em testar:


Você pode notar que ao passar o mouse em cima de Ajax no Zope! e em Grande Ajax no Zope! a linha fica amarela, e o cursor muda. Ao você clicar nele, é aberto uma caixa de edição:


Dessa forma, podemos editar o campo "on-the-fly". Esse é o primeiro código. Vamos entender ele melhor:

<p id="editme" tal:content="template/editme">Me altere!! :-)</p>
<script type="text/javascript">
new Ajax.InPlaceEditor('editme',
'salvar',
{callback: function(form, value)
{ return 'objeto=editme&valor=' + escape(value) }});
</script>


Quando iniciamos o construtor Ajax.InPlaceEditor, temos alguns parâmetros:

  • editme: é o nome do elemento que será editado.
  • salvar: é nome da página que será chamada para interpretar a alteração do texto.
  • callback: function(form, value) { return 'objeto=editme&valor=' + escape(value) } - é uma opção que permite você passar outros argumentos, como no caso o objeto=editme para o script salvar conseguir identificar quem ele deve mudar.


E no caso do segundo texto que pode editar, temos opções adicionais:

  • rows:15 - indica que usaremos um textarea para editar o texto, e a propriedade rows indica a quantidade de linhas a ser usada.

  • cols:40 - indica a quantidade de colunas do textarea.

  • cancelText:'Cancelar' - permite mudar o nome do texto que é exibido, substituindo o padrão cancel.

  • okText:'Salvar' - permite substituir o nome do texto que é exibido ao salvar as alterações, o padrão ok.


E do lado do servidor Zope, o script salvar:

  • inplace = getattr(context,'inplace') - Permite acessar o template inplace, para fins de alterarmos suas propriedades.

  • if objeto == 'editme':
    inplace.manage_changeProperties(editme=valor) - Estamos checando se o valor objeto é editme, assim alteramos a propriedade editme

  • if objeto == 'editme2':
    inplace.manage_changeProperties(editme2=valor) - E a checagem no mesmo caso acima, só que para o editme2

  • return valor - Para o Ajax.InPlaceEditor, devemos responder o script sempre com o valor que nós foi passado e gravado, pois esse valor retornado será visualido no campo que nós alteramos.

Conclusão

Esta cada vez mais provado o efeito que o Ajax causa nas aplicações e o quanto ele melhora a usabilidade delas. E a dobradinha Zope/Ajax muito tranquila de ser feita!

Os arquivos desse tutorial estão no anexo abaixo! :-)

Abraços,

Fabio Rizzo
fabiorizzo@gmail.com
www.fabiorizzo.com



Attachments
Scriptaculous Scriptaculous
(scriptaculous-js-1.5.3.tar.gz - 74.38 Kb)
Prototype Prototype
(prototype.js - 46.49 Kb)
Arquivos do Tutorial Arquivos do Tutorial
(inplaceeditor.zexp - 148.09 Kb)
by Fabio Rizzo Matos last modified 05/03/2006 17:10




 
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: