Puteți, de exemplu, să creați un ViewsArgumentValidator personalizat și să transformați aliasul dat în ID-ul nodului.
<?php
spațiu de nume Drupal\my_module\Plugin\views\argument_validator;
utilizați Drupal\path_alias\AliasManagerInterface;
utilizați Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase;
utilizați Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Validează dacă un alias este un alias de nod valid și îl transformă în nid.
*
* @ViewsArgumentValidator(
* id = "node_alias",
* title = @Translation ("ID nod prin alias")
* )
*/
clasa NodeAlias extinde ArgumentValidatorPluginBase {
/**
* Managerul de alias.
*
* @var \Drupal\path_alias\AliasManagerInterface
*/
protejat $aliasManager;
/**
* {@inheritdoc}
*/
funcția publică __construct(matrice $configurație, $plugin_id, $plugin_definition, AliasManagerInterface $alias_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->aliasManager = $alias_manager;
}
/**
* {@inheritdoc}
*/
funcția publică statică create(ContainerInterface $container, matrice $configurație, $plugin_id, $plugin_definition) {
returnează static nou (
$configurare,
$plugin_id,
$plugin_definition,
$container->get('path_alias.manager'),
);
}
/**
* {@inheritdoc}
*/
funcția publică validateArgument($argument) {
// Adăugați bară oblică.
$argument = '/' . ltrim($argument, '/');
$cale = $this->aliasManager->getPathByAlias($argument);
if (preg_match('/node\/(\d+)/', $cale, $potriviri)) {
$acest->argument->argument = $potriviri[1];
returnează TRUE;
}
returnează FALSE;
}
}
În validateArgument funcția verificăm dacă o cale internă pentru un nod poate fi găsită cu acel alias și transformăm argumentul dat în ID-ul nodului corespunzător.
Adăugați acest fișier numit NodeAlias.php la modul dvs. personalizat în src/Plugin/views/argument_validator director și ștergeți memoria cache.
După aceea, puteți utiliza Conținut: Nid filtrul contextual și selectați în secțiunea „Când valoarea filtrului este în adresa URL sau este furnizată o valoare implicită” noul Validator ID-ul nodului prin alias.