function LinkSeparateFormatter::viewElements

Same name and namespace in other branches
  1. 8.9.x core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php \Drupal\link\Plugin\Field\FieldFormatter\LinkSeparateFormatter::viewElements()
  2. 10 core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php \Drupal\link\Plugin\Field\FieldFormatter\LinkSeparateFormatter::viewElements()
  3. 11.x core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php \Drupal\link\Plugin\Field\FieldFormatter\LinkSeparateFormatter::viewElements()

Overrides LinkFormatter::viewElements

File

core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php, line 39

Class

LinkSeparateFormatter
Plugin implementation of the 'link_separate' formatter.

Namespace

Drupal\link\Plugin\Field\FieldFormatter

Code

public function viewElements(FieldItemListInterface $items, $langcode) {
    $element = [];
    $entity = $items->getEntity();
    $settings = $this->getSettings();
    foreach ($items as $delta => $item) {
        // By default use the full URL as the link text.
        $url = $this->buildUrl($item);
        $link_title = $url->toString();
        // If the link text field value is available, use it for the text.
        if (empty($settings['url_only']) && !empty($item->title)) {
            // Unsanitized token replacement here because the entire link title
            // gets auto-escaped during link generation in
            // \Drupal\Core\Utility\LinkGenerator::generate().
            $link_title = \Drupal::token()->replace($item->title, [
                $entity->getEntityTypeId() => $entity,
            ], [
                'clear' => TRUE,
            ]);
        }
        // The link_separate formatter has two titles; the link text (as in the
        // field values) and the URL itself. If there is no link text value,
        // $link_title defaults to the URL, so it needs to be unset.
        // The URL version may need to be trimmed as well.
        if (empty($item->title)) {
            $link_title = NULL;
        }
        $url_title = $url->toString();
        if (!empty($settings['trim_length'])) {
            $link_title = $link_title !== NULL ? Unicode::truncate($link_title, $settings['trim_length'], FALSE, TRUE) : NULL;
            $url_title = Unicode::truncate($url_title, $settings['trim_length'], FALSE, TRUE);
        }
        $element[$delta] = [
            '#theme' => 'link_formatter_link_separate',
            '#title' => $link_title,
            '#url_title' => $url_title,
            '#url' => $url,
        ];
        if (!empty($item->_attributes)) {
            // Set our RDFa attributes on the <a> element that is being built.
            $url->setOption('attributes', $item->_attributes);
            // Unset field item attributes since they have been included in the
            // formatter output and should not be rendered in the field template.
            unset($item->_attributes);
        }
    }
    return $element;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.