Re: Discusión: Librería de Formas en Perl

Francisco Obispo fobispo at nic.ve
Tue Sep 2 06:44:56 CDT 2003


Hola,

Bueno, yo por lo general me apoyo en el módulo CGI para la creación
de formularios,

Sin embargo, se me ha presentado muchas veces la necesidad de hacer "dropdowns"
o "popup menus " como lo quieras ver, relacionados, es decir, cuando seleccionas
el primero, los valores del segundo cambian..

te estoy enviando la rutina que lo genera, sin embargo es un poco vieja y estoy seguro
que puede ser mejorada:


<PERL>

### Menu Relacionado

#

# Menu Relacionado

# menu_relacionado("TITULO PADRE","TITULO HIJO","SQL");

# SQL tiene que ser PADRE,HIJO,PADRE_CODIGO,HIJO_CODIGO

# 

sub menu_relacionado{

my $m1_encab=shift;

my $m2_encab=shift;

my $sql=shift;

my $gen=shift;

my $text1=shift;

my $text2=shift;

my $res;

my $campo1=$gen . "1";

my $campo2=$gen . "2";

my $relateItems=$gen . "relateItems";

my $makeItem=$gen . "makeItem";

my $newItem=$gen . "newItem";

my $makeCat=$gen . "makeCat";

my $newCat=$gen . "newCat";

my $cats=$gen . "cats";

my $catsIndex=$gen . "catsIndex";

my $itemsIndex=$gen . "itemsIndex";

my $catHeading= $gen . "catHeading";

my $itemHeading=$gen . "itemHeading";

my $SCRIPT="

function " . $makeItem ."(name, url) {

this.name = name; 

this.url = url; 

} 

function " . $newItem . "(name, url) {

" . $itemsIndex . "++;

" . $cats . "[" . $catsIndex . "][" . $itemsIndex . "] = new " . $makeItem . "(name, url);

" . $cats . "[" . $catsIndex . "].length++; 

}

function " . $makeCat . "(name,valor) {

this.name = name;

this.valor= valor;

this.length = 0;

} 

function " . $newCat . "(name,valor) {

" . $catsIndex . "++;

" . $itemsIndex. " = -1;

" . $cats . "[" . $catsIndex . "] = new " . $makeCat . "(name,valor);

}

function " . $relateItems . "(cat){

if (cat > 0) {

" . $catsIndex . " = cat - 1;

with (document.m." . $campo2 . ") {

for (var i = options.length; i > 1; i--) options[i] = null;

for (var i = 0; i < " . $cats . "[" . $catsIndex . "].length; i++) options[i + 1] = new Option(" . $cats . "[" . $catsIndex . "][i].name," . $cats . "[" . $catsIndex . "][i].url);

options[0].selected = true;

}

}


" . $itemsIndex . " = 0;

}

var isNS3 = (navigator.appName == \"Netscape\" && parseInt(navigator.appVersion) >= 3);

var isIE = (navigator.appName == \"Microsoft Internet Explorer\");

var " . $cats . " = new Array();

var " . $catsIndex . " = -1;

var " . $itemsIndex . " = -1;

var " . $catHeading . " = '" . $m1_encab . "'; // heading for category menu

var " . $itemHeading . "= '" . $m2_encab . "'; // heading for pages menu

";



my $dbh = DBI->connect($oracle_dsn, $oracle_login, $oracle_pass) || return("$!");

my $sth=$dbh->prepare($sql) || return("$!");

my $arr;

$sth->execute;

my $oldsub;

while($arr=$sth->fetchrow_arrayref){

if($$arr[0] ne $oldsub){

$SCRIPT .= "\n " . $newCat . "('" . $$arr[0] . "','" . $$arr[2] . "')\;\n";

}

$SCRIPT .= $newItem . "('" . $$arr[1] . "','" . $$arr[3] . "')\;\n";

$oldsub=$$arr[0];


}

$res.="<SCRIPT LANGUAGE='JavaScript'>";

$res.=$SCRIPT;

$res.="</SCRIPT>";

####

$res.="

<table border=0 align=center cellspacing=0 cellpadding=0><tr>

<SCRIPT LANGUAGE = \"JavaScript\">

document.write('<td>" . $text1 . "<SELECT STYLE=\"width: 300;\" NAME = \"" .$campo1 . "\" onChange = \"" . $relateItems . "(this.selectedIndex)\">');

document.write('<OPTION VALUE=\"\">' + " . $catHeading . " + '</OPTION>');

for (var i = 0; i < " . $cats . ".length; i++) document.write('<OPTION VALUE=' + " . $cats . "[i].valor + '>' + " . $cats . "[i].name + '</OPTION>');

document.write('</SELECT></td>'); 

document.write('<td>" . $text2 . "<SELECT STYLE=\"width: 300;\" NAME = \"" . $campo2 . "\">');

document.write('<OPTION VALUE=\"\">' + " . $itemHeading . " + '</OPTION>');

for (var i = 0; i < 10; i++) document.write('<OPTION></OPTION>');

document.write('</SELECT></td>');

for (var i = document.m." . $campo2 . ".options.length; i > 0; i--) document.m." . $campo2 . ".options[i] = null;


</SCRIPT>

</tr></table>

";

return $res;

}

</PERL>



La rutina devuelve el código en HTML+JavaScript necesario para hacer el truco,
el modo de funcionamiento está en el encabezado.


saludos







----- Original Message ----- 
From: "Alejandro Imass" <ait at linuxmail.org>
To: "Lista de Desarrollo Velug" <l-desarrollo at linux.org.ve>; "Perl Mongers Caracas" <caracas-pm-list at pm.org>
Sent: Monday, September 01, 2003 7:21 PM
Subject: Discusión: Librería de Formas en Perl 


> 
> Copio a ambas listas a ver si alguien conoce una librería en Perl que maneje formas mastro-detalle etc. Mi idea es escribir una librería basada en Perl-CGI para esto pero antes quería saber si alguien conoce o ha trabajado en una librería similar.
> 
> En principio lo que quiero es hacer algo que sea muy sencillo para desarrollar un GUI en HTML para aplicaciones de negocios. La idea me viene de meterle mano a sql-ledger y francamente estoy fastidiado de lo monolítico del código y lo complejo que es cambiar una pantalla. Si yo fuese a reescribir un sistema como este, pensaría bien una librería al estilo GNUE-Forms para que sea muy sencillo hacer cambios.
> 
> Bueno es solo una idea... escucho comentarios!
> -- 
> ______________________________________________
> http://www.linuxmail.org/
> Now with e-mail forwarding for only US$5.95/yr
> 
> Powered by Outblaze
> ------------------------------------------------------------------------
> Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
> "UNSUBSCRIBE caracas-pm-list" para desuscribirse.
> "INFO caracas-pm-list" para conocer las reglas de etiqueta.
> ------------------------------------------------------------------------
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/archives/caracas-pm/attachments/20030902/b84f9c0a/attachment.htm


More information about the caracas-pm mailing list