Bagaimana saya bisa mendapatkan ID simpul dari alias path?

16

Saya ingin bisa mendapatkan nid tetapi satu-satunya informasi yang saya miliki adalah http://example.com/this-is-the-alias .

Apakah ada cara untuk mendapatkan jalur internal / node / * untuk alias itu jika saya tidak ada di halaman? Atau ada cara untuk mendapatkan nid dari alias itu langsung?

BrandenB171
sumber

Jawaban:

25

Saya tidak yakin apakah ada fungsi langsung, tetapi satu rute adalah menggunakan jalur alias layanan manajer untuk mencari jalur internal kemudian regex untuk id node yang valid untuk melakukan pemuatan objek pada:

$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]);
}
Shawn Conn
sumber
4
Untuk beberapa alasan, $pathterkadang sama dengan /this-is-the-alias. Pernah ketika root path ( node/{id}) adalah perjuangan alias #migrasi lain, tetapi juga hadir dengan alias lain.
Chris Happy
7

Anda dapat menggunakan kode berikut untuk mendapatkan dan memuat entitas dan memiliki akses ke nilainya.

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

Referensi

Adrian Cid Almaguer
sumber
1

Instal modul devel dan kemudian gunakan item toolbar devel Info rute saat ini .

Ini menghasilkan url ini, yang bisa Anda ketikkan langsung dan memberikan jalur apa pun yang diketahui ke instalasi drupal Anda sebagai parameter kueri:

/devel/routes/item?path=alias

Ketika sebuah node, Anda menemukan id node di parameter mentah di akhir variabel rute yang terdaftar.

4k4
sumber