Вариант с подсчетом.
В папке system/fields создать файл sleep.php
<?php class fieldSleep extends cmsFormField {
public $title = 'Сон';
public $sql = 'varchar(128) NULL DEFAULT NULL';
public $var_type = 'string';
public $type = 'text';
public function parse($value) {
if (is_empty_value($value)) { return ''; }
$start = '<p>Начало: '.($values[0] ?
date('H:i', strtotime($values[0])) : '---').'</p>'; $end = '<p>Конец: '.($values[1] ?
date('H:i', strtotime($values[1])) : '---').'</p>'; $period = '';
if ($values[0] && $values[1]) {
$period = date_diff($time_0, $time_1);
$period = $period->format('%H ч. %I мин.');
$period = '<p>Продолжительность: '.$period.'</p>';
}
return '<div>'.$start.$end.$period.'</div>';
}
public function store($value, $is_submitted, $old_value = null) {
$values = $this->request->get($this->name);
if (empty($values[0]) && empty($values[1])) { return ''; } $old_values = $old_value ?
explode('|', $old_value) : []; if ($values[0]) { $values[0] = !empty($old_values[0]) ?
date('Y-m-d '.$values[0], strtotime($old_values[0])) : date('Y-m-d '.$values[0]); } if ($values[1]) { $values[1] = !empty($old_values[1]) ?
date('Y-m-d '.$values[1], strtotime($old_values[1])) : date('Y-m-d '.$values[1]); } }
}
В папке templates/default/assets/fields создать файл sleep.tpl.php
<?php if ($field->title) { ?><label for="<?php echo $field->id; ?>"><?php echo $field->title; ?></label><?php } ?>
<?php
$time_0 = html_input('time', $field->element_name.'[0]', '', []);
if ($val_0) {
$time_0 = html_input('hidden', $field->element_name.'[0]', $val_0, []).html_input('time', $field->element_name.'_disabled_0', $val_0, ['disabled' => 'disabled']);
}
$time_1 = html_input('time', $field->element_name.'[1]', '', []);
if ($val_1) {
$time_1 = html_input('hidden', $field->element_name.'[1]', $val_1, []).html_input('time', $field->element_name.'_disabled_1', $val_1, ['disabled' => 'disabled']);
}
?>
<div class="time_field">
<div class="input-group mb-2">
<label style="width:100%;">Начало</label>
<?php echo $time_0; ?>
</div>
<div class="input-group">
<label style="width:100%;">Конец</label>
<?php echo $time_1; ?>
</div>
</div>
Добавить в ТК поле «Сон».
Особенности:
- Если время указано, его нельзя изменить.
- Дата (день/месяц/год) в поле — текущая при заполнении.
nifigasse.ru/board/21-objavlenie.html