Як я можу отримати ідентифікатор вузла з псевдоніму шляху?


16

Я хочу отримати нід, але єдина інформація, яку я маю - http://example.com/this-is-the-alias .

Чи є спосіб отримати або внутрішній шлях / node / * для цього псевдоніма, якщо я не на цій сторінці? Або є спосіб одразу вийти з цього псевдоніма?

Відповіді:


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

Встановіть модуль розробки та використовуйте пункт панелі інструментів розробки Поточна інформація про маршрут .

Це призводить до цього URL-адреси, який ви можете ввести безпосередньо та надати будь-який шлях, відомий вашій установці drupal як параметр запиту:

/devel/routes/item?path=alias

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.