Como posso obter o ID do nó de um alias de caminho?


Respostas:


25

Não tenho certeza se existe uma função direta, mas uma rota é usar o serviço do gerenciador de alias de caminho para procurar o caminho interno e, em seguida, regexá-lo para uma identificação de nó válida para executar um carregamento de objeto:

$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
Por alguma razão, $pathàs vezes é igual a /this-is-the-alias. Era uma vez quando o caminho raiz ( node/{id}) era outro alias #migrationstruggles, mas também estava presente com outros aliases.
23718 Chris Happy

7

Você pode usar o código a seguir para obter e carregar uma entidade e ter acesso aos seus valores.

  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);

Referências


1

Instale o módulo devel e use o item Informações da rota atual da barra de ferramentas devel .

Isso resulta neste URL, que você pode digitar diretamente e fornecer qualquer caminho conhecido para a instalação do drupal como parâmetro de consulta:

/devel/routes/item?path=alias

Quando é um nó, você encontra o ID do nó nos parâmetros brutos no final das variáveis ​​de rota listadas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.