Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 36 |
LinkSeparateFormatter | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
72 | |
0.00% |
0 / 36 |
defaultSettings | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
viewElements | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 30 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\link\Plugin\Field\FieldFormatter\LinkSeparateFormatter. | |
* | |
* @todo | |
* Merge into 'link' formatter once there is a #type like 'item' that | |
* can render a compound label and content outside of a form context. | |
* @see https://www.drupal.org/node/1829202 | |
*/ | |
namespace Drupal\link\Plugin\Field\FieldFormatter; | |
use Drupal\Component\Utility\Unicode; | |
use Drupal\Core\Field\FieldItemListInterface; | |
/** | |
* Plugin implementation of the 'link_separate' formatter. | |
* | |
* @FieldFormatter( | |
* id = "link_separate", | |
* label = @Translation("Separate link text and URL"), | |
* field_types = { | |
* "link" | |
* } | |
* ) | |
*/ | |
class LinkSeparateFormatter extends LinkFormatter { | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function defaultSettings() { | |
return array( | |
'trim_length' => 80, | |
'rel' => '', | |
'target' => '', | |
) + parent::defaultSettings(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function viewElements(FieldItemListInterface $items, $langcode) { | |
$element = array(); | |
$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 = Unicode::truncate($link_title, $settings['trim_length'], FALSE, TRUE); | |
$url_title = Unicode::truncate($url_title, $settings['trim_length'], FALSE, TRUE); | |
} | |
$element[$delta] = array( | |
'#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; | |
} | |
} | |