Ottieni alias percorso da NID (o oggetto nodo)


22

Ho un oggetto nodo e sto provando a usarlo per ottenere un determinato percorso in Drupal 8.

C'era drupal_lookup_path()in Drupal 7 ma non vedo alcun equivalente o documentazione per Drupal 8.

Qual è il nuovo modo "Drupal" per ottenere un percorso da un oggetto nodo?

Sarebbe qualcosa di semplice $node->get('path')?

Sembra una domanda semplice, ma non trovo assolutamente alcuna documentazione al riguardo.

Si noti che non voglio l'alias del percorso per il percorso corrente; Voglio l'alias del percorso per un nodo arbitrario, dato un oggetto nodo o un ID nodo.



Penso che questo potrebbe essere un duplicato, controlla la domanda collegata ci sono molte risposte.
— Kevin,

L'altra domanda ha risposte che dicono come ottenere l'alias del percorso per il percorso corrente, non per un nodo per il quale l'OP conosce l'ID nodo.
— kiamlaluno

Non è un duplicato, non voglio il percorso attuale. Voglio il percorso dato un oggetto nodo NID o NID.
— Jack Ryan,

Sì, questo non è un duplicato, vedi la mia risposta.
— 4k4

Risposte:


43

Per ottenere il percorso per un ID nodo utilizzare AliasManager :: getAliasByPath :

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

3
Sì, sembra giusto ed è più semplice della mia soluzione. Grazie!
— Jack Ryan,

19

Che ne dici di usare Url :

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();

5
IIRC, la principale differenza tra questo e l'utilizzo di AliasManager, è che ciò garantirà anche l'esecuzione dei processori di percorsi in uscita, mentre AliasManager esegue solo la ricerca di alias. Puoi anche ottenere l' Urloggetto direttamente come $node->toUrl().
— mpdonadio

1
Soluzione molto migliore.
— Patrick,

16

Se hai solo il nid, la soluzione di 4k4 di

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

Funziona alla grande. Ma se hai già un oggetto nodo puoi saltare un passo o due. I nodi hanno effettivamente metodi integrati per ottenere gli URL.

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

Restituirebbe l'URL con alias del nodo.

toUrl () restituisce un oggetto url. Vedi qui https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

e toString () è un metodo dell'oggetto url che restituisce la rappresentazione in formato stringa dell'url.


9
Nota che $node->toUrl()->setAbsolute()->toString()restituirà l'URL assoluto, utile per la condivisione, ecc.
— Tim

2

È inoltre possibile utilizzare il metodo load da path.alias_storageper restituire un array di dettagli alias o false booleani se non è stato trovato un percorso per quel nodo.

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


2

Il modo migliore per ottenere l'URL del nodo dall'oggetto nodo-

  • Percorso assoluto : $ node-> toUrl () -> setAbsolute () -> toString ();
  • Percorso relativo : $ node-> toUrl () -> toString ();

Gestirà anche il linguaggio dei nodi.


0

Se vuoi ottenere l'URL dell'alias del nodo in base alle lingue, non dimenticare di usare la lingua in questo modo.

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

Se lo stai usando in una classe, non dimenticare di usare correttamente l'iniezione delle dipendenze.


-5

Speravo in una soluzione più "drupalesca", ma ecco cosa mi sono fatto fare il lavoro:

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

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.