Em 02/04/08, Edgard Costa<[EMAIL PROTECTED]> escreveu:
> Zé Henrique
>
>  Outra vez muito obrigado. Entendi a maneira e forma. Funcionou
>  perfeitamente a mudança de linha.
>
>  Quanto ao formulário imagine a situação:
>  a) duas cxs de texto com os nomes valor1 e valor2
>  b) o resultado da soma das duas tem que vir na mesma pg.
>
>  O que preciso saber é forma correta de declarar no zope
>  O esquema do uso valor1=req.getfirst('valor1') era uma tentativa com a
>  mesma forma do mod_python que não funfa no zope.
>
>  EdgardCosta
>
No Zope, os campos dos formulários submetidos estão representados no
objeto REQUEST na forma de um dicionário (chave, valor).  Dessa forma,
em seu script, você terá acesso aos campos lendo o objeto:

request = context.REQUEST # apenas um sinônimo, para evitar muita digitação
valor1 = request.valor1
# outras formas de leitura:
# valor1 = request.form.valor1
# valor1 = request['valor1']
# valor1 = request.form['valor1']
# valor1 = request.get('valor1', 0)
# esse último tem a vantagem de poder retornar um valor default, caso o
# campo não esteja presente no REQUEST, como acontece quando um
# checkbox não é selecionado.

Na maneira convencional de desenvolvimento web, você constrói uma
página que chama um script que chama uma página para mostrar o
resultado do processamento.  Essa última página pode até ser aquela
página que deu início ao processo.

Quando um script chama um template (sem efetuar redirecionamento) pode
passar parâmetros para o template.  Exemplo:

return context.minha_pagina(soma = total)

Os parâmetros seguem em um dicionário especial (options) que pode ser
lido no template:  Assim, na forma convencional, seu template poderia
ser construído assim:

<form name="frm" id="frm" action="meu_script" method="post">
    1o. valor: <input type="text" name="valor1"
                     tal:attributes="value request/valor1 | nothing" /><br/>
    2o. valor: <input type="text" name="valor2"
                     tal:attributes="value request/valor2 | nothing" /><br/>
    Soma    : <input type="text" name="soma"
                     tal:attributes="value options/soma | nothing" /><br/>
    <input type="submit" value="Somar" />
</form>

Quando carregado o template verifica se os campos foram preenchidos
anteriormente e se a soma já foi executada.  Se isto for verdade,
preenche os campos.  Caso contrário, deixa-os vazios.

Agora, se você quiser que o processamento seja feito e exibido sem que
a página seja recarregada, então terá que estudar Ajax.  O
interessante é que muitos objetos do python (listas, dicionários,
etc.) e do javascript (arrays, objetos, etc.) tem formatos semelhantes
e podem ser intercambiados facilmente.

Zénrique.

Responder a