VARIABLES
Una de las grandes diferencias entre el wml y el html es que
con el wml puedes definir variables en las cartas, asignarles
valores y presentarlos en la pantalla, incluso utilizar las variables
en expresiones (programa.pl?f=$(mivar), etc.)
La mayor ventaja de todo esto es que puedes conservar información
en el paso de una carta a otra y así poder dividir el contenido
en varios pasos (que en pantallas tan enanas, se agradece).
Las variables son cadenas de texto (case sensitive-que distingue
mayúsculas y minúsculas-, como siempre en el wml) a la que se
le asigna un valor (secuencia de caracteres) o ningún valor.
El nombre de la variable puede empezar por el guión bajo: "_"
o una letra US-ASCII, seguida de una o más letras US-ASCII, números
o el guión bajo.
Ejemplos de nombres de variables válidos: NOMBRE_Usuario _mivar1
X700II
CREAR VARIABLES Y ASIGNARLES VALORES
Varias formas posibles:
- Con setvar
<setvar name="mivar1" value="Juan"/>
Juan es el valor de la variable mivar1. Con setvar se crea la
variable y a la vez se le asigna un valor.
- Con input
Con input se puede crear (declarar) la variable, asignarla un
valor y también devolverla el valor original.
Input se utiliza para la entrada de datos y esos datos (valores)
se asignarán a una variable.
- Con select
Con select se puede crear (declarar) la variable, asignarla
un valor y también devolverla el valor original.
Select permite seleccionar al usuario una o más valores entre
una lista de opciones que se asignarán a una variable.
- Con postfield
Con postfield se puede crear (declarar) la variable, asignarla
un valor y también devolverla el valor original.
REFERENCIAR VARIABLES
Podemos incluir el valor de una variable dentro de un documento
wml, tanto para que aparezca en la pantalla como para que se envíe
a un programa.
Hay tres formas de referenciar la variable:
$nombrevariable
se utiliza cuando no hay ambigüedad con el nombre de la variable
dentro del contexto.
$(nombrevariable)
Cuando puede existir ambigüedad con el nombre de la variable dentro
del contexto.
$(nombrevariable:conversión) Se explica más abajo.
Cómo el wml se reserva el uso del signo del dólar, para que
queramos que aparezca en la pantalla este signo, hay que escribirlo
dos veces ($$). Por ejemplo tenemos esta variable: $moneda y queremos
presentar su valor en la pantalla, así: $15, escribiremos:
Saldo actual: $$$moneda
CONVERSIÓN AL FORMATO ESCAPE $(nombrevariable:conversión)
En su día se acordó una sustitución de algunos caracteres propios
de los URLs para que el servidor no los confundiera (reglas del
formato escape (RFC2396).
Estas reglas nos facilitan un mecanismo para poder incluir en
una línea URL, esos caracteres. Aunque estas reglas fueron creadas
para referenciar URLs, se pueden aplicar las mismas reglas para
referenciar variables.
Ejemplo (este ejemplo, que convierte el texto en formato escape
es muy útil, puedes bajártelo desde demos).
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="carta1" title="WMLCLUB">
<p>Bienvenido
<br/>
Teclee un texto con caracteres especiales:
<br/></p>
<p><input type="text" name="texto"/></p>
<do type="accept">
<go href="#carta2"/>
</do>
</card>
<card id="carta2" title="WMLCLUB">
<p>
Este es el texto introducido, en formato escape:
<br/>
$(texto:e)
<br/>
Este es el texto introducido, normal:
<br/>
$(texto)
</p>
</card>
</wml>
Cuando se introduce el valor de una variable dentro de una baraja,
se puede definir el formato (escape, unescape o no escape) así:
$(var:e) $(var:E) $(var:escape) (cualquiera de los tres traduce
al formato escape)
$(var:u) $(var:U) $(var:unesc) (cualquiera de los tres traduce
del formato escape a texto US-ASCII)
$(var:n) $(var:N) $(var:noesc) (cualquiera de los tres hace que
el valor de la variable no se traduzca al formato escape)
El WML siempre aplica el formato escape cuando se trata de atributos
que trabajan con URLs. Por eso muchas veces se puede asumir que
el WML convertirá al formato escape cuando lo tiene que hacer.
De todas formas, conviene incluirlo si tenemos mínimas dudas de
lo que ocurrirá.
Aquí tienes una lista de los caracteres de escape (todos empiezan
por %)
; %3b
/ %2f
? %3f
: %3a
@ %40
& %26
= %3d
+ %2b
$ %24
, %2c
espacio %20
{ %7b
} %7d
| %7c
\ %55c
^ %5e
[ %5b
] %5d
` %27
< %3c
> %3e
# %23
LAS VARIABLES Y LAS TAREAS <NOOP>, <PREV>, <REFRESH>
y <GO>
- <noop/>
No hace nada. Se utiliza para desactivar eventos en el nivel
de la baraja.
- <prev/>
Prev vuelve al anterior URL.
Si dentro de prev hay un elemento setvar, como en el ejemplo,
se procesa antes de que se ejecute el prev.
<prev>
<setvar name="mivar" value="contenido"/>
</prev>
- <refresh/>
Refresh refresca los contenidos visibles del navegador.
Si refresh contiene un setvar, como en el ejemplo, se procesa
el setvar y después se procede al refresh.
<refresh>
<setvar name="mivar" value="contenido"/>
</refresh>
- <go>
Go lleva a otra URL u otra carta. Si dentro de go hay
un elemento setvar, se procesa primero éste y después se ejecuta
la tarea "go".
<go href="http://www.wmlclub.com/cgi-bin/programa.pl?x=$(mivar1)&y=$(mivar2)"
method="post">
<setvar name="mivar1" value="50"/>
<setvar name="mivar2" value="80"/>
</go>
Información sobre setvar.