|
Pascal
415
| Posté : 26-02-2003 14:33
Bon ça va être long.
J'ai besoin d'un champs date pour l'enregistrer dans la base ou ailleurs.
On rajoute une fonction :
/****************************************************************************** ********/
// ajout un champs date de type hidden
// appel avec add_date(), add_date(nom), add_date("nom","Today") pexemple
// public void
function add_date($name='date', $en='Le') {
$this->form_fields[count($this->form_fields)]=array(
'en'=>$en,
'name'=>$name,
'value'=>strtotime("now"),
'type'=>"date"
);
}
Dans la fonction print_form on rajoute :
case 'date':
$str.="<input class=\"hidden\" type=hidden name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value']."'>";
break;
Ca crée un champs hidden avec le timestamp
Dans la fonction make_response on rajoute :
case 'date':
// Charge la valeur de la clef puisqu'on peut indexer sur la date pourquoi pas
if ($this->form_fields[$i]['name']==$this->form_key) {
$this->form_key_value=$GLOBALS[$this->form_fields[$i]['name']];
}
$this->answer[$i].="<DATE>\n";
$this->answer[$i].="<".$this->form_fields[$i]['name']." >".$this->form_fields[$i]['value']."</".$this->form_ fields[$i]['name'].">\n";
$this->answer[$i].="</DATE>";
break;
Ce qui à pour effet d'une part de rajouter une balise <DATE> dans la réponse, et d'autre part d'utiliser cette date comme index pour la base de donnée, index que l'on crée (petit rappel...) avec : add_key(nom)
Enfin dans la fonction aff_response on rajoute :
// Ajout du formatage de la date
case 'date':
$str.="<tr bgcolor=$bg><td>".$this->form_fields[$i]['en'];
$str.="<td>";
$str.="<b>".date("d-m-Y",$GLOBALS[$this->form_fiel ds[$i]['name']])." </b>";
break;
Voilou pour l'instant, reste à modifier 2 3 trucs mais ceux qu'en avait besoin ont deja une base
|   Profil E-mail www Citation
|
|
developpeur
24581
| Posté : 26-02-2003 17:52
Je modifie SFORM dans la 5.0 (pour l'utiliser dans users.php), alors une fois tes modifs nickel => je les intègre de base dans la classe.
Pense y, comme cela ton travail ne sera pas perdu
|   Profil E-mail www Citation
|
|
Pascal
415
| Posté : 27-02-2003 10:31
A priori pour la date y a pas de modifs à rajouter pour que ça marche. Sauf oubli de ma part. |   Profil E-mail www Citation
|
|
developpeur
24581
| |
Pascal
415
| Posté : 27-02-2003 11:41
Effectivement ça crée un champs caché avec le timestamp au moment où le formulaire est affiché à l'écran.
Si ta question est est-ce un champ où l'on peut saisir une date, pour l'instant non, mais je pourrais regarder ça. |   Profil E-mail www Citation
|
|
developpeur
24581
| Posté : 27-02-2003 11:56
je pensais remplacer par et a l'intégration d'un vrai champ date (en reprenant le code de plannification des news par exemple), ce qui permettrais vraimment d'étendre les fonctions de SFORM |   Profil E-mail www Citation
|
|
Pascal
415
| Posté : 27-02-2003 12:10
Je regarde.. que je puisse combiner mes besoins avec :)
Je resume saisie et gestion d'un champ date format dd/mm/yyyy ca ira ? |   Profil E-mail www Citation
|
|
Pascal
415
| Posté : 27-02-2003 15:54
Bon...
Enlevé la fonction add_date, on se sert de add_field :
function add_field($name,$en, $value='', $type='text', $obligation=false, $size='50', $diviseur='5', $ctrl='') {
if ($type=="submit") {$name=$this->submit_value;}
if ($type=="date") {$size=10; $ctrl='date';}
$this->form_fields[count($this->form_fields)]=array(
'name'=>$name,
'type'=>$type,
'en'=>$en,
'value'=>$value,
'size'=>$size,
'diviseur'=>$diviseur,
'obligation'=>$obligation,
'ctrl'=>$ctrl
);
}
Dans print_form rajoute :
case 'date':
$str.="<tr class=\"text\"><td class=\"text\">".$this->form_fields[$i]['en'];
$style = "text";
// Si la date initial est nulle on en crée une à la date du jour
if ($this->form_fields[$i]['value']=="") $this->form_fields[$i]['value']=date("d/m/Y");
// Si key_close, pas la peine de dire que c'est un champs obligatoire
if($this->form_fields[$i]['obligation'] && $this->form_key_status!="close"){
$this->form_check.=" && (f.elements['".$this->form_fields[$i]['name']."'].value!='')" ;
$style = "oblig";
$str.=" <font color=red>*</font><td>";
} else $str.="<td>";
// Charge la valeur et analyse la clef
if ($this->form_fields[$i]['name']==$this->form_key) {
$this->form_key_value=$this->form_fields[$i]['value'];
if ($this->form_key_status=="close") {
$str.="<input type=hidden name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value']."'>";
$str.="<b>".$this->form_fields[$i]['value']."</b> ";
} else {
$str.="<input class=$style type=".$this->form_fields[$i]['type']." name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value']."' size=".($this->form_fields[$i]['size']+1)." maxlength=".$this->form_fields[$i]['size'].">";
}
} else {
$str.="<input class=$style type=".$this->form_fields[$i]['type']." name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value']."' size=".($this->form_fields[$i]['size']+1)." maxlength=".$this->form_fields[$i]['size'].">";
}
break;
Dans make_response :
case 'date':
if ($this->form_fields[$i]['ctrl']!="") {
$this->control($this->form_fields[$i]['name'],$this->form_fields[$i][' en'],$GLOBALS[$this->form_fields[$i]['name']],$this->form_fields[$i]['ctr l']);
}
// Charge la valeur de la clef puisqu'on peut indexer sur la date pourquoi pas
if ($this->form_fields[$i]['name']==$this->form_key) {
$this->form_key_value=$GLOBALS[$this->form_fields[$i]['name']];
}
$this->answer[$i].="<DATE>\n";
$this->answer[$i].="<".$this->form_fields[$i]['name']." >".$GLOBALS[$this->form_fields[$i]['name']]."</".$this- >form_fields[$i]['name'].">\n";
$this->answer[$i].="</DATE>";
break;
Aff_response (pas de changement) :
case 'date':
$str.="<tr bgcolor=$bg><td>".$this->form_fields[$i]['en'];
$str.="<td>";
$str.="<b>".$GLOBALS[$this->form_fields[$i]['name']]." </b>";
break;
Dans control :
case 'date':
// Date en tableau
$date = explode("/",$valeur);
if (!checkdate($date[1],$date[0],$date[2])) {
$this->error($nom,"Date non valide");
exit ();
}
break;
Je crois que c'est mieux que le premier
[ Message édité par : Pascal : 27-02-2003 15:54 ] |   Profil E-mail www Citation
|
|
developpeur
24581
| |
Pascal
415
| Posté : 27-02-2003 17:50
C'est vrai que pour moi c'est plus pratique de travailler avec des timestamp dans les champs date de la base entre autre, que de vulgaires dates toutes moches, je jete un oeil.
Mais quand tu dis les deux la j'vois pas.
C'est stockage interne en timestamp affichage en clair
[ Message édité par : Pascal : 27-02-2003 17:57 ] |   Profil E-mail www Citation
|
|
developpeur
24581
| Posté : 27-02-2003 18:02
c'est pour : <TIMESTAMP> => qui est automatique et HIDDEN alors que <DATE> serait un champ d'un formulaire.
Le stockage est idem mais ni la représentation XML ni la mécanique du formulaire
Enfin c'est un avis |   Profil E-mail www Citation
|
|
Pascal
415
| Posté : 27-02-2003 18:57
Voila ça roule, je t'envoie sform par email c'est mieux
Une date en timestamp -> champ hidden
nom,intitulé, valeur rien pour date du jour ou timestamp,type stamp
// Date timestamp
$m->add_date("date","","",'stamp');
Une date pour champ de formulaire
nom, intitulé,valeur idem stamp,type date,obli ou nom
La date est tjrs controlee
// Date au format JJ/MM/YYYY type date
$m->add_date("date","Date","",'date',true);
|   Profil E-mail www Citation
|
|
developpeur
24581
| |