You are here

protected function ViewfieldWidgetSelect::formMultipleElements in Viewfield 8.3

Special handling to create form elements for multiple values.

Handles generic features for multiple fields:

  • number of widgets
  • AHAH-'add more' button
  • table display and drag-n-drop value reordering

Overrides WidgetBase::formMultipleElements

File

src/Plugin/Field/FieldWidget/ViewfieldWidgetSelect.php, line 167

Class

ViewfieldWidgetSelect
Plugin implementation of the 'viewfield_select' widget.

Namespace

Drupal\viewfield\Plugin\Field\FieldWidget

Code

protected function formMultipleElements(FieldItemListInterface $items, array &$form, FormStateInterface $form_state) {
  $elements = parent::formMultipleElements($items, $form, $form_state);

  // Must always show fields on configuration form.
  if (!$this
    ->isDefaultValueWidget($form_state) && $this
    ->getFieldSetting('force_default')) {
    $elements['#access'] = FALSE;
  }
  $max_delta = $elements['#max_delta'];
  $is_multiple = $elements['#cardinality_multiple'];
  if ($is_multiple) {
    for ($delta = 0; $delta <= $max_delta; $delta++) {
      $element =& $elements[$delta];

      // Change title to 'View #'.
      $element['target_id']['#title'] = $this
        ->t('View @number', [
        '@number' => $delta + 1,
      ]);

      // Force title display.
      $element['target_id']['#title_display'] = 'before';
    }
  }
  else {

    // $max_delta == 0 for this case.
    $element =& $elements[0];

    // Change title to simply 'View'.
    $element['target_id']['#title'] = $this
      ->t('View');

    // Wrap single values in a fieldset unless on the default settings form,
    // as long as the field is visible (!force_default).
    if (!$this
      ->isDefaultValueWidget($form_state) && !$this
      ->getFieldSetting('force_default')) {
      $element += [
        '#type' => 'fieldset',
        '#title' => $this->fieldDefinition
          ->getLabel(),
      ];
    }
  }
  return $elements;
}