Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-05-2011 14:31:50

deviltaz
Membre
Date d'inscription: 09-09-2008
Messages: 37

Champs de formulaire portant sur des datetime

Bonjour,

je souhaite réaliser un formulaire invitant l'utilisateur à saisir
deux champs datetime afin de définir une période de couverture
à appliquer à une requête sur bdd MySQL.

Ca fonctionne déjà mais :
je dois saisir les datetime au format MySQL natif (yyyy/mm/dd hh:mm:ss)
Pas très parlant pour un public français !

Comment faciliter la vie d'un utilisateur dans cette saisie ?

A minima je souhaiterais pouvoir saisir une date "à la française" soit dd/mm/yyyy,
le summum consistant à faire apparaitre un calendrier pour sélectionner la bonne date
puis l'heure à l'instar par ex. de ce que réalise phpMyAdmin dans le formulaire d'insertion sur un champ datetime.

D'avance merci de vos conseils.

Hors ligne

 

#2 12-05-2011 15:58:59

playmobilette
Membre
Date d'inscription: 05-10-2010
Messages: 50

Re: Champs de formulaire portant sur des datetime

Salut

Si tu utilises JQuery tu peux utiliser le datePicker, et si tu veux aller plus loin tu peux utiliser le TimePicker ici

http://trentrichardson.com/examples/timepicker/

Hors ligne

 

#3 13-05-2011 01:00:50

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: Champs de formulaire portant sur des datetime

perso j'ai créer un nouvel élément pour mes formulaire :

Code:

[lang=php]<?php

class Grummfy_Form_Element_Date extends Zend_Form_Element_Xhtml
{
    protected $_day;

    protected $_month;

    protected $_year;

    /**
     * Constructeur d'un élément date avec validateur
     * @param string $label label du champ
     * @param string $name nom du champ
     * @param bool $required requis ou non pour validé le formulaire
     * @param array $options options de configuration, facultatif
     */
    public function __construct($label, $name, $required = true, $options = null)
    {
        parent::__construct($name, $options);

        $this->addPrefixPath(
            'Grummfy_Form_Decorator',
            'decorator'
        );

        $this->setLabel($label);

        $this->setRequired($required);

        $this->addValidator(new Zend_Validate_Date('DD/MM/YYYY'));
        $this->setFilters(array(
            'HtmlEntities',
            'StripTags',
            'StringTrim',
            'StripNewlines'
        ));
    }

    public function loadDefaultDecorators()
    {
        if ($this->loadDefaultDecoratorsIsDisabled())
        {
            return;
        }

        $decorators = $this->getDecorators();
        if (empty($decorators))
        {
            $this->addDecorator('Date');
            $this->addDecorator('Description', array('tag' => 'p', 'class' => 'description'));
            $this->addDecorator('Errors');
            $this->addDecorator('HtmlTag', array('tag' => 'dd', 'id'  => $this->getName() . '-element'));
            $this->addDecorator('Label', array('tag' => 'dt'));
        }
    }

    /**
     * Défini le jour
     * @param int $value
     */
    public function setDay($value)
    {
        $this->_day = intval($value);
        return $this;
    }

    /**
     * Fourni le jour
     * @return int
     */
    public function getDay()
    {
        return $this->_day;
        $this->isValid();
    }

    /**
     * Défini le mois
     * @param int $value
     */
    public function setMonth($value)
    {
        $this->_month = intval($value);
        return $this;
    }

    /**
     * Fourni le mois
     * @return int
     */
    public function getMonth()
    {
        return $this->_month;
    }

    /**
     * Défini l'année
     * @param int $value
     */
    public function setYear($value)
    {
        $this->_year = intval($value);
        return $this;
    }

    /**
     * Fourni l'année
     */
    public function getYear()
    {
        return $this->_year;
    }

    /**
     * Fourni le temps (12h30:30)
     * @return int
     */
    public function getTime()
    {
        return mktime(12, 30, 30, $this->getMonth(), $this->getDay(), $this->getYear());
    }

    /**
     * Défini la valeur de l'élément
     * @param int|string|array $value
     */
    public function setValue($value)
    {
        if (is_int($value))
        {
            $this->setDay(date('d', $value));
            $this->setMonth(date('m', $value));
            $this->setYear(date('Y', $value));
        }
        elseif (is_string($value))
        {
            $date = strtotime($value);
            $this->setDay(date('d', $date));
            $this->setMonth(date('m', $date));
            $this->setYear(date('Y', $date));
        }
        elseif(is_array($value) && isset($value['day']) && isset($value['month']) && isset($value['year']))
        {
            $this->setDay($value['day']);
            $this->setMonth($value['month']);
            $this->setYear($value['year']);
        }
        else
        {
            throw new Grummfy_Form_Element_Exception('Format des valeur incorrecte');
        }

        return $this;
    }

    /**
     * Fourni la date
     * @param string $format : %day%/%month%/%year%
     * @return string
     */
    public function getValue($format = '%day%/%month%/%year%')
    {
        return str_replace(
            array('%day%', '%month%', '%year%'),
            array($this->getDay(), $this->getMonth(), $this->getYear()),
            $format
        );
    }
}

# EOF

Code:

[lang=php]<?php

class Grummfy_Form_Decorator_Date extends Zend_Form_Decorator_Abstract
{
    public function render($content)
    {
        $element = $this->getElement();
        if (!$element instanceof Grummfy_Form_Element_Date)
            return $content;

        $view = $element->getView();
        if (!$view instanceof Zend_View_Interface)
        {
            return $content;
        }

        $value = array(
            'day'    => $element->getDay(),
            'month'    => $element->getMonth(),
            'year'    => $element->getYear()
        );

        $elementContent = $view->formDate($element->getFullyQualifiedName(), $value);

        switch ($this->getPlacement())
        {
            case self::APPEND:
                return $content . $separator . $elementContent;
            case self::PREPEND:
                return $elementContent . $separator . $content;
            default:
                return $elementContent;
        }
    }
}

# EOF

Dernière modification par Grummfy (13-05-2011 01:02:05)


Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages