รับนามแฝงเส้นทางจาก NID (หรือวัตถุโหนด)


22

ฉันมีวัตถุโหนดและฉันพยายามใช้เพื่อรับเส้นทางที่กำหนดใน Drupal 8

มีอยู่drupal_lookup_path()ใน Drupal 7 แต่ฉันไม่เห็นสิ่งใดเทียบเท่าหรือเอกสารสำหรับ Drupal 8

ใหม่ "Drupal" วิธีการรับเส้นทางจากวัตถุโหนดอะไร

มันจะเป็นอะไรที่ง่าย$node->get('path')ไหม

ดูเหมือนว่าเป็นคำถามง่าย ๆ แต่ฉันไม่พบเอกสารใด ๆ เลย

แจ้งให้ทราบฉันไม่ต้องการนามแฝงเส้นทางสำหรับเส้นทางปัจจุบัน; ฉันต้องการเส้นทางนามแฝงสำหรับโหนดโดยพลการกำหนดวัตถุโหนดหรือรหัสโหนด



ฉันคิดว่านี่อาจจะซ้ำกันตรวจสอบคำถามที่เชื่อมโยงมีคำตอบมากมาย
Kevin

อีกคำถามหนึ่งมีคำตอบที่บอกวิธีรับนามแฝงของเส้นทางสำหรับเส้นทางปัจจุบันไม่ใช่สำหรับโหนดที่ OP รู้รหัสโหนด
kiamlaluno

มันไม่ซ้ำกัน - ฉันไม่ต้องการเส้นทางปัจจุบัน ฉันต้องการเส้นทางที่กำหนดวัตถุโหนดโดยพลการหรือ NID
แจ็คไรอัน

ใช่นี่ไม่ใช่คำซ้ำให้ดูคำตอบของฉัน
4k4

คำตอบ:


43

ในการรับพา ธ สำหรับ node id ให้ใช้AliasManager :: getAliasByPath :

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

3
ใช่สิ่งนี้ถูกต้องและเรียบง่ายกว่าโซลูชันของฉัน ขอขอบคุณ!
Jack Ryan

19

สิ่งที่เกี่ยวกับการใช้URL :

use Drupal\Core\Url;    

...

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

5
IIRC ความแตกต่างหลักระหว่างสิ่งนี้กับการใช้ AliasManager คือสิ่งนี้จะช่วยให้มั่นใจได้ว่าตัวประมวลผลเส้นทางขาออกจะทำงานในขณะที่ AliasManager จะทำการค้นหานามแฝง นอกจากนี้คุณยังจะได้รับวัตถุโดยตรงเป็นUrl $node->toUrl()
mpdonadio

1
ทางออกที่ดีกว่ามาก
Patrick

16

หากคุณมีแค่นิดหน่อยโซลูชันของ 4k4 ของ

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

ใช้งานได้ดี แต่ถ้าคุณมีวัตถุโหนดอยู่แล้วคุณสามารถข้ามขั้นตอนหนึ่งหรือสอง จริง ๆ แล้วโหนดมีวิธีในการรับ URL

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

จะส่งคืน URL ที่ใช้ชื่อแทนของโหนด

toUrl () ส่งคืนวัตถุ url ดูที่นี่https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

และ toString () เป็นวิธีการของวัตถุ URL ที่ส่งกลับการเป็นตัวแทนสตริงของ URL


9
โปรดทราบว่า$node->toUrl()->setAbsolute()->toString()จะส่งคืน URL แบบสัมบูรณ์มีประโยชน์สำหรับการแชร์ ฯลฯ
ทิม

2

คุณยังสามารถใช้วิธีการโหลดจากpath.alias_storageเพื่อส่งกลับอาร์เรย์ของรายละเอียดนามแฝงหรือบูลีนเท็จถ้าไม่มีเส้นทางที่พบสำหรับโหนดนั้น

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


2

วิธีที่ดีที่สุดในการรับ URL โหนดจากโหนดวัตถุ -

  • เส้นทางแบบสัมบูรณ์ : $ node-> toUrl () -> setAbsolute () -> toString ();
  • เส้นทางสัมพัทธ์ : $ node-> toUrl () -> toString ();

นอกจากนี้ยังจะจัดการกับภาษาโหนด


0

หากคุณต้องการได้รับชื่อแทนโหนดโดยภาษาอย่าลืมใช้ภาษาเช่นนี้

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

ถ้าคุณใช้มันในคลาสอย่าลืมใช้การฉีดอ้างอิงอย่างถูกต้อง


-5

ฉันหวังว่าจะได้โซลูชันเพิ่มเติม "Drupalesque" แต่นี่คือสิ่งที่ฉันทำให้ตัวเองทำงาน:

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

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.