カスタムコンテンツエンティティタイプを作成します。
イベント時間に1つのフィールドが必要です。
時間フィールドはありませんが、dataTime_typeがあるため、カスタムフィールドのプラグインを作成します。
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,
),
),
);
}
タイプを時間(mysqlの場合)に変更しようとしましたが、mysqlエラーによりタイプのnullが返されます。だから私は秒でストア時間にintを使用しています。
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;
}
私の実体:
$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);
HTML5入力タイプの時間を除いてすべてが機能しています
Drupalはhtml5の一部の入力を知っていますが、すべてではありません...タイプtel、電子メール、数値、範囲、色、日付、日時はOKですが、タイプタイムだけではありません。
だから私はカスタムプラグインでそれを手に入れたいと思っていましたが...
編集1
私が見つけた唯一の方法は、このタイプの2つの選択を作成することです。
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;
}
これについて何か考えはありますか?
このようなフィールドタイプが必要です。githubまたは他の場所でコードを共有できますか?
—
エイドリアンCid Almaguer、2017
drupal.org/project/time_fieldモジュールを使用できます。
—
ロダーコーダー2018