Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Datepicker + jForms Builder

Posted by Yann.L on 08/17/2009 15:29

Bonjour,

Pour des besoins liés à mon projet actuel, j'ai du redéfinir un jForm Builder HTML .

Tous va bien pour le moment sauf pour la datepicker. En effet j'ai défini une nouvelle méthode _outputDateControl :

 protected function _outputDateControl($ctrl, $id, $value, $class, $readonly, $hint){
        echo '<input id="'.$id.'" size="10" maxlength="10" class="datepicker" type="text" value="'.$value.'" name="'.$ctrl->ref.'"'.$readonly.$hint.$class.'"'.$this->_endt;
    } 

Appeler par la méthode outputDate() que j'ai redefini comme suit:

 protected function outputDate($ctrl, $id, $class, $readonly, $hint){
        $id = $this->_name.'_'.$ctrl->ref;
        
        $val = '';
        if(preg_match('#^(\d{4})?-(\d{2})?-(\d{2})?$#',$this->_form->getData($ctrl->ref),$matches)){
            if (isset($matches[3])){
                $val .= $matches[3].'/';
            }
            if (isset($matches[2])){
                $val .= $matches[2].'/';
            }
            if (isset($matches[1])){
                $val .= $matches[1];
            }
        }
        $f = jLocale::get('jelix~format.date');
        $this->_outputDateControl($ctrl, $id, $val, $class, $readonly, $hint);
 }

Cela permet avec le js qui va bien d'avoir un champ input qui ouvre un mini calendrier sur le onfocus . Seulement le problème survient lors du check du jform, il me sors que mes dates sont invalides alors que se n'est pas le cas. Je sais pas si je m'y suis pris correctement, mais je n'ai pas trouvé d'autre solution pour le faire.

Voici mon js pour le datepicker :

 function jelix_datepicker_dttpreport(control,locale,basePath){
    if(typeof this._controls !== 'undefined'){
        this._controls.push(control);
        return;
    }
    this._controls = [];
    this._controls.push(control);
    this._config = {
        locale:locale,
        basePath:basePath
    };
    this._jsFiles = [];
    if(typeof jQuery.ui == 'undefined')
        this._jsFiles.push(this._config.basePath+'themes/tpreport/js/jquery-ui-1.7.1.tpreport.min.js');
    if(typeof jQuery.datepicker == 'undefined'){
  jQuery.include(this._config.basePath+'themes/tpreport/css/ui.datepicker.css');          this._jsFiles.push(this._config.basePath+'themes/tpreport/js/ui.datepicker.min.js');
        var lang = locale.substr(0,2).toLowerCase();
        if(lang != 'en')
            this._jsFiles.push(this._config.basePath+'themes/tpreport/js/ui.datepicker-'+lang+'.js');
    }
    this._loadJS = function (i){
        if(i<this._jsFiles.length){
            jQuery.include(this._jsFiles[i], function(){ 
                this._loadJS(i+1);
            });
        }
        else
            this._start();
    };
    this._start = function(){
        var config = this._config;
        jQuery.each(
            this._controls,
            function(){
                var control = this;           
                var elt = jQuery('#'+control.formName+'_'+control.name);                
                elt.datepicker($.datepicker.regional['fr']);
                $("#ui-datepicker-div").css("z-index", '2005');
                if(!control.lang){
                    elt.datepicker('change',{
                        dateFormat:'dd/mm/yy'
                    });
                }
                    
                if(control.required){
                    elt.datepicker('change',{
                        mandatory:true
                    });
                }
                elt.blur();
            }
            );
    };
    var me = this;
    jQuery(document).ready(function(){ 
        me._loadJS(0);
    });
 }

Apparemment d'après mes investigations, un check des champs est réalisé en javascript grâce au js du jforms_jquery.js, que pour tester, j'ai modifié pour savoir si les contrôles passent correctement, et apparemment c'est le cas. Je séche un peu et je ne vois pas ou dans le code il me bloc sur mes datepicker et j'ai droits à se joli message sur plusieurs de mes forms :

    * La saisie de "Date du bon de commande" est invalide
    * La saisie de "Date de livraison" est invalide

Un peu d'aide serait la bienvenue.

Cordialement Yann.

  [Opened] Re: Datepicker + jForms Builder

Reply #1 Posted by Yann.L on 08/17/2009 17:39

Apparemment j'ai un truc quelque part qui me transforme mes dates envoyés par le form de dd-mm-yyyy en 1-1-1.

Je vois pas ou par contre :x

  [Opened] Re: Datepicker + jForms Builder

Reply #2 Posted by Yann.L on 08/18/2009 11:50

Après quelques nouvelles recherches, il s'agirait de la méthode setValueFromRequest de la classe jFormsControlDate qui me transforme les dates en '1-1-1' parce qu'il reçoit, suite a mon jforms builder, les dates sous formes de string en 'jj-mm-aaaa', Alors qu'il attend un tableau qu'il reformate en string sous la forme 'aaaa-mm-jj'.

Par contre je ne sais pas où je dois transformer ma date en tableau pour que le reste des composants de jforms puisse me valider mes dates, une idée ?

  [Opened] Re: Datepicker + jForms Builder

Reply #3 Posted by Yann.L on 08/18/2009 15:06

Re:

J'ai donc fait ceci pour que ça fonctionne au niveau de la classe jFormsControlDate, j'ai redéfini la méthode setValueFromRequest comme ceci:

 function setValueFromRequest($request) {
        $value = $request->getParam($this->ref,'');
        $value = explode('-', $value);
        $value = $value[2].'-'.$value[1].'-'.$value[0];
        //$value = $value['year'].'-'.$value['month'].'-'.$value['day'];
        if($value == '--')
            $value = '';
        $this->setData($value);
    }

Mais ce qui m'embête c'est que je modifie une classe du lib, ce qui n'est pas du tout propre, malheureusement je ne vois pas comment faire autrement. A part pour le moment en redéfinissant de manière plus propre la méthode, un peu comme ceci :

 function setValueFromRequest($request) {
        $value = $request->getParam($this->ref,'');
        if (is_array($value)){
            $value = $value['year'].'-'.$value['month'].'-'.$value['day'];
        } else {
            $value = explode('-', $value);
            $value = $value[2].'-'.$value[1].'-'.$value[0];
        }
        if($value == '--')
            $value = '';
        $this->setData($value);
    }

  [Opened] Re: Datepicker + jForms Builder

Reply #4 Posted by laurentj on 08/20/2009 10:47

Salut,

j'ai pas lu tout ton monologue, mais si tu penses qu'il s'agit d'un bug, ou si tu pense que c'est une amélioration profitable à tous (sans casser l'existant) propose ton patch sur le bug tracker.

 
Page
  1. Datepicker + jForms Builder