Drupal 9 lấy id nút từ url

Sử dụng đoạn mã này để tìm bí danh URL cho một nút bằng cách tra cứu nó trong bảng url_alias theo ID nút của nó

$src = 'node/'.$node->nid;
$path = db_result[db_query["SELECT dst FROM url_alias WHERE src = '%s'",$src]];

Được gửi bởi biên tập viên vào Thứ Tư, 12/02/2015 - 14. 02

Câu hỏi

Làm cách nào để lấy nút hoặc ID nút [nid] từ url?

Ví dụ

$node = \Drupal::routeMatch[]->getParameter['node'];
if [$node] {
  $nid = $node->id[];
}

Thẻ

  • drupal 8
  • Mã số
  • Nút

Mẹo Drupal 8 Url. Nhận tên, đường dẫn, đối số

Thêm nhận xét mới

Bạn phải kích hoạt JavaScript để sử dụng biểu mẫu này

Tên của bạn

Vấn đề

Bình luận

Về định dạng văn bản

Văn bản thô

  • Không cho phép thẻ HTML
  • Dòng và đoạn văn tự động được ngắt
  • Địa chỉ trang web và địa chỉ email tự động chuyển thành liên kết

Bỏ trống trường này

Một điều rất định kỳ bạn sẽ làm là lấy id nút hiện tại của trang đã truy cập. Đây là hai cách để làm điều đó theo chương trình

$entity = \Drupal::routeMatch[]->getParameter['node'];
if [$entity instanceof \Drupal\node\NodeInterface] { // Check if it is a node
  $nid = $node->id[]; // You also have the node object right here
}

Theo tôi thì hơi ngắn hơn và kém tốt hơn như sau. Lưu ý rằng ở đây không có gì đảm bảo đây là một nút

$node = \Drupal::routeMatch[]->getParameter['node'];
$nid = $node->id[];

Nhiều lần, các thành viên của chúng tôi đã hỏi về việc tìm ID nút của từng phần nội dung Drupal. Node ID là khóa chính trong cơ sở dữ liệu cho nội dung Drupal và nó hữu ích trong nhiều trường hợp

Nếu bạn chưa cài đặt mô-đun Pathauto, thông tin này rất dễ tìm. Theo mặc định, ID nút trực tiếp trong URL của nội dung

Tuy nhiên, nếu bạn đã bật mô-đun Pathauto [như hầu hết các trang web đều làm], ID nút có thể khó tìm. Đây là giải pháp…

  • Truy cập nội dung có ID nút bạn muốn tìm và xem các tab. Đây là một ví dụ về một nút, với các tab bổ sung được cung cấp bởi mô-đun Webform

  • Di chuột qua một trong các tab. Trong ví dụ này, chúng tôi sẽ sử dụng "Chỉnh sửa", nhưng kỹ thuật này sẽ hoạt động với tất cả các tab
  • Ở góc dưới cùng bên trái của trình duyệt, bạn sẽ thấy URL của liên kết và nó chứa ID nút. Trong ví dụ này, Node ID là 2

Những điều cần lưu ý

  • Tôi đang sử dụng Firefox trong các ví dụ này
  • Mặc dù URL của trang “Chỉnh sửa” thực sự là /content/sponsor-registration, nhưng trình duyệt đang hiển thị cho bạn URL gốc của Drupal

Bạn cũng có thể sử dụng thủ thuật này trên các phần khác của trang web. Ví dụ

  • Đi tới Cấu trúc > Nội dung, bạn có thể xem URL gốc tại đây bằng cách di chuột qua liên kết “chỉnh sửa”

người hướng dẫn

  • Steve Burge

    Steve là người sáng lập OSTraining. Xuất thân từ Vương quốc Anh, hiện anh sống ở Sarasota, Hoa Kỳ. Công việc của Steve nằm giữa ranh giới giữa giảng dạy và phát triển web

    Qua. Vô danh. đã xuất bản vào. T2, 22/11/2021 - 17. 31

    bạn phải sử dụng lớp sau

    Drupal\Core\Url

    Bạn có thể sử dụng đoạn mã sau để lấy Bí danh URL

    		$options = ['absolute' => TRUE];
    		$url = \Drupal\Core\Url::fromRoute['entity.node.canonical', ['node' => $nid], $options];
    		$nodeurl = $url->toString[];
    

    Đôi khi, bạn chỉ cần ID nút của nút hiện tại để hoàn thành công việc. Trong Drupal 7, bạn chỉ cần sử dụng hàm arg[] để thực hiện việc này, phương pháp này không còn hiệu quả đối với Drupal 8 trở đi vì arg[] không được dùng nữa

Xuất bản ngày 23 tháng 9 năm 2020

Lý do chính khiến hàm global arg[] không được dùng trong Drupal 8 trở đi là vì nó không còn phục vụ bất kỳ nhu cầu cụ thể nào. Bên cạnh đó, việc sử dụng hàm arg[] cần cẩn thận hơn để tránh nhận được kết quả không mong muốn. Giả sử bạn muốn tải một nút trên đường dẫn 'article/123', việc thực thi arg[1] sẽ trả về '123' mà bạn có thể tải nút đó. Việc sử dụng '123' được trả về bởi arg[1] không đảm bảo rằng đường dẫn đó hợp lệ hoặc thậm chí là nút có ID 123 tồn tại

Trong Drupal 8 trở đi, mọi thứ được thực hiện khác đi. Hãy xem xét những điều sau đây

$node = \Drupal::routeMatch[]->getParameter['node'];
if [$node instanceof \Drupal\node\NodeInterface] {
  $nid = $node->id[];
  // Do whatever you need to do with the node ID here...
}

Lấy ID nút theo cách này hiệu quả hơn nhiều so với cách cũ bằng cách sử dụng hàm arg[]. Chúng tôi biết chắc nút tồn tại và đường dẫn hợp lệ vì routeMatch[] sẽ không trả về một đối tượng nút nếu không. Như một phần thưởng, bạn có thể dễ dàng thực hiện một số xác thực bổ sung vì bạn đã tải đối tượng nút. Ví dụ, bạn có thể kiểm tra xem nút có thuộc loại 'bài viết' hay không bằng cách thêm

if [$node->bundle[] == 'article'] {

Lấy ID nút theo cách này có vẻ tốn nhiều công sức hơn so với việc sử dụng hàm arg[] không dùng nữa, nhưng nó chắc chắn đảm bảo một cách làm việc mạnh mẽ hơn, từ đó sẽ giúp mã của bạn tốt hơn và ổn định hơn

___

Cần trợ giúp phát triển trang web Drupal của bạn?

Làm cách nào để lấy ID nút từ URL trong Drupal 8?

Trong Drupal 8 trở đi, mọi thứ được thực hiện theo cách khác. Hãy xem xét những điều sau đây. $node = \Drupal. routeMatch[]->getParameter['node']; . } // Do whatever you need to do with the node ID here.. }

Làm cách nào tôi có thể lấy ID nút từ bí danh đường dẫn?

Làm cách nào để lấy ID nút từ bí danh đường dẫn? .
// Nhận nút từ bí danh đường dẫn
$path = \Drupal. dịch vụ ['đường dẫn. alias_manager']->getPathByAlias['/this-is-the-alias'];
if[preg_match['/node\/[\d+]/', $path, $matches]] {
$node = \Drupal\node\Entity\Node. tải[$matches[1]];

Làm cách nào để lấy dữ liệu nút trong Drupal?

Để tải chi tiết nút bằng cách sử dụng id của nó trong Drupal 8, hãy sử dụng cú pháp sau. $node_details = Nút. tải[$nid]; . Lưu ý rằng tham số phải là một mảng id. We can load multiple nodes in Drupal 8 using load multiple[] function. Note that the parameter should be an array of ids.

Làm cách nào để lấy giá trị trường nút trong Drupal 8?

Bạn không cần phải chuyển đổi $entity thành một mảng, điều này đơn giản là có tác dụng. $entity->get['field_name']->getValue[];

Chủ Đề