0 votes

sfJQueryUIPlugin : Pas de sélecteur pour les nouveaux enregistrements

Chaque jour est un nouveau jour avec Symfony, mais j'adore ça ! Ce matin, j'ai installé le sfJQueryUIPlugin . Il a très peu de dépendances et accepte les styles de themeRoller. Cependant, il a 2 problèmes :

[Feature_Request] Il n'y a aucun moyen de spécifier la plage d'années. Par défaut, il affiche un intervalle de 20 ans autour de l'année de la valeur du champ. Par exemple, si la valeur du champ est 1993-01-20, l'intervalle sera de 1983 à 2003. ? ?? Quelqu'un a-t-il trouvé une solution ?

Le DatePicker n'apparaît pas lorsque le champ est vide, il n'apparaît donc pas lors de la création d'un nouvel enregistrement. Pour résoudre ce problème, j'ai essayé de configurer la valeur par défaut dans le champ de saisie de la date (qui apparaît maintenant comme un text entrée) en utilisant $this->setDefault('date_of_birth',date('Y-m-d')); ? ?? Quelqu'un est-il confronté au problème du sélecteur maintenant disponible lors de la création d'un nouvel enregistrement ? ? ?? De plus, est-ce la bonne façon de définir la valeur par défaut ?

Merci d'avance.

0voto

Prasad Points 707

Pour obtenir le sélecteur de date sur le nouveau formulaire d'inscription, j'ai dû include javascripts dans le modèle indexSuccess de mon formulaire (ma faute)

comme pour la plage d'années, j'ai modifié le fichier du plugin pour inclure un paramètre supplémentaire

class sfWidgetFormDateJQueryUI extends sfWidgetForm
{
  protected function configure($options = array(), $attributes = array())
  {

    if(sfContext::hasInstance())
     $this->addOption('culture', sfContext::getInstance()->getUser()->getCulture());
    else
     $this->addOption('culture', "en");
    $this->addOption('change_month',  false);
    $this->addOption('change_year',  false);
    $this->addOption('number_of_months', 1);
    $this->addOption('show_button_panel',  false);
    $this->addOption('theme', '/sfJQueryUIPlugin/css/ui-lightness/jquery-ui.css');
    $this->addOption('year_range', '-30:+0');
    parent::configure($options, $attributes);
  }

  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
    $attributes = $this->getAttributes();

    $input = new sfWidgetFormInput(array(), $attributes);

    $html = $input->render($name, $value);

    $id = $input->generateId($name);
    $culture = $this->getOption('culture');
    $cm = $this->getOption("change_month") ? "true" : "false";
    $cy = $this->getOption("change_year") ? "true" : "false";
    $nom = $this->getOption("number_of_months");
    $sbp = $this->getOption("show_button_panel") ? "true" : "false";
    $yrs = $this->getOption("year_range");

    if ($culture!='en')
    {
    $html .= <<<EOHTML
<script type="text/javascript">
    $(function() {
    var params = $.datepicker.regional['$culture'];
    params.changeMonth = $cm;
    params.changeYear = $cy;
    params.numberOfMonths = $nom;
    params.showButtonPanel = $sbp;
    params.yearRange = "$yrs";
    $("#$id").datepicker(params);
    });
</script>
EOHTML;
    }
    else
    {
    $html .= <<<EOHTML
<script type="text/javascript">
    $(function() {
    var params = {
    changeMonth : $cm,
    changeYear : $cy,
    numberOfMonths : $nom,
    showButtonPanel : $sbp,
    yearRange : "$yrs"
        };
    $("#$id").datepicker(params);
    });
</script>
EOHTML;
    }

    return $html;
  }

  public function getStylesheets()
  {...
  }

  public function getJavaScripts()
  {...
  }

}

et configurer le widget comme :

$this->widgetSchema['date_of_birth']= new sfWidgetFormDateJQueryUI(array("change_month" => true, "change_year" => true, "theme" => "smoothness/jquery-ui-1.8.custom.css", "year_range" => "-30:+0"));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X