Fork me on GitHub






XoopsFormTextDateSelect pouvoir mettre null / empty
Aspirant
Inscrit: 28/11/2021 22:07
Messages: 36
Bonjour à tous,

J'ai un champ date géré en timestamp (int)
Il peut être nullable car la date est optionnelle.
Seulement, le composant XoopsFormTextDateSelect ne gère pas l'état vide/null

C'est un "manqué" de Xoops, de ce que je lis et déduit.

DU coup, je pense qu'il faut que gère ça indépendamment.

Faut-il que je prenne un truc PHP bricolé, ou est ce qu'il y a des chose de Xoops qu'on peut utiliser ?
J'ai vu par exemple qu'il y a le fichier "calendar.js" dans Xoops/Include" par exemple.

Posté le : 17/02/2022 11:21
Partager Twitter Partagez cette article sur GG+
Re: XoopsFormTextDateSelect pouvoir mettre null / empty
Admin Frxoops
Inscrit: 16/03/2009 16:40
De Tende (06)
Messages: 3528
Afin d'aider à l'évolution de Xoops, je te recommande de signaler ce soucis aux développeurs ici :
https://github.com/XOOPS/XoopsCore25/issues

Ils sont assez réactifs et résoudront peut-être ton problème.

Posté le : 17/02/2022 11:35

Open in new window

Xoopseuse Mai 2012 | Responsable équipe internationale | Recherche avancée en bas de page !
Partager Twitter Partagez cette article sur GG+
Re: XoopsFormTextDateSelect pouvoir mettre null / empty
Aspirant
Inscrit: 28/11/2021 22:07
Messages: 36
Bonjour,

BIen pensé, en effet.
C'est chose faite, mais du coup, ce ne sera prit en compte (ou pas) que dans la prochaine version de Xoops.
Il me faut une méthode de contournement pour mon cas.

Posté le : 17/02/2022 12:19
Partager Twitter Partagez cette article sur GG+
Re: XoopsFormTextDateSelect pouvoir mettre null / empty
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
le NULL est a évité en PHP, vu qu'il est amené à disparaitre.

pour un timestamp, la valeur est obligatoirement un INT compris entre 0 et xxxxxx, donc si tu laisse le champs vide, je te conseille de mettre à 0.
Toutes valeurs non INT pour un timestamp est une erreur de codage. Et PHP devient susceptible sur les types de variables avec les versions. Et ce n'est pas plus mal

Ensuite, tu peux gérer avec JS, de laisser le champs du formulaire vide si le timestamp est à 0.

Posté le : 17/02/2022 12:30
Partager Twitter Partagez cette article sur GG+
Re: XoopsFormTextDateSelect pouvoir mettre null / empty
Aspirant
Inscrit: 28/11/2021 22:07
Messages: 36
Bonjour,

Merci pour vos réponses rapide.
En effet, ça me va très bien d'utiliser 0.
Le souci, c'est que le contrôle XoopsFormTextDateSelect remplace vide ou 0 par time() qu'il pleuve qu'il vente, qu'il neige.
Alors en JS, pas facile à intercepter.

Posté le : 17/02/2022 12:33
Partager Twitter Partagez cette article sur GG+
Re: XoopsFormTextDateSelect pouvoir mettre null / empty
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
oui, il faut mettre l'équivalent de la date UNIX correspondant à 0:, je sais plus exactement mais c'est 1970

Posté le : 17/02/2022 12:37
Partager Twitter Partagez cette article sur GG+
Re: XoopsFormTextDateSelect pouvoir mettre null / empty
Aspirant
Inscrit: 28/11/2021 22:07
Messages: 36
C'est bon, j'ai récupéré FormDateTimePicker du module xoopspoll
J'ai un peu adapté pour qu'on puisse mettre Date seule ou date/Heure
class FormDateTimePicker extends XoopsFormText
{
    
/**
     * Contains the maximum field size
     */
    
public const MAXSIZE 25;
    protected 
$showTime;

    
/**
     * Constructor to build FormDateTimePicker object
     * @param mixed $caption HTML description to display for the element
     * @param mixed $name    HTML element name (ie. name='$name')
     * @param mixed $size    size of field to display
     * @param mixed $value   timestamp of date/time to show
     */
    
public function __construct($caption$name$size$value$showTime=true)
    {
        
$value = (!is_numeric($value) || (=== (int)$value)) ? null : (int)$value;
        
$size  = (int)$size;
        
$size  = ($size && $size <= self::MAXSIZE) ? $size self::MAXSIZE;
        
$this->$showTime $showTime;
        
parent::__construct($caption$name$sizeself::MAXSIZE$value);
    }

    
/**
     * Generate the HTML <input> to display the date/time field
     * @return string HTML code used to display in a form
     */
    
public function render()
    {
        static 
$included false;

        
$ele_name  $this->getName();
        
$ele_value $this->getValue(true);
        
//if (is_string($ele_value)) {
        
if (!is_numeric($ele_value)) {
            
$display_value $ele_value;
            
$ele_value     time();
        } else if (
$ele_value>0) {
            
//$display_value = '';
            //$display_value = formatTimestamp($ele_value, 'm');
            
if ($this->$showTime)
                
$display_value ucfirst(date("d-m-Y H:i"$ele_value)); // _MEDIUMDATESTRING = d-m-Y H:i
            
else
                
$display_value ucfirst(date("d-m-Y"$ele_value)); // _MEDIUMDATESTRING = d-m-Y H:i
        
}

        if (
is_object($GLOBALS['xoTheme'])) {
            
$moduleHandler xoops_getHandler('module');
            
$sys_module    $moduleHandler->getByDirname('system');
            
$configHandler xoops_getHandler('config');
            
$moduleConfig  $configHandler->getConfigsByCat(0$sys_module->getVar('mid'));
            
$jq_theme_dir  $moduleConfig['jquery_theme'];

            
$GLOBALS['xoTheme']->addStylesheet($GLOBALS['xoops']->url("modules/system/css/ui/{$jq_theme_dir}/ui.all.css"));
            
$GLOBALS['xoTheme']->addScript('browse.php?Frameworks/jquery/jquery.js');
            
$GLOBALS['xoTheme']->addScript('browse.php?Frameworks/jquery/plugins/jquery.ui.js');
            
$GLOBALS['xoTheme']->addScript('browse.php?modules/comin/assets/js/jquery-ui-timepicker-addon.js');
            
$GLOBALS['xoTheme']->addScript('browse.php?modules/comin/assets/js/jquery-ui-sliderAccess.js');
            
$GLOBALS['xoTheme']->addStylesheet($GLOBALS['xoops']->url('modules/comin/css/datetimepicker.css'));

            if (!
$included) {
                
$included true;
                
xoops_loadLanguage('admin''Comin');
                
// setup regional date variables
                
$reg_values "closeText: '"._AM_COMIN_DTP_CLOSETEXT."',"
                    
."prevText: '"._AM_COMIN_DTP_PREVTEXT."',"
                    
."nextText: '"._AM_COMIN_DTP_NEXTTEXT."',"
                    
."currentText: '"._AM_COMIN_DTP_CURRENTTEXT."',"
                    
.'monthNames: ['._AM_COMIN_DTP_MONTHNAMES.'],'
                    
.'monthNamesShort: ['._AM_COMIN_DTP_MONTHNAMESSHORT.'],'
                    
.'dayNames: ['._AM_COMIN_DTP_DAYNAMES.'],'
                    
.'dayNamesShort: ['._AM_COMIN_DTP_DAYNAMESSHORT.'],'
                    
.'dayNamesMin: ['._AM_COMIN_DTP_DAYNAMESMIN.'],'
                    
."weekHeader: '"._AM_COMIN_DTP_WEEKHEADER."',"
                    
."dateFormat: '"._AM_COMIN_DTP_DATEFORMAT."',"
                    
."firstDay: '"._AM_COMIN_DTP_FIRSTDAY."',"
                    
."isRTL: "._AM_COMIN_DTP_ISRTL.","
                    
."showTimepicker: ".(($this->$showTime)?"true":"false")."," // 
                    
."showMonthAfterYear: "._AM_COMIN_DTP_SHOWMONTHAFTERYEAR.","
                    
."yearSuffix: '"._AM_COMIN_DTP_YEARSUFFIX."',";
                
// set regional time variables
                
$reg_values .= "timeOnlyTitle: '"._AM_COMIN_DTP_TIMEONLYTITLE."',"
                    
."timeText: '"._AM_COMIN_DTP_TIMETEXT."',"
                    
."hourText: '"._AM_COMIN_DTP_HOURTEXT."',"
                    
."minuteText: '"._AM_COMIN_DTP_MINUTETEXT."',"
                    
."secondText: '"._AM_COMIN_DTP_SECONDTEXT."',"
                    
."millisecText: '"._AM_COMIN_DTP_MILLISECTEXT."',"
                    
."timeFormat: '"._AM_COMIN_DTP_TIMEFORMAT."',"
                    
.'ampm: false,'.'stepMinute: 5';
                
$GLOBALS['xoTheme']->addScript('','','$(function() {$( ".datetimepicker" ).datetimepicker({'.$reg_values.'});});');
            }
        }

        return 
"<input type='text' name='{$ele_name}' id='{$ele_name}' class='datetimepicker' size='".$this->getSize()."' maxlength='".$this->getMaxlength()."' 
            value='
{$display_value}'".$this->getExtra().'>';
    }
}

Posté le : 17/02/2022 14:57
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

62 Personne(s) en ligne (50 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 62 | Plus ...