class EntityLinks
Provides the Entity Links filter.
Attributes
#[Filter(id: 'entity_links', title: new TranslatableMarkup('Entity links'), type: FilterInterface::TYPE_TRANSFORM_REVERSIBLE, description: new TranslatableMarkup('Updates entity links with <code>data-entity-type</code> and <code>data-entity-uuid</code> attributes to point to the latest entity URL aliases.'))]
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\DependencyInjection\AutowiredInstanceTrait, \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait extends \Drupal\Component\Plugin\PluginBase
- class \Drupal\filter\Plugin\FilterBase implements \Drupal\filter\Plugin\FilterInterface extends \Drupal\Core\Plugin\PluginBase
- class \Drupal\filter\Plugin\Filter\EntityLinks implements \Drupal\Core\Plugin\ContainerFactoryPluginInterface extends \Drupal\filter\Plugin\FilterBase
- class \Drupal\filter\Plugin\FilterBase implements \Drupal\filter\Plugin\FilterInterface extends \Drupal\Core\Plugin\PluginBase
- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\DependencyInjection\AutowiredInstanceTrait, \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait extends \Drupal\Component\Plugin\PluginBase
Expanded class hierarchy of EntityLinks
1 file declares its use of EntityLinks
- EntityLinksTest.php in core/
modules/ filter/ tests/ src/ Kernel/ EntityLinksTest.php
File
-
core/
modules/ filter/ src/ Plugin/ Filter/ EntityLinks.php, line 23
Namespace
Drupal\filter\Plugin\FilterView source
class EntityLinks extends FilterBase implements ContainerFactoryPluginInterface {
/**
* Constructs a EntityLinks object.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, protected readonly EntityRepositoryInterface $entityRepository) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
}
/**
* {@inheritdoc}
*/
public function process($text, $langcode) : FilterProcessResult {
$result = new FilterProcessResult($text);
if (!str_contains($text, 'data-entity-type') && !str_contains($text, 'data-entity-uuid')) {
return $result;
}
$dom = Html::load($text);
$xpath = new \DOMXPath($dom);
// Note: this filter only processes links (<a href>) to Files, not
// tags with a File as a source (e.g. <img src>).
// @see \Drupal\editor\Plugin\Filter\EditorFileReference
foreach ($xpath->query('//a[@data-entity-type and @data-entity-uuid]') as $element) {
/** @var \DOMElement $element */
try {
// Load the appropriate translation of the linked entity.
$entity_type = $element->getAttribute('data-entity-type');
$uuid = $element->getAttribute('data-entity-uuid');
// Skip empty attributes to prevent loading of non-existing
// content type.
if ($entity_type === '' || $uuid === '') {
continue;
}
$entity = $this->entityRepository
->loadEntityByUuid($entity_type, $uuid);
if ($entity) {
// @todo Consider using \Drupal\Core\Entity\EntityRepositoryInterface::getTranslationFromContext() after https://drupal.org/i/3061761 is fixed.
if ($entity instanceof TranslatableInterface && $entity->hasTranslation($langcode)) {
$entity = $entity->getTranslation($langcode);
}
$url = $this->getUrl($entity);
// Parse link href as URL, extract query and fragment from it.
$href_url = parse_url($element->getAttribute('href'));
$anchor = empty($href_url["fragment"]) ? '' : '#' . $href_url["fragment"];
$query = empty($href_url["query"]) ? '' : '?' . $href_url["query"];
$element->setAttribute('href', $url->getGeneratedUrl() . $query . $anchor);
// The processed text now depends on:
$result->addCacheableDependency($url)
->addCacheableDependency($entity);
}
$element->removeAttribute('data-entity-type');
$element->removeAttribute('data-entity-uuid');
$element->removeAttribute('data-entity-metadata');
} catch (\Exception $e) {
Error::logException('filter', $e);
}
}
$result->setProcessedText(Html::serialize($dom));
return $result;
}
/**
* Gets the generated URL object for a linked entity.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* A linked entity.
*
* @return \Drupal\Core\GeneratedUrl
* The generated URL plus cacheability metadata.
*/
protected static function getUrl(EntityInterface $entity) : GeneratedUrl {
if ($link_target_handler = $entity->getEntityType()
->getHandlerClass('link_target', 'view')) {
return (new $link_target_handler())->getLinkTarget($entity);
}
return $entity->toUrl()
->toString(TRUE);
}
}
Members
| Title Sort descending | Deprecated | Modifiers | Object type | Summary | Overriden Title | Overrides |
|---|---|---|---|---|---|---|
| AutowiredInstanceTrait::createInstanceAutowired | public static | function | Instantiates a new instance of the implementing class using autowiring. | |||
| DependencySerializationTrait::$_entityStorages | protected | property | An array of entity type IDs keyed by the property name of their storages. | |||
| DependencySerializationTrait::$_serviceIds | protected | property | An array of service IDs keyed by property name used for serialization. | |||
| DependencySerializationTrait::__sleep | public | function | 2 | |||
| DependencySerializationTrait::__wakeup | public | function | 2 | |||
| EntityLinks::getUrl | protected static | function | Gets the generated URL object for a linked entity. | |||
| EntityLinks::process | public | function | Performs the filter processing. | Overrides FilterInterface::process | ||
| EntityLinks::__construct | public | function | Constructs a EntityLinks object. | Overrides FilterBase::__construct | ||
| FilterBase::$provider | public | property | The name of the provider that owns this filter. | |||
| FilterBase::$settings | public | property | An associative array containing the configured settings of this filter. | |||
| FilterBase::$status | public | property | A Boolean indicating whether this filter is enabled. | |||
| FilterBase::$weight | public | property | The weight of this filter compared to others in a filter collection. | |||
| FilterBase::calculateDependencies | public | function | Calculates dependencies for the configured plugin. | Overrides DependentPluginInterface::calculateDependencies | 1 | |
| FilterBase::defaultConfiguration | public | function | Gets default configuration for this plugin. | Overrides ConfigurableInterface::defaultConfiguration | ||
| FilterBase::getConfiguration | public | function | Gets this plugin's configuration. | Overrides ConfigurableInterface::getConfiguration | ||
| FilterBase::getDescription | public | function | Returns the administrative description for this filter plugin. | Overrides FilterInterface::getDescription | ||
| FilterBase::getHTMLRestrictions | public | function | Returns HTML allowed by this filter's configuration. | Overrides FilterInterface::getHTMLRestrictions | 4 | |
| FilterBase::getLabel | public | function | Returns the administrative label for this filter plugin. | Overrides FilterInterface::getLabel | ||
| FilterBase::getType | public | function | Returns the processing type of this filter plugin. | Overrides FilterInterface::getType | ||
| FilterBase::prepare | public | function | Prepares the text for processing. | Overrides FilterInterface::prepare | ||
| FilterBase::setConfiguration | public | function | Sets the configuration for this plugin instance. | Overrides ConfigurableInterface::setConfiguration | 1 | |
| FilterBase::settingsForm | public | function | Generates a filter's settings form. | Overrides FilterInterface::settingsForm | 3 | |
| FilterBase::tips | public | function | Generates a filter's tip. | Overrides FilterInterface::tips | 9 | |
| FilterInterface::TYPE_HTML_RESTRICTOR | constant | HTML tag and attribute restricting filters to prevent XSS attacks. | ||||
| FilterInterface::TYPE_MARKUP_LANGUAGE | constant | Non-HTML markup language filters that generate HTML. | ||||
| FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE | constant | Irreversible transformation filters. | ||||
| FilterInterface::TYPE_TRANSFORM_REVERSIBLE | constant | Reversible transformation filters. | ||||
| MessengerTrait::$messenger | protected | property | The messenger. | 27 | ||
| MessengerTrait::messenger | public | function | Gets the messenger. | 27 | ||
| MessengerTrait::setMessenger | public | function | Sets the messenger. | |||
| PluginBase::$configuration | protected | property | Configuration information passed into the plugin. | 1 | ||
| PluginBase::$pluginDefinition | protected | property | The plugin implementation definition. | 1 | ||
| PluginBase::$pluginId | protected | property | The plugin ID. | |||
| PluginBase::create | public static | function | Instantiates a new instance of the implementing class using autowiring. | 64 | ||
| PluginBase::DERIVATIVE_SEPARATOR | constant | A string which is used to separate base plugin IDs from the derivative ID. | ||||
| PluginBase::getBaseId | public | function | Gets the base_plugin_id of the plugin instance. | Overrides DerivativeInspectionInterface::getBaseId | ||
| PluginBase::getDerivativeId | public | function | Gets the derivative_id of the plugin instance. | Overrides DerivativeInspectionInterface::getDerivativeId | ||
| PluginBase::getPluginDefinition | public | function | Gets the definition of the plugin implementation. | Overrides PluginInspectionInterface::getPluginDefinition | 2 | |
| PluginBase::getPluginId | public | function | Gets the plugin ID of the plugin instance. | Overrides PluginInspectionInterface::getPluginId | ||
| PluginBase::isConfigurable | Deprecated | public | function | Determines if the plugin is configurable. | ||
| StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | 3 | ||
| StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | |||
| StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | |||
| StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | |||
| StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | 2 | ||
| StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. | 1 |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.