ฉันจะรับ node ID จากนามแฝงพา ธ ได้อย่างไร


16

ฉันต้องการที่จะสามารถที่จะได้รับ nid แต่ข้อมูลเดียวที่ฉันมีเป็นhttp://example.com/this-is-the-alias

มีวิธีที่จะได้รับเส้นทางภายในของ / node / * สำหรับนามแฝงว่าถ้าฉันไม่ได้อยู่ในหน้า? หรือมีวิธีที่จะได้รับหมายเลขจากนามแฝงนั้นทันทีหรือไม่

คำตอบ:


25

ฉันไม่แน่ใจว่ามีฟังก์ชั่นโดยตรงหรือไม่ แต่มีหนึ่งเส้นทางคือการใช้บริการตัวจัดการนามแฝงของเส้นทางเพื่อค้นหาเส้นทางภายในจากนั้นให้ regex สำหรับรหัสโหนดที่ถูกต้องเพื่อดำเนินการโหลดวัตถุบน:

$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
ด้วยเหตุผลบางอย่างบางครั้งก็เท่ากับ$path /this-is-the-aliasครั้งหนึ่งเคยเป็นเมื่อรูทพา ธ ( node/{id}) เป็นอีกชื่อแทน #migrationstruggles แต่มันก็มีอยู่ด้วยชื่อแทนอื่น ๆ
คริสมีความสุข

7

คุณสามารถใช้รหัสต่อไปนี้เพื่อรับและโหลดเอนทิตีและสามารถเข้าถึงค่าได้

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

อ้างอิง


1

ติดตั้งโมดูล devel แล้วใช้รายการแถบเครื่องมือ devel ข้อมูลเส้นทางปัจจุบัน

ผลลัพธ์นี้ใน URL นี้ซึ่งคุณสามารถพิมพ์โดยตรงและระบุเส้นทางใด ๆ ที่การติดตั้ง drupal ของคุณเป็นพารามิเตอร์การสืบค้น:

/devel/routes/item?path=alias

เมื่อเป็นโหนดคุณจะพบ id ของโหนดในพารามิเตอร์ raw ที่ส่วนท้ายของตัวแปรเส้นทางที่แสดง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.