Skip to content
Snippets Groups Projects

Output referenced entity (e.g. term) in same language as referencer.

All threads resolved!
Files
3
@@ -2,6 +2,7 @@
namespace Drupal\custom_elements\Processor;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException;
use Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface;
use Drupal\Core\Field\FieldItemInterface;
@@ -17,6 +18,21 @@ class DefaultFieldItemProcessor implements CustomElementProcessorInterface {
use CustomElementsProcessorFieldUtilsTrait;
/**
* The entity repository.
*/
protected EntityRepositoryInterface $entityRepository;
/**
* CustomElementGenerator constructor.
*
* @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
* The entity repository.
*/
public function __construct(EntityRepositoryInterface $entity_repository) {
$this->entityRepository = $entity_repository;
}
/**
* {@inheritdoc}
*/
@@ -42,16 +58,19 @@ class DefaultFieldItemProcessor implements CustomElementProcessorInterface {
// accessible and linkable.
if (($property->getTargetDefinition() instanceof EntityDataDefinitionInterface
&& $property->getTarget() && $entity = $property->getTarget()->getValue())
&& $this->entityIsAccessible($entity, $element) && $url = $entity->toUrl()) {
$nested_element = new CustomElement();
$nested_element->setTag('a');
$generated_url = $url->toString(TRUE);
$nested_element->addCacheableDependency($generated_url);
$nested_element->setAttribute('href', $generated_url->getGeneratedUrl());
$nested_element->setAttribute('type', $entity->getEntityTypeId());
$nested_element->setSlot('default', $entity->label());
$nested_element->addCacheableDependency($entity);
$element->setSlotFromCustomElement($name, $nested_element);
&& $this->entityIsAccessible($entity, $element)) {
$entity = $this->entityRepository->getTranslationFromContext($entity) ?? $entity;
if ($url = $entity->toUrl()) {
$nested_element = new CustomElement();
$nested_element->setTag('a');
$generated_url = $url->toString(TRUE);
$nested_element->addCacheableDependency($generated_url);
$nested_element->setAttribute('href', $generated_url->getGeneratedUrl());
$nested_element->setAttribute('type', $entity->getEntityTypeId());
$nested_element->setSlot('default', $entity->label());
$nested_element->addCacheableDependency($entity);
$element->setSlotFromCustomElement($name, $nested_element);
}
}
}
catch (UndefinedLinkTemplateException $exception) {
Loading