View source
<?php
namespace Drupal\fixed_text_link_formatter\Plugin\Field\FieldFormatter;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\link\Plugin\Field\FieldFormatter\LinkFormatter;
class FixedTextLink extends LinkFormatter {
public static function defaultSettings() {
return array(
'trim_length' => '',
'link_text' => 'View website',
'link_class' => '',
'allow_override' => FALSE,
) + parent::defaultSettings();
}
public function settingsForm(array $parentForm, FormStateInterface $form_state) {
$parentForm = parent::settingsForm($parentForm, $form_state);
unset($parentForm['trim_length']);
unset($parentForm['url_only']);
unset($parentForm['url_plain']);
$form['link_text'] = [
'#type' => 'textfield',
'#title' => $this
->t('Link text'),
'#default_value' => $this
->getLinkText(),
'#required' => TRUE,
];
$form['link_class'] = [
'#type' => 'textfield',
'#title' => $this
->t('Link class'),
'#default_value' => $this
->getLinkClass(),
'#required' => FALSE,
];
$form['allow_override'] = [
'#type' => 'checkbox',
'#title' => $this
->t("Allow the title to be overridden"),
'#default_value' => $this
->getSetting('allow_override'),
];
return $form + $parentForm;
}
public function settingsSummary() {
$settings = $this
->getSettings();
$summary[] = $this
->t('Link text: @text', [
'@text' => $this
->getLinkText(),
]);
if (!empty($settings['link_class'])) {
$summary[] = $this
->t('Link class: @text', [
'@text' => $this
->getLinkClass(),
]);
}
if (!empty($settings['rel'])) {
$summary[] = $this
->t('Add rel="@rel"', [
'@rel' => $settings['rel'],
]);
}
if (!empty($settings['target'])) {
$summary[] = $this
->t('Open link in new window');
}
if ($this
->getSetting('allow_override')) {
$summary[] = $this
->t('Link text can be overridden');
}
return $summary;
}
public function viewElements(FieldItemListInterface $items, $langcode) {
foreach ($items as $item) {
$allowOverride = (bool) $this
->getSetting('allow_override');
$shouldOverride = $allowOverride && $item
->get('title')
->getString() === '';
if (!$allowOverride || $shouldOverride) {
$item
->set('title', $this
->getLinkText());
}
}
$elements = parent::viewElements($items, $langcode);
foreach ($elements as &$element) {
$element['#options']['attributes']['class'][] = $this
->getLinkClass();
}
return $elements;
}
private function getLinkText() {
return $this
->getSettings()['link_text'];
}
private function getLinkClass() {
return $this
->getSettings()['link_class'];
}
}