Ich erstelle einen benutzerdefinierten Inhaltsentitätstyp.
Ich möchte ein Feld für die Ereigniszeit.
Da es kein Zeitfeld, sondern einen dataTime_type gibt, erstelle ich ein Plugin für ein benutzerdefiniertes Feld:
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,
),
),
);
}
Ich versuche, den Typ in time (für mysql) zu ändern, aber mysql error gibt mir eine Null für den Typ zurück. Also benutze ich int für die Speicherzeit in Sekunden.
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;
}
Meine Entität:
$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);
Alles funktioniert , außer einer Sache, die HTML5 input type Zeit
Drupal kennt einige Eingaben in HTML5, aber nicht alle ... Typ Tel, E-Mail, Nummer, Bereich, Farbe, Datum, Datum / Uhrzeit ist in Ordnung, aber nicht die Zeit allein.
Also hatte ich gehofft, es mit einem benutzerdefinierten Plugin zu bekommen, aber nein ...
Bearbeiten 1
Die einzige Möglichkeit, die ich gefunden habe, besteht darin, 2 Auswahlen für diesen Typ zu erstellen:
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;
}
Irgendeine Idee dazu?