I am trying to leave the TimeField as null on an admin page load if null in the database but it always defaults to midnight (00:00:00). When I save the page again this value of midnight gets saved to the database which is undesirable.
Is there a method of achieving this?
I found the reason why it is happening below.
class TimeField extends TextField
{
public function Value()
{
$localised = $this->internalToFrontend($this->value);
if ($localised) {
return $localised;
}
// Show midnight in localised format
return $this->getMidnight();
}
I’m not sure where I found this originally, so I’m not sure who to credit, but I ran into that issue as well. What worked for me was grabbing Shea Dawson’s TimePickerField addon - GitHub - sheadawson/silverstripe-timepickerfield: A time picker field based on jQuery UI Timepicker By François Gélinas then extending it like this…
<?php
use SheaDawson\TimePickerField\TimePickerField;
class NullableTimeField extends TimePickerField
{
// This fixes the default midnight stuff
public function Value()
{
$localised = $this->internalToFrontend($this->value);
if ($localised) {
return $localised;
}
return '';
}
}
Thanks Andrew. I ended up extending the standard TimeField.
use SilverStripe\Forms\TimeField;
class NullableTimeField extends TimeField
{
// This fixes the default midnight stuff
public function Value()
{
$localised = $this->internalToFrontend($this->value);
if ($localised) {
return $localised;
}
// Show empty format
return '';
}
}
If you also need to use it on Symbiote\GridFieldExtensions\GridFieldEditableColumns
silverstripe-gridfieldextensions/index.md at 3 · symbiote/silverstripe-gridfieldextensions · GitHub
$grid = GridField::create(
...
);
$grid->getConfig()->getComponentByType(GridFieldEditableColumns::class)->setDisplayFields(array(
'StartDate' => array(
'title' => 'Start Date',
'field' => 'SilverStripe\Forms\DateField'
),
'EndDate' => array(
'title' => 'End Date',
'field' => 'SilverStripe\Forms\DateField'
),
'StartTime' => array(
'title' => 'Start Time',
'field' => 'NullableTimeField'
),
'EndTime' => array(
'title' => 'End Time',
'field' => 'NullableTimeField'
)
));
1 Like