Pfadalias von NID (oder Knotenobjekt) abrufen


22

Ich habe ein Node-Objekt und versuche es zu verwenden, um einen bestimmten Pfad in Drupal 8 zu erhalten.

Es gab drupal_lookup_path()in Drupal 7, aber ich sehe keine Entsprechung oder Dokumentation für Drupal 8.

Was ist die neue "Drupal" -Methode, um einen Pfad von einem Knotenobjekt abzurufen?

Wäre es so einfach $node->get('path')?

Dies scheint eine einfache Frage zu sein, aber ich finde absolut keine Dokumentation dazu.

Beachten Sie, dass ich keinen Pfadalias für den aktuellen Pfad möchte. Ich möchte den Pfad-Alias ​​für einen beliebigen Knoten, der ein Knotenobjekt oder eine Knoten-ID hat.



Ich denke, dies könnte ein Duplikat sein, überprüfen Sie die verknüpfte Frage, es gibt viele Antworten.
Kevin

Die andere Frage enthält Antworten zum Abrufen des Pfadalias für den aktuellen Pfad, nicht für einen Knoten, für den das OP die Knoten-ID kennt.
kiamlaluno

Es ist kein Duplikat - ich möchte nicht den aktuellen Pfad. Ich möchte, dass dem Pfad ein beliebiges Knotenobjekt oder eine beliebige NID zugewiesen wird.
Jack Ryan

Ja, das ist kein Duplikat, siehe meine Antwort.
4. 4.

Antworten:



19

Was ist mit der Verwendung von URL :

use Drupal\Core\Url;    

...

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

5
IIRC, der Hauptunterschied zu AliasManager, stellt sicher, dass auch Prozessoren für ausgehende Pfade ausgeführt werden, während AliasManager nur die Alias-Suche ausführt. Sie können das UrlObjekt auch direkt als erhalten $node->toUrl().
mpdonadio

1
Viel bessere Lösung.
Patrick

16

Wenn Sie nur die NID haben, ist 4k4 die Lösung von

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

Funktioniert super. Wenn Sie jedoch bereits ein Knotenobjekt haben, können Sie ein oder zwei Schritte überspringen. Die Knoten verfügen über integrierte Methoden zum Abrufen von URLs.

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

Gibt die Alias-URL des Knotens zurück.

toUrl () gibt ein URL-Objekt zurück. Siehe hier https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

und toString () ist eine Methode des URL-Objekts, die die Zeichenfolgendarstellung der URL zurückgibt.


9
Beachten Sie, dass $node->toUrl()->setAbsolute()->toString()die absolute URL zurückgegeben wird, die für das Teilen usw. nützlich ist.
Tim

2

Sie können auch die load-Methode von verwenden path.alias_storage, um ein Array der Alias-Details oder den booleschen Wert false zurückzugeben, wenn für diesen Knoten kein Pfad gefunden wurde.

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


2

Der beste Weg, um eine Knoten-URL von einem Knotenobjekt zu erhalten -

  • Absoluter Pfad : $ node-> toUrl () -> setAbsolute () -> toString ();
  • Relativer Pfad : $ node-> toUrl () -> toString ();

Es wird auch die Knotensprache behandeln.


0

Wenn Sie die Node-Alias-URL nach Sprachen erhalten möchten, vergessen Sie nicht, diese Sprache zu verwenden.

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

Wenn Sie es in einer Klasse verwenden, vergessen Sie nicht, die Abhängigkeitsinjektion korrekt zu verwenden.


-5

Ich hatte auf eine "Drupalesque" -Lösung gehofft, aber Folgendes habe ich mir vorgenommen, um diesen Job zu erledigen:

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

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
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.