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?