Come posso ottenere l'ID nodo da un alias percorso?


Risposte:


25

Non sono sicuro che esista una funzione diretta, ma una route consiste nell'utilizzare il servizio Gestione alias percorso per cercare il percorso interno e quindi regex per un ID nodo valido per eseguire un caricamento oggetto su:

$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
Per qualche ragione, a $pathvolte è uguale a /this-is-the-alias. Una volta era quando il percorso radice ( node/{id}) era un altro alias #migrationstruggles, ma era presente anche con altri alias.
Chris Happy

7

È possibile utilizzare il seguente codice per ottenere e caricare un'entità e avere accesso ai suoi valori.

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

Riferimenti


1

Installare il modulo di sviluppo e quindi utilizzare l'elemento della barra degli strumenti di sviluppo Informazioni sul percorso corrente .

Ciò si traduce in questo URL, che è possibile digitare direttamente e fornire qualsiasi percorso noto all'installazione drupal come parametro di query:

/devel/routes/item?path=alias

Quando si tratta di un nodo, si trova l'id del nodo nei parametri non elaborati alla fine delle variabili di route elencate.

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.