Mam obiekt węzła i próbuję go użyć, aby uzyskać daną ścieżkę w Drupal 8.
Był drupal_lookup_path()
w Drupal 7, ale nie widzę żadnych odpowiedników ani dokumentacji dla Drupal 8.
Jaki jest nowy sposób „Drupala”, aby uzyskać ścieżkę z obiektu węzła?
Czy byłoby to coś prostego $node->get('path')
?
To wydaje się proste pytanie, ale absolutnie nie znajduję na nim żadnej dokumentacji.
Zauważ, że nie chcę aliasu ścieżki dla bieżącej ścieżki; Chcę alias ścieżki dla dowolnego węzła, biorąc pod uwagę obiekt węzła lub identyfikator węzła.
8
nodes
path-aliases
Jack Ryan
źródło
źródło
Odpowiedzi:
Aby uzyskać ścieżkę dla identyfikatora węzła, użyj AliasManager :: getAliasByPath :
źródło
Co z używaniem adresu URL :
źródło
Url
obiekt bezpośrednio jako$node->toUrl()
.Jeśli masz tylko nid, rozwiązanie 4k4
Działa świetnie. Ale jeśli masz już obiekt węzła, możesz pominąć krok lub dwa. Węzły faktycznie mają wbudowane metody uzyskiwania adresów URL.
Zwróci aliasowany adres URL węzła.
toUrl () zwraca obiekt url. Zobacz tutaj https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x
a toString () to metoda obiektu url, która zwraca ciąg znaków reprezentujący adres url.
źródło
$node->toUrl()->setAbsolute()->toString()
zwróci bezwzględny adres URL, przydatny do udostępniania itp.Możesz także użyć metody load from,
path.alias_storage
aby zwrócić tablicę szczegółów aliasu lub wartość logiczną false, jeśli nie znaleziono ścieżki dla tego węzła.$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);
źródło
Najlepszy sposób na uzyskanie adresu URL węzła z obiektu węzła
Będzie także obsługiwał język węzłów.
źródło
Jeśli chcesz uzyskać adres URL aliasu węzła według języków, nie zapomnij użyć takiego języka.
Jeśli używasz go w klasie, nie zapomnij poprawnie użyć wstrzykiwania zależności.
źródło
Miałem nadzieję na bardziej „drupaleskie” rozwiązanie, ale oto, co postanowiłem zrobić.
źródło