Jak mogę uzyskać identyfikator węzła z aliasu ścieżki?

16

Chcę być w stanie uzyskać identyfikator, ale jedyne informacje, jakie mam, to http://example.com/this-is-the-alias .

Czy istnieje sposób uzyskania wewnętrznej ścieżki / node / * dla tego aliasu, jeśli nie ma mnie na stronie? Czy jest sposób, aby od razu uzyskać identyfikator z tego aliasu?

BrandenB171
źródło

Odpowiedzi:

25

Nie jestem pewien, czy istnieje funkcja bezpośrednia, ale jedną z tras jest skorzystanie z usługi menedżera aliasów ścieżek w celu wyszukania wewnętrznej ścieżki, a następnie ponowne wyrażenie jej poprawnego identyfikatora węzła w celu wykonania ładowania obiektu:

$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]);
}
Shawn Conn
źródło
4
Z jakiegoś powodu $pathczasami jest równa /this-is-the-alias. Kiedyś root root ( node/{id}) był innym aliasem #migrationstruggles, ale był także obecny z innymi aliasami.
Chris Happy
7

Możesz użyć następującego kodu, aby uzyskać i załadować jednostkę oraz uzyskać dostęp do jej wartości.

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

Bibliografia

Adrian Cid Almaguer
źródło
1

Zainstaluj moduł devel, a następnie użyj elementu paska narzędzi devel Bieżąca informacja o trasie .

Wynikiem tego jest adres URL, który możesz wpisać bezpośrednio i podać dowolną ścieżkę znaną twojej instalacji drupal jako parametr zapytania:

/devel/routes/item?path=alias

Gdy jest to węzeł, identyfikator węzła znajduje się w nieprzetworzonych parametrach na końcu wymienionych zmiennych trasy.

4k4
źródło