class EntityUrlGenerator in Simple XML sitemap 8.2
Same name and namespace in other branches
- 8.3 src/Plugin/simple_sitemap/UrlGenerator/EntityUrlGenerator.php \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator\EntityUrlGenerator
- 4.x src/Plugin/simple_sitemap/UrlGenerator/EntityUrlGenerator.php \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator\EntityUrlGenerator
Class EntityUrlGenerator @package Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator
Plugin annotation
@UrlGenerator(
id = "entity",
title = @Translation("Entity URL generator"),
description = @Translation("Generates URLs for entity bundles and bundle overrides."),
weight = 10,
settings = {
"instantiate_for_each_data_set" = true,
},
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\simple_sitemap\Plugin\simple_sitemap\SimplesitemapPluginBase implements PluginInspectionInterface, ContainerFactoryPluginInterface
- class \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGeneratorPluginBase implements ConfigurablePluginInterface
- class \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator\UrlGeneratorBase implements UrlGeneratorInterface
- class \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator\EntityUrlGenerator
- class \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator\UrlGeneratorBase implements UrlGeneratorInterface
- class \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGeneratorPluginBase implements ConfigurablePluginInterface
- class \Drupal\simple_sitemap\Plugin\simple_sitemap\SimplesitemapPluginBase implements PluginInspectionInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of EntityUrlGenerator
File
- src/
Plugin/ simple_sitemap/ UrlGenerator/ EntityUrlGenerator.php, line 27
Namespace
Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGeneratorView source
class EntityUrlGenerator extends UrlGeneratorBase {
/**
* @var \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator\UrlGeneratorManager
*/
protected $urlGeneratorManager;
/**
* EntityMenuLinkContentUrlGenerator constructor.
* @param array $configuration
* @param string $plugin_id
* @param mixed $plugin_definition
* @param \Drupal\simple_sitemap\Simplesitemap $generator
* @param \Drupal\simple_sitemap\SitemapGenerator $sitemap_generator
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* @param \Drupal\simple_sitemap\Logger $logger
* @param \Drupal\simple_sitemap\EntityHelper $entityHelper
* @param \Drupal\simple_sitemap\Plugin\simple_sitemap\UrlGenerator\UrlGeneratorManager $url_generator_manager
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, Simplesitemap $generator, SitemapGenerator $sitemap_generator, LanguageManagerInterface $language_manager, EntityTypeManagerInterface $entity_type_manager, Logger $logger, EntityHelper $entityHelper, UrlGeneratorManager $url_generator_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $generator, $sitemap_generator, $language_manager, $entity_type_manager, $logger, $entityHelper);
$this->urlGeneratorManager = $url_generator_manager;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('simple_sitemap.generator'), $container
->get('simple_sitemap.sitemap_generator'), $container
->get('language_manager'), $container
->get('entity_type.manager'), $container
->get('simple_sitemap.logger'), $container
->get('simple_sitemap.entity_helper'), $container
->get('plugin.manager.simple_sitemap.url_generator'));
}
/**
* @inheritdoc
*/
public function getDataSets() {
$data_sets = [];
$sitemap_entity_types = $this->entityHelper
->getSupportedEntityTypes();
foreach ($this->generator
->getBundleSettings() as $entity_type_name => $bundles) {
if (isset($sitemap_entity_types[$entity_type_name])) {
// Skip this entity type if another plugin is written to override its generation.
foreach ($this->urlGeneratorManager
->getDefinitions() as $plugin) {
if ($plugin['enabled'] && !empty($plugin['settings']['overrides_entity_type']) && $plugin['settings']['overrides_entity_type'] === $entity_type_name) {
continue 2;
}
}
foreach ($bundles as $bundle_name => $bundle_settings) {
if ($bundle_settings['index']) {
$data_sets[] = [
'bundle_settings' => $bundle_settings,
'bundle_name' => $bundle_name,
'entity_type_name' => $entity_type_name,
'keys' => $sitemap_entity_types[$entity_type_name]
->getKeys(),
];
}
}
}
}
return $data_sets;
}
/**
* @inheritdoc
*/
protected function processDataSet($entity) {
$entity_id = $entity
->id();
$entity_type_name = $entity
->getEntityTypeId();
$entity_settings = $this->generator
->getEntityInstanceSettings($entity_type_name, $entity_id);
if (empty($entity_settings['index'])) {
return FALSE;
}
$url_object = $entity
->toUrl();
// Do not include external paths.
if (!$url_object
->isRouted()) {
return FALSE;
}
$path = $url_object
->getInternalPath();
// Do not include paths that have been already indexed.
if ($this->batchSettings['remove_duplicates'] && $this
->pathProcessed($path)) {
return FALSE;
}
$url_object
->setOption('absolute', TRUE);
return [
'url' => $url_object,
'lastmod' => method_exists($entity, 'getChangedTime') ? date_iso8601($entity
->getChangedTime()) : NULL,
'priority' => isset($entity_settings['priority']) ? $entity_settings['priority'] : NULL,
'changefreq' => !empty($entity_settings['changefreq']) ? $entity_settings['changefreq'] : NULL,
'images' => !empty($entity_settings['include_images']) ? $this
->getImages($entity_type_name, $entity_id) : [],
// Additional info useful in hooks.
'meta' => [
'path' => $path,
'entity_info' => [
'entity_type' => $entity_type_name,
'id' => $entity_id,
],
],
];
}
/**
* @inheritdoc
*/
protected function getBatchIterationElements($entity_info) {
$query = $this->entityTypeManager
->getStorage($entity_info['entity_type_name'])
->getQuery();
if (!empty($entity_info['keys']['id'])) {
$query
->sort($entity_info['keys']['id'], 'ASC');
}
if (!empty($entity_info['keys']['bundle'])) {
$query
->condition($entity_info['keys']['bundle'], $entity_info['bundle_name']);
}
if (!empty($entity_info['keys']['status'])) {
$query
->condition($entity_info['keys']['status'], 1);
}
if ($this
->needsInitialization()) {
$count_query = clone $query;
$this
->initializeBatch($count_query
->count()
->execute());
}
if ($this
->isBatch()) {
$query
->range($this->context['sandbox']['progress'], $this->batchSettings['batch_process_limit']);
}
return $this->entityTypeManager
->getStorage($entity_info['entity_type_name'])
->loadMultiple($query
->execute());
}
}