Repository URL to install this package:
|
Version:
2.0.1 ▾
|
novicell/dds_dynamic_key_value
/
src
/
Plugin
/
Field
/
FieldFormatter
/
DynamicKeyValueTableFormatter.php
|
|---|
<?php
namespace Drupal\dds_dynamic_key_value\Plugin\Field\FieldFormatter;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Plugin implementation of the 'key_value' table formatter.
*
* @FieldFormatter(
* id = "dynamic_key_value_table_formatter",
* label = @Translation("Table"),
* field_types = {
* "yml_config"
* }
* )
*/
class DynamicKeyValueTableFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return [
'key_label' => t('Key'),
'value_label' => t('Value'),
'display_labels' => TRUE,
] + parent::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$elements = [
'display_labels' => [
'#type' => 'checkbox',
'#title' => t('Display labels'),
'#default_value' => $this->getSetting('display_labels'),
],
'key_label' => [
'#type' => 'textfield',
'#title' => t('Key display label'),
'#default_value' => $this->getSetting('key_label'),
],
'value_label' => [
'#type' => 'textfield',
'#title' => t('Value display label'),
'#default_value' => $this->getSetting('value_label'),
],
];
return $elements;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = [];
$summary[] = t('Display Labels: @display', [
'@display' => $this->getSetting('display_labels')? t('yes') : t('no'),
]);
$summary[] = t('Key Display Label: @key_label', [
'@key_label' => $this->getSetting('key_label'),
]);
$summary[] = t('Value Display Label: @value_label', [
'@value_label' => $this->getSetting('value_label'),
]);
return $summary;
}
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) {
$key_values = [];
foreach ($items as $delta => $item) {
$key_values[] = [
'key' => $item->key,
'value' => $item->value,
];
}
return [
'#theme' => 'key_value_table',
'#key_values' => $key_values,
'#display_labels' => $this->getSetting('display_labels'),
'#key_label' => $this->getSetting('key_label'),
'#value_label' => $this->getSetting('value_label'),
];
}
}