Получить псевдоним пути из NID (или объекта узла)


У меня есть объект узла, и я пытаюсь использовать его для получения заданного пути в Drupal 8.

В Drupal 7 был drupal_lookup_path(), но я не вижу никакого эквивалента или документации для Drupal 8.

Каков новый способ "Drupal" получить путь от объекта узла?

Будет ли это что-то простое, например $node->get('path')?

Это кажется простым вопросом, но я просто абсолютно не нахожу никакой документации по нему.

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

Author: kiamlaluno, 2017-03-08

8 answers

Чтобы получить путь для идентификатора узла, используйте aliasmanager::getaliasbypath:

Друпал 8

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

В соответствии с новой записью об изменении в Drupal 8.8.0 и выше path.alias_manager устарел и введен path_alias.manager.

Новый синтаксис выглядит следующим образом:

$url_alias = \Drupal::service('path_alias.manager')->getAliasByPath('/node/'. $nid, $langcode);
 66
Author: 4k4, 2020-09-20 11:44:22

Как насчет использования Url-адреса :

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();
 23
Author: Kevin, 2017-03-08 19:09:45

Если у вас есть только nid, решение 4k4

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

Отлично работает. Но если у вас уже есть объект узла, вы можете пропустить один или два шага. Узлы на самом деле имеют встроенные методы получения URL-адресов.

$node->toUrl()->toString();

Вернет псевдоним URL-адреса узла.

Функция toURL() возвращает объект url. Смотрите здесь https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

И toString() - это метод объекта url, который возвращает строку представление URL-адреса.

 22
Author: Matt, 2017-10-30 17:52:11

Лучший способ получить URL-адрес узла из объекта узла -

  • Абсолютный путь: $узел->Турл()->setabsolute()->toString();
  • Относительный путь: $узел->Турл()->Строка();

Он также будет обрабатывать язык узлов.

 6
Author: Prem Patel, 2019-01-21 09:12:59

Вы также можете использовать метод загрузки из path.alias_storage, чтобы вернуть массив сведений об псевдониме или логическое значение false, если для этого узла не был найден путь.

$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);

 3
Author: rchaplin, 2017-06-06 13:39:48

Если вы хотите получить URL-адрес псевдонима узла с помощью языков, не забудьте использовать такой язык.

$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);

Если вы используете его в классе, не забудьте правильно использовать инъекцию зависимостей.

 2
Author: Diosbel Mezquía, 2019-11-14 17:45:57

В соответствии с новой записью об изменении в Drupal 8.8.0 path.alias_manager устарело и введено path_alias.manager.

Новый синтаксис выглядит следующим образом:

$url_alias = \Drupal::service('path_alias.manager')->getAliasByPath('/node/'. $nid, $langcode);
 1
Author: miststudent2011, 2020-07-08 16:55:04

Я надеялся на более "друпалеское" решение, но вот что я сделал сам, чтобы выполнить эту работу:

  function getPathFromNID($nid) {
    $db = \Drupal::database();

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
 -5
Author: Jack Ryan, 2017-03-08 18:52:00