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.