Wie kann ich die Knoten-ID aus einem Pfadalias abrufen?


17

Ich möchte in der Lage sein, die NID zu erhalten, aber die einzige Information, die ich habe, ist http://example.com/this-is-the-alias .

Gibt es eine Möglichkeit, den internen Pfad von / node / * für diesen Alias ​​zu ermitteln, wenn ich nicht auf der Seite bin? Oder gibt es eine Möglichkeit, die NID von diesem Alias ​​sofort zu erhalten?

Antworten:


25

Ich bin mir nicht sicher, ob es eine direkte Funktion gibt, aber eine Möglichkeit besteht darin, den Pfadalias-Manager-Service zu verwenden, um den internen Pfad zu suchen, und ihn dann nach einer gültigen Knoten-ID zu regexen, um ein Objekt zu laden:

$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
Aus irgendeinem Grund $pathist das manchmal gleich /this-is-the-alias. Einmal war als root path ( node/{id}) ein anderer Alias ​​#migrationstruggles, aber es war auch bei anderen Alias ​​vorhanden.
Chris Happy

7

Mit dem folgenden Code können Sie eine Entität abrufen, laden und auf ihre Werte zugreifen.

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

Verweise


1

Installieren Sie das Entwicklermodul und verwenden Sie dann den Symbolleisteneintrag Aktuelle Routeninformationen .

Dies führt zu dieser URL, die Sie direkt eingeben und jeden Ihrer Drupal-Installation bekannten Pfad als Abfrageparameter angeben können:

/devel/routes/item?path=alias

Wenn es sich um einen Knoten handelt, finden Sie die Knoten-ID in den Rohparametern am Ende der aufgelisteten Routenvariablen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.