Как я могу получить идентификатор узла из псевдонима пути?

16

Я хочу получить nid, но единственная информация, которую я имею, это http://example.com/this-is-the-alias .

Есть ли способ получить либо внутренний путь / node / * для этого псевдонима, если меня нет на странице? Или есть способ просто получить nid из этого псевдонима?

BrandenB171
источник

Ответы:

25

Я не уверен, есть ли прямая функция, но один из способов - использовать службу менеджера псевдонимов пути для поиска внутреннего пути, а затем пересмотреть его для правильного идентификатора узла для выполнения загрузки объекта:

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}
Шон Конн
источник
4
Почему-то $pathиногда равно /this-is-the-alias. Когда-то, когда корневой путь ( node/{id}) был другим псевдонимом #migrationstruggles, он также присутствовал с другими псевдонимами.
Крис Хэппи
7

Вы можете использовать следующий код, чтобы получить и загрузить объект и получить доступ к его значениям.

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

Ссылки

Адриан Сид Альмагуер
источник
1

Установите модуль devel и затем используйте элемент панели инструментов devel Информация о текущем маршруте .

Это приводит к следующему URL-адресу, который вы можете ввести напрямую и указать любой путь, известный вашей установке drupal, в качестве параметра запроса:

/devel/routes/item?path=alias

Когда это узел, вы найдете идентификатор узла в необработанных параметрах в конце перечисленных переменных маршрута.

4k4
источник