La librería CGI::WML |
|
Hasta ahora, hemos estado trabajando con Perl sin utilizar ninguna de las muchas librerías de las que existen para trabajar con CGIs(están todas en www.cpan.org), ahora vamos a ver la librería de Perl para hacer CGIs y, concretamente, nos vamos a centrar en la parte de CGI para WML, el módulo CGI::WML.
Aquí no vamos a ver la librería CGI.pm, la cual sirve para realizar CGIs orientados a HTML, sino la librería CGI::WML (que hereda de la primera). El que tenga curiosidad en conocer CGI.pm puede ecnontrar un tutorial de inicio en http://decsai.ugr.es/~pedro/curso_comercio/cgi.pm.htm y más información en http://stein.cshl.org/WWW/software/CGI/cgi_docs.html
CGI::WML permite programar CGIs para WAP/WML, al ser una subclase de la librería CGI.pm, sigue su filosofía y hereda sus métodos. La versión m´s actualizada de esta liberia está en http://wap.z-y-g-o.com/tools (y aquí teneis una copia local de esta referencia).
Para empezar, veamos un ejemplo que muestra cómo se usa la librería para hacer un CGI de WML rápidamente:
Ejemplo
#!/usr/bin/perl #Ponemos que vamos a usar la librería CGI::WML use CGI::WML; #Creamos un objeto CGI my $mi_cgi=new CGI::WML; #Creamos la página WML print $mi_cgi->header(), #Cabecera con el tipo MIME $mi_cgi->start_wml(), #Principio de la página WML $mi_cgi->card(-id=>"ejemplo1", #Creamos una carta del página WML -title=>"Ejemplo 1", -content=>"<p>Hola mundo del wap</p>"), $mi_cgi->end_wml(); #Cerramos la página WML
Como hemos visto en el ejemplo anterior, las distintas funciones aceptan varios argumentos (hasta 20), aunque normalmente todos son opcionales. Dichos argumentos son los atributos y contenidos de las etiquetas que las dunciones representan.
En el ejemplo visto en el apartado anterior la línea:
.... <card id="ejemplo1" title="Ejemplo1"> <p>Hola mundo del wap</p> </card> ....
Se ha escrito de la siguiente manera:
.... $mi_cgi->card(-id =>"ejemplo1", -title =>"Ejemplo 1", -content=>"<p>Hola mundo del wap</p>"), ....
Aunque también podemos usar escribirlo como hemos hecho antes:
.... print<<"carta_wml"; <card id="ejemplo1" title="Ejemplo1"> <p>Hola mundo del wap</p> </card> carta_wml ....
Por lo que el ejemplo anterior, lo podíamos haber puesto como:
#!/usr/bin/perl #Ponemos que vamos a usar la librería CGI::WML use CGI::WML; #Creamos un objeto CGI my $mi_cgi=new CGI::WML; #Creamos la página WML print $mi_cgi->header(); #Cabecera con el tipo MIME print $mi_cgi->start_wml(); #Principio de la página WML #Creamos una carta en la página WML print<<"carta_wml"; <card id="ejemplo1" title="Ejemplo1"> <p>Hola mundo del wap</p> </card> pagina_wml print $mi_cgi->end_wml(); #Cerramos la página WML
El nombre de los argumentos puede ir en mayúsculas o minúsculas y en cualquier orden.
Veamos las funciones más básicas para realizar un CGI WML con CGI::WML:
.... print "Content-type: text/vnd.wap.wml\n\n"; ....
.... <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> ....
Veamos el ejemplo que mostraba la hora, utilizando las funciones de CGI::WML que hemos visto:
#!/usr/bin/perl #Ponemos que vamos a usar la librería CGI::WML use CGI::WML; # parte activa del programa ($s,$m,$h, @resto) = localtime(time); #Creamos un objeto CGI my $mi_cgi=new CGI::WML; #Cabecera con el tipo MIME de WML print $mi_cgi->header(); #Principio de la página WML print $mi_cgi->start_wml(); #Creamos una carta en la página WML que ponga la hora print<<"carta_wml"; <card id="ejemplo_hora" title="La Hora"> <p>La hora actual es $h:$m:$s</p> </card> carta_wml #Cerramos la página WML print $mi_cgi->end_wml();Probar el ejemplo...
Veamos las funciones para constrir elementos de WML en un CGI usando CGI::WML :
card()
, se le pueden añadir tantos atributos como la etiqueta card soporte, sólo
los atributos id y content son obligatorios. Veamos un ejemplo:
$mi_cgi->card(-id=>``card_id'',
-title=>``First Card'',
-ontimer=>``#next_card'',
-timer=>$mi_cgi->timer
(-name=>``timer1'',-value=>``30''),
-newcontext=>``true'',
-onenterforward=>``#somecard'',
-onenterbackward=>``#othercard'',
-content=>``<p>Hello WAP world</p>'');
.... $query->timer(-name=>``mytimer'', -value=>``30''); ....
....
%pfs = ('var1'=>'1', 'var2'=>'2', 'varN'=>'N');
....
$mi_cgi->go(-method=
>``post'', -href=>``http://www.example.com/'', -postfields=>\%pfs);
....
.... $mi_cgi->do(-type=>``options'', -label=>``Menu'', -content=>qq(go href=``#menu''/>)); ....
.... $mi_cgi->input(-name=>``pin'', -value=>``1234'', -type=>``text'', -size=>4, -title=>``Enter PIN'', -format=>``4N'', -maxlength=>4, -emptyok=>``false''); ....
Ejemplo:
.... my $mi_cgi = $query->img( -src => '/icons/blue_boy.wbmp', -alt => 'Blue Boy', -localsrc => '$var', -vspace => '25', -hspace=> '30, -align => 'bottom', -height => '15', -width => '10'); ....
En la librería CGI.pm y, por ende, en la librería CGI::WML la captura de parámetros se hace igual: utilizando el método param, d´ndole como atributo el nombre del parámetro del CGI qeu queremos coger. Veamos un ejemplo:
.... $nombre=$mi_cgi->param('NOMBRE'); ....
Grupo GeNeura. http://geneura.ugr.es |
Departamento de Arquitectura y Tecnología de los Computadores. |
Universidad de Granada |