it-swarm-vi.com

Lấy bí danh đường dẫn từ NID (hoặc đối tượng nút)

Tôi có một đối tượng nút và tôi đang cố gắng sử dụng nó để có được một đường dẫn cụ thể trong Drupal 8.

drupal_lookup_path() in Drupal 7 nhưng tôi không thấy bất kỳ tài liệu tương đương hoặc tài liệu nào cho Drupal 8.

Cách "Drupal" mới để nhận đường dẫn từ một đối tượng nút là gì?

Nó sẽ là một cái gì đó đơn giản như $node->get('path')?

Đây có vẻ là một câu hỏi đơn giản, nhưng tôi hoàn toàn không tìm thấy bất kỳ tài liệu nào về nó.

Lưu ý tôi không muốn bí danh đường dẫn cho đường dẫn hiện tại; Tôi muốn bí danh đường dẫn cho một nút tùy ý, được cung cấp một đối tượng nút hoặc ID nút.

27
Jack Ryan

Để có được đường dẫn cho id nút, hãy sử dụng AliasManager :: getAliasByPath :

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

Còn việc sử dụng rl :

use Drupal\Core\Url;    

...

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

Nếu bạn chỉ có nid, giải pháp 4k4 của

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

Công trình tuyệt vời. Nhưng nếu bạn đã có một đối tượng nút, bạn có thể bỏ qua một hoặc hai bước. Các nút thực sự đã được xây dựng trong các phương thức để nhận url.

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

Sẽ trả về url bí danh của nút.

toUrl () trả về một đối tượng url. Xem tại đây https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/ class/Url/8.x.x

và toString () là một phương thức của đối tượng url trả về biểu diễn chuỗi của url.

16
Matt

Cách tốt nhất để lấy URL nút từ đối tượng nút-

  • Đường dẫn tuyệt đối: $ node-> toUrl () -> setAbsolute () -> toString ();
  • Đường dẫn tương đối: $ node-> toUrl () -> toString ();

Nó cũng sẽ xử lý ngôn ngữ nút.

3
Prem Patel

Bạn cũng có thể sử dụng phương thức tải từ path.alias_storage Để trả về một mảng các chi tiết bí danh hoặc boolean false nếu không tìm thấy đường dẫn cho nút đó.

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

2
rchaplin

Nếu bạn muốn lấy url bí danh nút bằng ngôn ngữ đừng quên sử dụng ngôn ngữ như thế này.

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

Nếu bạn đang sử dụng nó trong một lớp, đừng quên sử dụng đúng cách tiêm phụ thuộc.

1
Diosbel Mezquía