improvements-2.x-dev/modules/improvements_views/src/Plugin/views/field/Map.php
modules/improvements_views/src/Plugin/views/field/Map.php
<?php
namespace Drupal\improvements_views\Plugin\views\field;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Attribute\ViewsField;
use Drupal\views\Plugin\views\field\FieldPluginBase as ViewsFieldPluginBase;
use Drupal\views\ResultRow;
#[ViewsField('map')]
class Map extends ViewsFieldPluginBase {
/**
* {@inheritdoc}
*/
protected function defineOptions(): array {
$options = parent::defineOptions();
$options['path'] = ['default' => ''];
return $options;
}
/**
* {@inheritdoc}
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state): void {
parent::buildOptionsForm($form, $form_state);
$form['path'] = [
'#type' => 'textfield',
'#title' => $this->t('Array path'),
'#description' => $this->t('Example "path.to.value" Equivalent to $array[\'path\'][\'to\'][\'value\'].'),
'#required' => TRUE,
'#default_value' => $this->options['path'],
];
}
/**
* {@inheritdoc}
*/
public function render(ResultRow $values) {
if ($value = $values->{$this->field_alias}) {
$value = unserialize($value);
$parents = explode('.', $this->options['path']);
return NestedArray::getValue($value, $parents);
}
return NULL;
}
}
