6 septembre 2010
Après trois semaines de vacances au soleil et quelques semaines limitées sur le plan du dev, me voici de retour pour votre plus grand plaisir
Encore une fois, je vous propose un petit widget légèrement personnalisé : sfWidgetFormTimeAndClear.
On continue dans la lancée du sfWidgetFormDoctrineJQueryAutocompleterAndClear avec le même petit bouton permettant de vider le contenu des listes déroulantes du champ d’heure.
Il faut bien sûr intégrer jQuery pour que cela fonctionne mais vous l’aviez sans doute compris
Voici le code :
class sfWidgetFormTimeAndClear extends sfWidgetFormTime
{
public function render($name, $value = null, $attributes = array(), $errors = array())
{
return parent::render($name, $value, $attributes, $errors).
' <img src="data:image/png;base64,'.$this->getImage().'" alt="" id="'.$this->getDeleteId($name).'" />'.
sprintf(<<<EOF
<script type="text/javascript">
$("#%s").bind("mouseover", function(e){
$("#%s")[0].style.cursor = "pointer";
});
$("#%s").bind("click", function(e){
$("#%s")[0].value = "";
$("#%s")[0].value = "";
%s
return false;
});
</script>
EOF
,
$this->getDeleteId($name),
$this->getDeleteId($name),
$this->getDeleteId($name),
$this->getHourId($name),
$this->getMinuteId($name),
$this->getSecondId($name)
);
}
private function getHourId($value)
{
return $this->generateId($value."_hour");
}
private function getMinuteId($value)
{
return $this->generateId($value."_minute");
}
private function getSecondId($value)
{
if ($this->getOption('with_seconds'))
{
return '$("#'.$this->generateId($value."_second").'")[0].value = "";';
}
return '';
}
private function getDeleteId($value)
{
return $this->generateId("delete_hour_value_".$value);
}
private function getImage()
{
return "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==";
}
}
Et voici à quoi cela ressemble :
Je vais sans doute proposer également les widgets date et datetime sous ce format dans les jours à venir.




