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


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

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.