logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
5 visiteur(s) et 0 membre(s) en ligne.

Index du forum »»  SFORM »» SForm et date

Nouveau sujet
 SForm et date#4509Répondre

2Contributeur(s)
Pascaldeveloppeur
3 Modérateur(s)
developpeurjpbJireck
Pascal Pascalicon_post
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_fields[$i]['name']])."&nbsp;</b>";
break;

Voilou pour l'instant, reste à modifier 2 3 trucs mais ceux qu'en avait besoin ont deja une base
developpeur developpeuricon_post
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
;-)
Pascal Pascalicon_post
A priori pour la date y a pas de modifs à rajouter pour que ça marche. Sauf oubli de ma part.
developpeur developpeuricon_post
on est d'accord que c'est plus un timestamp qu'une date ?
Pascal Pascalicon_post
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.
developpeur developpeuricon_post
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
Pascal Pascalicon_post
Je regarde.. que je puisse combiner mes besoins avec :)
Je resume saisie et gestion d'un champ date format dd/mm/yyyy ca ira ?
Pascal Pascalicon_post
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]['ctrl']);
}
// 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 ]
developpeur developpeuricon_post
voui mais le TimeStamp ? on pourrait avoir les 2
Pascal Pascalicon_post
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 ]