Tôi tạo một loại thực thể nội dung tùy chỉnh.
Tôi muốn một lĩnh vực cho thời gian sự kiện.
Vì không có trường thời gian, nhưng là dataTime_type, tôi tạo một plugin cho trường tùy chỉnh:
FieldType: TimeItem.php
/**
* Plugin implementation of the 'time' field type.
*
* @FieldType(
* id = "time",
* label = @Translation("Time Field"),
* description = @Translation("Permet la creation d'un champ de type time"),
* default_widget = "time_widget",
* default_formatter = "time_formatter"
* )
*/
/**
* {@inheritdoc}
*/
public static function schema(FieldStorageDefinitionInterface $field_definition) {
return array(
'columns' => array(
'value' => array(
'description' => 'The time value.',
'type' => 'int',
'length' => 6,
),
),
);
}
Tôi cố gắng thay đổi loại thành thời gian (đối với mysql) nhưng lỗi mysql trả lại cho tôi một giá trị null cho loại. Vì vậy, tôi sử dụng int cho thời gian lưu trữ trong seconde.
FieldWidget: TimeWIdget.php
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$value = isset($items[$delta]->value) ? $items[$delta]->value : '';
$element += array(
'#type' => 'time', //HTML5 input
'#default_value' => $value,
'#size' => 4,
'#element_validate' => array(
array($this, 'validate'),
),
);
return $element;
}
Thực thể của tôi:
$fields['heure_evenement'] = BaseFieldDefinition::create('time')
->setLabel(t('test'))
->setDescription(t('test'))
->setRequired(TRUE)
->setDefaultValue('')
->setDisplayOptions('view', array(
'label' => 'above',
'type' => 'string',
'weight' => 3,
))
->setDisplayOptions('form', array(
'weight' => 3,
))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
Tất cả đều hoạt động ngoại trừ một điều, thời gian loại đầu vào HTML5
Drupal biết một số đầu vào trong html5 nhưng không phải tất cả ... gõ tel, email, số, phạm vi, màu sắc, ngày tháng, datetime là ok nhưng không phải là thời gian loại một mình.
Vì vậy, tôi đã hy vọng có được nó với một plugin tùy chỉnh, nhưng không ...
Chỉnh sửa 1
Cách duy nhất tôi đã tìm thấy là tạo 2 select cho loại này:
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$value = isset($items[$delta]->value) ? $items[$delta]->value : '';
//heure
for($i=0;$i<=24;$i++){
$hour[]=$i;
}
//minutes
for($i=0;$i<=59;$i++){
$minutes[]=$i;
}
$element += array('hour'=>array(
'#title'=>t('Hour'),
'#type' => 'select',
'#options'=>$hour,
'#default_value' => $value,
'#element_validate' => array(
array($this, 'validate'),
),
)
);
$element += array('minutes'=>array(
'#title'=>t('Minutes'),
'#type' => 'select',
'#options'=>$minutes,
'#default_value' => $value,
'#element_validate' => array(
array($this, 'validate'),
),
)
);
return $element;
}
Bất cứ ý tưởng về điều này?