La Comunidad de Desarrolladores WAP
@ Contacta con nosotros
  .WMLClub
  .Tutorialwml: VARIABLES


APRENDIZAJE
- Tutoriales
- Código fuente / Demos
- FAQS
- Configuración móviles
- Demos en WAP

HERRAMIENTAS
- Programas / Download
- Creación de contenidos

ARCHIVO
- FAQS
- Terminales WAP
- Documentos
- Artículos
- Noticias
- Links
- Libros
- Índice WAP

    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.