Dapatkan path alias dari NID (atau objek node)


22

Saya memiliki objek simpul, dan saya mencoba menggunakannya untuk mendapatkan path yang diberikan di Drupal 8.

Ada drupal_lookup_path()di Drupal 7 tapi saya tidak melihat padanan atau dokumentasi untuk Drupal 8.

Apa cara "Drupal" baru untuk mendapatkan jalur dari objek simpul?

Akankah itu menjadi sesuatu yang sederhana $node->get('path')?

Ini sepertinya pertanyaan sederhana, tapi saya sama sekali tidak menemukan dokumentasi apa pun di dalamnya.

Perhatikan saya tidak ingin alias path untuk path saat ini; Saya ingin alias path untuk node sewenang-wenang, diberi objek node atau ID node.



Saya pikir ini mungkin duplikat, periksa pertanyaan terkait ada banyak jawaban.
Kevin

Pertanyaan lain memiliki jawaban yang mengatakan bagaimana cara mendapatkan path alias untuk path saat ini, bukan untuk node yang OP tahu node ID.
kiamlaluno

Ini bukan duplikat - Saya tidak ingin jalur saat ini. Saya ingin path diberi objek node sewenang-wenang atau NID.
Jack Ryan

Ya, ini bukan duplikat, lihat jawaban saya.
4k4

Jawaban:


43

Untuk mendapatkan path untuk id node gunakan AliasManager :: getAliasByPath :

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

3
Yap, ini terlihat benar dan lebih sederhana dari solusi saya. Terima kasih!
Jack Ryan

19

Bagaimana dengan menggunakan Url :

use Drupal\Core\Url;    

...

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

5
IIRC, perbedaan utama antara ini dan menggunakan AliasManager, adalah bahwa ini juga akan memastikan bahwa prosesor jalur keluar berjalan, sementara AliasManager hanya melakukan pencarian alias. Anda juga bisa mendapatkan Urlobjek secara langsung $node->toUrl().
mpdonadio

1
Solusi yang jauh lebih baik.
Patrick

16

Jika Anda hanya memiliki nid, solusi 4k4 untuk

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

Bagus sekali. Tetapi jika Anda sudah memiliki objek simpul Anda dapat melewati satu atau dua langkah. Node sebenarnya memiliki metode bawaan untuk mendapatkan url.

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

Akan mengembalikan url alias dari node.

toUrl () mengembalikan objek url. Lihat di sini https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

dan toString () adalah metode objek url yang mengembalikan representasi string dari url.


9
Catatan yang $node->toUrl()->setAbsolute()->toString()akan mengembalikan URL absolut, berguna untuk berbagi, dll.
Tim

2

Anda juga bisa menggunakan metode load dari path.alias_storageuntuk mengembalikan array dari alias alias atau boolean false jika tidak ada jalur yang ditemukan untuk node itu.

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


2

Cara terbaik untuk mendapatkan URL simpul dari simpul objek-

  • Absolute Path : $ node-> toUrl () -> setAbsolute () -> toString ();
  • Relative Path : $ node-> toUrl () -> toString ();

Ini juga akan menangani bahasa simpul.


0

Jika Anda ingin mendapatkan simpul alias url menurut bahasa, jangan lupa untuk menggunakan bahasa seperti ini.

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

Jika Anda menggunakannya di kelas jangan lupa untuk menggunakan injeksi dependensi dengan benar.


-5

Saya berharap untuk solusi yang lebih "Drupalesque", tapi inilah yang saya buat sendiri untuk melakukan pekerjaan itu:

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

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.