Problème PANEL - Paramètres PERL

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server

Modérateur: modos Ixus

Problème PANEL - Paramètres PERL

Messagepar gla » 25 Juin 2004 16:43

Salut à tous, et surtout aux autres...

Je suis en train de faire un petit panel, et je rencontre un petit soucis en perl...

Dans une liste d'options sur la page, je souhaite donner les différentes valeurs par une fonction get_options()

Cette fonction me permet de renvoyer la chaine de caractère correspondant aux options du champ qui va bien.
Ex : get_options('ComPort') doit retourner 'Com1','Com2'...

Le problème est que la chaine 'ComPort' n'arrive jamais à ma fonction ! :shock:

Dans le code suivant
Code: Tout sélectionner
sub get_value {
  my $fm = shift;
  my $item = shift;

  print $fm;
  print $item;
  return ($db->get('hylafax')->prop($item));   
}


les deux print me retournent le handle du CGI, et la valeur de la variable d'appel
Ex : get_value('FaxNumber') produit le print FaxNumber

Mais dans le code suivant :
Code: Tout sélectionner
sub get_options {
  my $fm = shift;
  my $item = shift;
  print $fm;
  print $item;
 
  if    ( $item eq 'ModemSpeed' )
       {
        return {' 9600' => ' 9600',
                '14400' => '14400',
                '19200' => '19200',
                '38400' => '38400'
               };
       }
  elsif ( $item eq 'ComPort' )
        {
        return {'Com1' => '/dev/ttys0',
                'Com2' => '/dev/ttys1'
               };
        }       

}

L'appel à get_options('ComPort') devrait produire un print de 'ComPort'. Au lieu de cela la fonction ne retourne que le handle, et pas l'option choisie :(

Quelqu'un a une idée ? :idea:
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar Muzo » 25 Juin 2004 16:50

Salut gla

2 questions :
1- As tu déclarer tes fonctions en tête de ton fichiers?
2- As tu crée un objet CGI qui va contenir tes valeurs?
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar gla » 25 Juin 2004 17:14

Muzo a écrit:1- As tu déclarer tes fonctions en tête de ton fichiers?

voilà ce que j'ai, ça me semble correct ...

Code: Tout sélectionner
our @EXPORT = qw(
                change_settings
                get_value
                get_options
                );



Muzo a écrit:2- As tu crée un objet CGI qui va contenir tes valeurs?

[/quote]
En ce qui concerne l'objet CGI, je fais un new sur mon panel, est-ce cela dont tu parles ?

dans le panel
Code: Tout sélectionner
use esmith::FormMagick::Panel::faxsrv;
my $f = esmith::FormMagick::Panel::faxsrv->new();
$f->display();


puis dans le fichier PM ...
Code: Tout sélectionner
sub new {
    shift;
    my $self = esmith::FormMagick->new();
    $self->{calling_package} = (caller)[0];
    bless $self;
    return $self;
}
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar Muzo » 25 Juin 2004 17:20

1- Ok c'est bon
2- c'est pas du tout ca. Je te recherche le truc.
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Muzo » 25 Juin 2004 17:26

Création du cgi :

Code: Tout sélectionner
sub build_ibay_cgi_params {
    my ($fm, $ibayname, %oldprops) = @_;

    my %props = (
        page    => 0,
        page_stack => "",
        name => $ibayname,
    );

    return $fm->props_to_query_string(\%props);
}


Ca c'est un exemple. a adapter à ton besoin. N'hésites pas à regarder dans les panel du serveur sous :
/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar gla » 25 Juin 2004 17:43

Ok, je vais essayer cela...

Mais comment expliques-tu que cela fonctionne dans le cas de la fonction get_value ?
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar Muzo » 25 Juin 2004 18:55

gla a écrit:Ok, je vais essayer cela...

Mais comment expliques-tu que cela fonctionne dans le cas de la fonction get_value ?


Euh .. parce que je crois que je me fourvois. :oops:


Code: Tout sélectionner
sub get_value {
  my $fm = shift;
  my $item = shift;

  print $fm;
  print $item;
  return ($db->get('hylafax')->prop($item));   
}


Là tu déclares 2 fois la même choses et y'en a une que tu n'utilises pas : $fm. Tu peux enlever le paramètre $fm de ta fonction (déclaration).

Idem pour ton autre fonction.

Bon cela ne résoud pas ton problème.
Par contre comment appelles-tu ces fonctione dans ton panel?
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar gla » 25 Juin 2004 18:59

Muzo a écrit:Création du cgi :

Code: Tout sélectionner
sub build_ibay_cgi_params {
    my ($fm, $ibayname, %oldprops) = @_;

    my %props = (
        page    => 0,
        page_stack => "",
        name => $ibayname,
    );

    return $fm->props_to_query_string(\%props);
}


Ca c'est un exemple. a adapter à ton besoin. N'hésites pas à regarder dans les panel du serveur sous :
/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/



Je suis un peu long mais je viens de comprendre...
en fait ta fonction sert à récupérer les param lorsque tu as une url comme lien vers le cgi.

genre

proftpd?page_stack=;page=0;name=Primary&action=modify&wherenext=Modify

Le problème c'est que ce n'est pas mon cas... :(
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar gla » 25 Juin 2004 19:05

Muzo a écrit:...
Code: Tout sélectionner
sub get_value {
  my $fm = shift;
  my $item = shift;

  print $fm;
  print $item;
  return ($db->get('hylafax')->prop($item));   
}


Là tu déclares 2 fois la même choses et y'en a une que tu n'utilises pas : $fm. Tu peux enlever le paramètre $fm de ta fonction (déclaration).
...


Non, car voici un résultat de print sur la fonction get_value('FaxNumber')

Code: Tout sélectionner
esmith::FormMagick::Panel::faxsrv=HASH(0x85c8b3c)
FaxNumber

En fait $fm contient le hash de l'appelant (la fenetre je pense)
et $item contient le param (ici FaxNumber)

en revanche, si je lance de la même manière sur la fonction get_options... le $fm renvoit bien le hash, mais $item est vide !
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar gla » 25 Juin 2004 19:12

Muzo a écrit:Par contre comment appelles-tu ces fonctione dans ton panel?


Voici un exemple d'appel des deux fonctions

(j'en ai enlevé un peu pour faire plus light ...)

Code: Tout sélectionner
use strict;
use esmith::FormMagick::Panel::faxsrv;
my $f = esmith::FormMagick::Panel::faxsrv->new();
$f->display();

__DATA__
<form title="FORM_TITLE"
      header="/etc/e-smith/web/common/head.tmpl"
      footer="/etc/e-smith/web/common/foot.tmpl">
      <page name="First"
            post-event="change_settings()"
            pre-event="turn_off_buttons()">
            <field type="text"
                   id="FaxNumber"
                   value="get_value('FaxNumber')">
                   <label>NUM_FAX</label>
                   <description>DESC_NUM_FAX</description>
            pre-event="turn_off_buttons()">
            <field type="select"
                   id="ModemSpeed"
                   options="get_options('ModemSpeed')"
                   value="get_value('ModemSpeed')">
                   <label>MODEM_SPEED</label>
                   <description>DESC_MODEM_SPEED</description>
            </field>
            <field type="select"
                   id="ComPort"
                   options="get_options('ComPort')"
                   value="get_value('ComPort')">
                <label>COMPORT</label>
                <description>DESC_COMPORT</description>
            </field>
            <subroutine src="print_button('SAVE')" />
    </page>

    <page name="Done" pre-event="turn_off_buttons">
      <description>SUCCESS</description>
    </page>

</form>


Et les deux fonctions get_options() et get_value() sont celle ci-dessus...
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar Muzo » 25 Juin 2004 19:15

[edit]J'enlèves ma bêtise je n'avais pas vu ton panel[/edit]
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar gla » 25 Juin 2004 19:24

Muzo a écrit:J'ai compris,
tu veux récupéré la valeur passée en paramètre.

Oui, c'est ça :wink:


Muzo a écrit:
Code: Tout sélectionner
sub get_value {
  my $fm = shift;
  my($item) = @_;

  print $fm;
  print $item;
  return ($db->get('hylafax')->prop($item));   
}


Quand tu fais my $fm = shift tu récupères une "hash" en effet , mais c'est ta session sur ton serveur. Session qui va contenir tes variables.

Normalement le shift ne sort qu'une variable de la pile.
Alors que @_ est le tableau de toutes les param...


Muzo a écrit: Par contre ce que je n'explique pas c'est pourquoi tu as bien la variable fax.

Pareil ! :cry:


Après vérification, cela ne change rien...
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar Muzo » 25 Juin 2004 19:26

gla a écrit:<field type="text"
id="FaxNumber"
value="get_value('FaxNumber')">
<label>NUM_FAX</label>
<description>DESC_NUM_FAX</description>
pre-event="turn_off_buttons()">
</field>


Tu as oublié de fermé un tag (peut-être du à l'effacement).

Ensuite, tes méthodes sont bonnes j'ai aussi des $fm = shift et $toto= shift dans mes méthodes appelées directement par le panel.

Par contre, get_value('FaxNumber') la variabe passée est inutile.
Car c'est l'id (id="FaxNumber") qui va être passé au $toto=shift.
A mon avis ton script s'emmele les pinceaux entre les 2.
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar gla » 25 Juin 2004 19:38

Pour le tag <field> c'est OK

je viens de tester en enlevant le param dans l'appel de la fonction... mais cela ne donne rien ! :cry:
dommage, j'y croyais :wink:

Pour info, regarde le lien vers CPAN
http://search.cpan.org/~mitel/CGI-FormM ... _attribute

Moi j'y perd mon latin (en plus il ne m'en restait pas beaucoup ...)
J'ai connu une polonaise qui en buvait au petit déjeuner...
SMERP : Distribution Open Source pour l'entreprise
Avatar de l’utilisateur
gla
Amiral
Amiral
 
Messages: 1259
Inscrit le: 28 Sep 2002 00:00
Localisation: Grasse

Messagepar sibsib » 25 Juin 2004 21:55

Salut,

Là, ce soir, j'ai un peu la tête à l'envers, mais mon expérience FormMagickienne me laisse penser que la fonction
option="tartenpion()" ne lit pas les paramètres entre parenthèses, contrairement à la fonction
value="tarte('enpion')"

FormMagick est un projet ambitieux, mais pas tout à fait fini...
la présence de la paire de parenthèse ne veut pas nécessairement dire qu'il s'agit d'une fonction avec passage de paramètre, simplement qu'il s'agit d'une fonction !

Si tu veux décrypter çà, déjà :

perldoc -U CGI::FormMagick

et ensuite

vi /usr/lib/perl5/site_perl/5.6.1/CGI/FormMagick/HTML.pm

En étant pragma, il te reste à décrire ta form dans la fonction pm au lieu de la form elle même...

Bon courage,
Pascal
Sibsib, admin heureux d'un petit SME !!!
- SME 8.0 beta 6 dans une VM :-)
- ESXI 4.1 sur hardware noname
Ma petite page sur SME
Avatar de l’utilisateur
sibsib
Amiral
Amiral
 
Messages: 2368
Inscrit le: 11 Mai 2002 00:00
Localisation: France - région parisienne

Suivant

Retour vers E-Smith / SME Server

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron