3 namespace Drupal\{{ machine_name }}\Plugin\Field\FieldWidget;
7 use Drupal\Core\Datetime\DrupalDateTime;
9 use Drupal\Core\Field\FieldItemListInterface;
10 use Drupal\Core\Field\WidgetBase;
11 use Drupal\Core\Form\FormStateInterface;
12 use Symfony\Component\Validator\ConstraintViolationInterface;
14 use Drupal\{{ machine_name }}\Plugin\Field\FieldType\{{ type_class }};
19 * Defines the '{{ field_id }}' field widget.
22 * id = "{{ field_id }}",
23 * label = @Translation("{{ field_label }}"),
24 * field_types = {"{{ field_id }}"},
27 class {{ widget_class }} extends WidgetBase {
29 {% if widget_settings %}
33 public static function defaultSettings() {
34 return ['foo' => 'bar'] + parent::defaultSettings();
40 public function settingsForm(array $form, FormStateInterface $form_state) {
41 $settings = $this->getSettings();
43 '#type' => 'textfield',
44 '#title' => $this->t('Foo'),
45 '#default_value' => $settings['foo'],
53 public function settingsSummary() {
54 $settings = $this->getSettings();
55 $summary[] = $this->t('Foo: @foo', ['@foo' => $settings['foo']]);
63 public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
65 {% for subfield in subfields %}
66 {% set title %}'#title' => $this->t('{{ subfield.name }}'),{% endset %}
67 {% set default_value %}'#default_value' => isset($items[$delta]->{{ subfield.machine_name }}) ? $items[$delta]->{{ subfield.machine_name }} : NULL,{% endset %}
68 {% set size %}'#size' => 20,{% endset %}
69 {% if subfield.list %}
70 $element['{{ subfield.machine_name }}'] = [
73 '#options' => ['' => $this->t('- {{ subfield.required ? 'Select a value' : 'None' }} -')] + {{ type_class }}::{{ subfield.allowed_values_method }}(),
77 {% if subfield.type == 'boolean' %}
78 $element['{{ subfield.machine_name }}'] = [
79 '#type' => 'checkbox',
83 {% elseif subfield.type == 'string' %}
84 $element['{{ subfield.machine_name }}'] = [
85 '#type' => 'textfield',
92 {% elseif subfield.type == 'text' %}
93 $element['{{ subfield.machine_name }}'] = [
94 '#type' => 'textarea',
98 {% elseif subfield.type == 'integer' %}
99 $element['{{ subfield.machine_name }}'] = [
104 {% elseif subfield.type == 'float' %}
105 $element['{{ subfield.machine_name }}'] = [
111 {% elseif subfield.type == 'numeric' %}
112 $element['{{ subfield.machine_name }}'] = [
118 {% elseif subfield.type == 'email' %}
119 $element['{{ subfield.machine_name }}'] = [
127 {% elseif subfield.type == 'telephone' %}
128 $element['{{ subfield.machine_name }}'] = [
136 {% elseif subfield.type == 'uri' %}
137 $element['{{ subfield.machine_name }}'] = [
145 {% elseif subfield.type == 'datetime' %}
146 $element['{{ subfield.machine_name }}'] = [
147 '#type' => 'datetime',
149 '#default_value' => NULL,
150 {% if subfield.date_type == 'date' %}
151 '#date_time_element' => 'none',
152 '#date_time_format' => '',
155 if (isset($items[$delta]->{{ subfield.machine_name }})) {
156 $element['{{ subfield.machine_name }}']['#default_value'] = DrupalDateTime::createFromFormat(
157 '{{ subfield.date_storage_format }}',
158 $items[$delta]->{{ subfield.machine_name }},
166 $element['#theme_wrappers'] = ['container', 'form_element'];
168 $element['#attributes']['class'][] = 'container-inline';
170 $element['#attributes']['class'][] = '{{ field_id|u2h }}-elements';
171 $element['#attached']['library'][] = '{{ machine_name }}/{{ field_id }}';
179 public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, FormStateInterface $form_state) {
180 return isset($violation->arrayPropertyPath[0]) ? $element[$violation->arrayPropertyPath[0]] : $element;
186 public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
187 foreach ($values as $delta => $value) {
188 {% for subfield in subfields %}
189 if ($value['{{ subfield.machine_name }}'] === '') {
190 $values[$delta]['{{ subfield.machine_name }}'] = NULL;
192 {% if subfield.type == 'datetime' %}
193 if ($value['{{ subfield.machine_name }}'] instanceof DrupalDateTime) {
194 $values[$delta]['{{ subfield.machine_name }}'] = $value['{{ subfield.machine_name }}']->format('{{ subfield.date_storage_format }}');