entityManager = $manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('entity.manager') ); } /** * {@inheritdoc} */ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) { parent::init($view, $display, $options); $this->additional_fields[$this->definition['entity type field']] = $this->definition['entity type field']; } /** * {@inheritdoc} */ protected function defineOptions() { $options = parent::defineOptions(); $options['link_to_entity'] = ['default' => FALSE]; return $options; } /** * {@inheritdoc} */ public function buildOptionsForm(&$form, FormStateInterface $form_state) { $form['link_to_entity'] = [ '#title' => $this->t('Link to entity'), '#description' => $this->t('Make entity label a link to entity page.'), '#type' => 'checkbox', '#default_value' => !empty($this->options['link_to_entity']), ]; parent::buildOptionsForm($form, $form_state); } /** * {@inheritdoc} */ public function render(ResultRow $values) { $type = $this->getValue($values, $this->definition['entity type field']); $value = $this->getValue($values); if (empty($this->loadedReferencers[$type][$value])) { return; } /** @var $entity \Drupal\Core\Entity\EntityInterface */ $entity = $this->loadedReferencers[$type][$value]; if (!empty($this->options['link_to_entity'])) { try { $this->options['alter']['url'] = $entity->toUrl(); $this->options['alter']['make_link'] = TRUE; } catch (UndefinedLinkTemplateException $e) { $this->options['alter']['make_link'] = FALSE; } catch (EntityMalformedException $e) { $this->options['alter']['make_link'] = FALSE; } } return $this->sanitizeValue($entity->label()); } /** * {@inheritdoc} */ public function preRender(&$values) { parent::preRender($values); $entity_ids_per_type = []; foreach ($values as $value) { if ($type = $this->getValue($value, 'type')) { $entity_ids_per_type[$type][] = $this->getValue($value); } } foreach ($entity_ids_per_type as $type => $ids) { $this->loadedReferencers[$type] = $this->entityManager->getStorage($type)->loadMultiple($ids); } } }