On 5/23/07, edymbh <[EMAIL PROTECTED]> wrote:
> <dtml-var totalgeral_venda_assinantes>
>
> esse dtml-var me mostra o total de venda de assinantes mas como eu faço
> para fazer um calculo encima desse dtml var?

Caro edymbh,

Antes de mais nada, recomendo que você comece a usar ZPT e Python,
pois é com estas duas linguagens que fazemos hoje o que antes era
feito em DTML, OK? Para entender o Plone, por exemplo, é
imprescindível entender como se usa Page Templates e Scripts (Python)
em combinação.

Agora, a sua questão. Para respondê-la, é preciso saber o que é
totalgeral_venda_assinantes. Será apenas uma variável que contém um
número, ou um script que retorna um número, ou um SQL Method que
retorna o resultado de uma consulta ao um BD relacional?

Vamos supor que é uma simples variável que contém um número. Para
fazer uma conta com ela, basta fazer a conta!

Digamos que você quer dividir o total por 12 para obter uma média
mensal (eu não sei o que é este seu total, estou chutando).

<dtml-var expr="total_geral_venda_assinantes / 12">

Para economizar um pouco de digitação, e tornar a vida dos
principiantes mais difícil, os manos da Zope Corp inventaram esta
abreviação:

<dtml-var "total_geral_venda_assinantes / 12">

Ou seja, basta colocar a expressão entre aspas, que a parte do expr=
fica implícita. Isso é um grave defeito do DTML na minha opinião,
porque quando usamos HTML sabemos que os navegadores aceitam atributos
sem aspas ou com aspas, mas que não há diferença entre eles. Por outro
lado, no HTML padrão, no XML e no ZPT, as aspas são sempre
obrigatórias. Mas no DTML o uso ou omissão das aspas faz diferença, o
que causa muita confusão! Eu recomendo evitar a sintaxe abreviada.

Agora, se total_geral_venda_assinantes é um Script (Python), então
para invocá-lo numa expressão você precisa usar a sintaxe de chamada
de funções do Python, assim:

<dtml-var expr="total_geral_venda_assinantes() / 12">

Finalmente, se total_geral_venda_assinantes é um ZSQL Method que
retorna uma linha do BD com um campo de totalização, enão a chamada
fica mais complicada, porque o resultado é uma sequência de linhas e
cada linha é uma sequência de campos, mesmo que seja uma sequência de
uma linha com uma sequência de um campo apenas. A sintaxe fica assim:

<dtml-var expr="total_geral_venda_assinantes()[0][0] / 12">

AVISO: faz uns 6 ou 7 anos que eu não uso DTML, e estou escrevendo
isso tudo de memória, então pode ser que tenha besteiras, OK?

[ ]s
Luiciano

Responder a