public function FontAwesomeIconFormatter::viewElements in Font Awesome Icons 8.2
Builds a renderable array for a field value.
Parameters
\Drupal\Core\Field\FieldItemListInterface $items: The field values to be rendered.
string $langcode: The language that should be used to render the field.
Return value
array A renderable array for $items, as an array of child elements keyed by consecutive numeric indexes starting from 0.
Overrides FormatterInterface::viewElements
File
- src/
Plugin/ Field/ FieldFormatter/ FontAwesomeIconFormatter.php, line 112
Class
- FontAwesomeIconFormatter
- Implementation of Font Awesome icon formatter.
Namespace
Drupal\fontawesome\Plugin\Field\FieldFormatterCode
public function viewElements(FieldItemListInterface $items, $langcode) {
// Early opt-out if the field is empty.
if (count($items) <= 0) {
return [];
}
// Load the configuration settings.
$configurationSettings = $this->configFactory
->get('fontawesome.settings');
// Loop over each icon and build data.
$icons = [];
foreach ($items as $item) {
// Get the icon settings.
$iconSettings = unserialize($item
->get('settings')
->getValue());
$cssStyles = [];
// Format mask.
$iconMask = '';
if (!empty($iconSettings['masking']['mask'])) {
$iconMask = $iconSettings['masking']['style'] . ' fa-' . $iconSettings['masking']['mask'];
}
unset($iconSettings['masking']);
// Format power transforms.
$iconTransforms = [];
$powerTransforms = $iconSettings['power_transforms'];
foreach ($powerTransforms as $transform) {
if (!empty($transform['type'])) {
$iconTransforms[] = $transform['type'] . '-' . $transform['value'];
}
}
unset($iconSettings['power_transforms']);
// Move duotone settings into the render.
if (isset($iconSettings['duotone'])) {
// Handle swap opacity flag.
if (!empty($iconSettings['duotone']['swap-opacity'])) {
$iconSettings['swap-opacity'] = $iconSettings['duotone']['swap-opacity'];
}
// Handle custom CSS styles.
if (!empty($iconSettings['duotone']['opacity']['primary'])) {
$cssStyles[] = '--fa-primary-opacity: ' . $iconSettings['duotone']['opacity']['primary'] . ';';
}
if (!empty($iconSettings['duotone']['opacity']['secondary'])) {
$cssStyles[] = '--fa-secondary-opacity: ' . $iconSettings['duotone']['opacity']['secondary'] . ';';
}
if (!empty($iconSettings['duotone']['color']['primary'])) {
$cssStyles[] = '--fa-primary-color: ' . $iconSettings['duotone']['color']['primary'] . ';';
}
if (!empty($iconSettings['duotone']['color']['secondary'])) {
$cssStyles[] = '--fa-secondary-color: ' . $iconSettings['duotone']['color']['secondary'] . ';';
}
unset($iconSettings['duotone']);
}
// Add additional CSS styles if needed.
if (isset($iconSettings['additional_classes'])) {
$cssStyles[] = $iconSettings['additional_classes'];
}
$icons[] = [
'#theme' => 'fontawesomeicon',
'#tag' => $configurationSettings
->get('tag'),
'#name' => 'fa-' . $item
->get('icon_name')
->getValue(),
'#style' => $item
->get('style')
->getValue(),
'#settings' => implode(' ', array_filter($iconSettings)),
'#transforms' => implode(' ', $iconTransforms),
'#mask' => $iconMask,
'#css' => implode(' ', $cssStyles),
];
}
// Get the icon settings.
$settings = $this
->getSettings();
return [
[
'#theme' => 'fontawesomeicons',
'#icons' => $icons,
'#layers' => $settings['layers'],
],
];
}