class TelephoneLinkFormatter
Same name and namespace in other branches
- 11.x core/modules/telephone/src/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php \Drupal\telephone\Plugin\Field\FieldFormatter\TelephoneLinkFormatter
Plugin implementation of the 'telephone_link' formatter.
Plugin annotation
@FieldFormatter(
id = "telephone_link",
label = @Translation("Telephone link"),
field_types = {
"telephone"
}
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait implements \Drupal\Component\Plugin\PluginBase
- class \Drupal\Core\Field\PluginSettingsBase extends \Drupal\Core\Field\PluginSettingsInterface, \Drupal\Component\Plugin\DependentPluginInterface implements \Drupal\Core\Plugin\PluginBase
- class \Drupal\Core\Field\FormatterBase extends \Drupal\Core\Field\FormatterInterface, \Drupal\Core\Plugin\ContainerFactoryPluginInterface implements \Drupal\Core\Field\PluginSettingsBase
- class \Drupal\telephone\Plugin\Field\FieldFormatter\TelephoneLinkFormatter implements \Drupal\Core\Field\FormatterBase
- class \Drupal\Core\Field\FormatterBase extends \Drupal\Core\Field\FormatterInterface, \Drupal\Core\Plugin\ContainerFactoryPluginInterface implements \Drupal\Core\Field\PluginSettingsBase
- class \Drupal\Core\Field\PluginSettingsBase extends \Drupal\Core\Field\PluginSettingsInterface, \Drupal\Component\Plugin\DependentPluginInterface implements \Drupal\Core\Plugin\PluginBase
- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait implements \Drupal\Component\Plugin\PluginBase
Expanded class hierarchy of TelephoneLinkFormatter
File
-
core/
modules/ telephone/ src/ Plugin/ Field/ FieldFormatter/ TelephoneLinkFormatter.php, line 21
Namespace
Drupal\telephone\Plugin\Field\FieldFormatterView source
class TelephoneLinkFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return [
'title' => '',
] + parent::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$elements['title'] = [
'#type' => 'textfield',
'#title' => $this->t('Title to replace basic numeric telephone number display'),
'#default_value' => $this->getSetting('title'),
];
return $elements;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = [];
$settings = $this->getSettings();
if (!empty($settings['title'])) {
$summary[] = $this->t('Link using text: @title', [
'@title' => $settings['title'],
]);
}
else {
$summary[] = $this->t('Link using provided telephone number.');
}
return $summary;
}
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) {
$element = [];
$title_setting = $this->getSetting('title');
foreach ($items as $delta => $item) {
// If the telephone number is 5 or less digits, parse_url() will think
// it's a port number rather than a phone number which causes the link
// formatter to throw an InvalidArgumentException. Avoid this by inserting
// a dash (-) after the first digit - RFC 3966 defines the dash as a
// visual separator character and so will be removed before the phone
// number is used. See https://bugs.php.net/bug.php?id=70588 for more.
// While the bug states this only applies to numbers <= 65535, a 5 digit
// number greater than 65535 will cause parse_url() to return FALSE so
// we need the work around on any 5 digit (or less) number.
// First we strip whitespace so we're counting actual digits.
$phone_number = preg_replace('/\\s+/', '', $item->value);
if (strlen($phone_number) <= 5) {
$phone_number = substr_replace($phone_number, '-', 1, 0);
}
// Render each element as link.
$element[$delta] = [
'#type' => 'link',
// Use custom title if available, otherwise use the telephone number
// itself as title.
'#title' => $title_setting ?: $item->value,
// Prepend 'tel:' to the telephone number.
'#url' => Url::fromUri('tel:' . rawurlencode($phone_number)),
'#options' => [
'external' => TRUE,
],
];
if (!empty($item->_attributes)) {
$element[$delta]['#options'] += [
'attributes' => [],
];
$element[$delta]['#options']['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;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
DependencySerializationTrait::$_entityStorages | protected | property | An array of entity type IDs keyed by the property name of their storages. | ||
DependencySerializationTrait::$_serviceIds | protected | property | An array of service IDs keyed by property name used for serialization. | ||
DependencySerializationTrait::__sleep | public | function | |||
DependencySerializationTrait::__wakeup | public | function | #[\ReturnTypeWillChange] | ||
FormatterBase::$fieldDefinition | protected | property | The field definition. | ||
FormatterBase::$label | protected | property | The label display setting. | ||
FormatterBase::$settings | protected | property | The formatter settings. | ||
FormatterBase::$viewMode | protected | property | The view mode. | ||
FormatterBase::create | public static | function | 3 | ||
FormatterBase::create | public static | function | 3 | ||
FormatterBase::getFieldSetting | protected | function | Returns the value of a field setting. | ||
FormatterBase::getFieldSettings | protected | function | Returns the array of field settings. | ||
FormatterBase::isApplicable | public static | function | 7 | ||
FormatterBase::isApplicable | public static | function | 7 | ||
FormatterBase::prepareView | public | function | 1 | ||
FormatterBase::prepareView | public | function | 1 | ||
FormatterBase::view | public | function | |||
FormatterBase::__construct | public | function | Constructs a FormatterBase object. | 3 | |
FormatterBase::__construct | public | function | Constructs a FormatterBase object. | 3 | |
MessengerTrait::$messenger | protected | property | The messenger. | 7 | |
MessengerTrait::$messenger | protected | property | The messenger. | 7 | |
MessengerTrait::messenger | public | function | Gets the messenger. | 7 | |
MessengerTrait::messenger | public | function | Gets the messenger. | 7 | |
MessengerTrait::setMessenger | public | function | Sets the messenger. | ||
PluginBase::$configuration | protected | property | Configuration information passed into the plugin. | ||
PluginBase::$pluginDefinition | protected | property | The plugin implementation definition. | ||
PluginBase::$pluginId | protected | property | The plugin_id. | ||
PluginBase::DERIVATIVE_SEPARATOR | constant | A string which is used to separate base plugin IDs from the derivative ID. | |||
PluginBase::getBaseId | public | function | |||
PluginBase::getDerivativeId | public | function | |||
PluginBase::getPluginDefinition | public | function | 1 | ||
PluginBase::getPluginDefinition | public | function | 1 | ||
PluginBase::getPluginId | public | function | |||
PluginBase::isConfigurable | public | function | Determines if the plugin is configurable. | ||
PluginSettingsBase::$defaultSettingsMerged | protected | property | Whether default settings have been merged into the current $settings. | ||
PluginSettingsBase::$thirdPartySettings | protected | property | The plugin settings injected by third party modules. | ||
PluginSettingsBase::calculateDependencies | public | function | 2 | ||
PluginSettingsBase::calculateDependencies | public | function | 2 | ||
PluginSettingsBase::getSetting | public | function | |||
PluginSettingsBase::getSettings | public | function | |||
PluginSettingsBase::getThirdPartyProviders | public | function | |||
PluginSettingsBase::getThirdPartySetting | public | function | |||
PluginSettingsBase::getThirdPartySettings | public | function | |||
PluginSettingsBase::mergeDefaults | protected | function | Merges default settings values into $settings. | ||
PluginSettingsBase::onDependencyRemoval | public | function | 1 | ||
PluginSettingsBase::onDependencyRemoval | public | function | 1 | ||
PluginSettingsBase::setSetting | public | function | |||
PluginSettingsBase::setSettings | public | function | |||
PluginSettingsBase::setThirdPartySetting | public | function | |||
PluginSettingsBase::unsetThirdPartySetting | public | function | |||
StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | ||
StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | ||
StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | ||
StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | ||
StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | ||
StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. | ||
TelephoneLinkFormatter::defaultSettings | public static | function | Defines the default settings for this plugin. | Overrides PluginSettingsBase::defaultSettings | |
TelephoneLinkFormatter::settingsForm | public | function | Returns a form to configure settings for the formatter. | Overrides FormatterBase::settingsForm | |
TelephoneLinkFormatter::settingsSummary | public | function | Returns a short summary for the current formatter settings. | Overrides FormatterBase::settingsSummary | |
TelephoneLinkFormatter::viewElements | public | function | Builds a renderable array for a field value. | Overrides FormatterInterface::viewElements |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.