Câu trả lời:
Vẫn thông qua URL một cách gián tiếp, nhưng đây là cách dễ nhất để có được nó: menu_get_object .
<?
if ($node = menu_get_object()) {
$nid = $node->nid;
}
?>
Lưu ý rằng nếu có một nút, dù sao thì nó cũng đã được hệ thống menu tải và nó được tải từ bộ đệm tĩnh.
$node = menu_get_object()
câu hỏi tương tự như mã câu hỏi ban đầu, lưu hơn 500 yêu cầu cơ sở dữ liệu trên mỗi trang . Sử dụng cẩn thận!
Trừ khi có một số lý do kỹ thuật tại sao phương thức arg () không khả dụng (hoặc bạn CẦN kiểm tra quyền truy cập như trong các bài đăng khác), phương thức arg () là cách đơn giản và nhanh nhất.
Nếu sau đó bạn cần các thuộc tính bổ sung, bạn có thể chạy node_load () để lấy ID. Giả sử bạn đang cố gắng để có được nút hiện tại, điều này có khá nhiều hiệu năng không đạt được.
Bạn có thể lấy ID của nút bằng cách gọi $node->nid
. Thật vậy, lấy ID từ URL không phải là giải pháp tốt nhất vì một ngày nào đó bạn có thể chuyển sang các URL thân thiện với SEO hơn.
Từ tài liệu này , có vẻ như $node
được định nghĩa trong page.tpl.php
, vì vậy nó sẽ có sẵn cho bạn.
<?php
// In a template file...
if ($node) {
echo $node->nid;
}
else {
// you are viewing taxonomy, view, etc
}
?>
Cách dễ nhất để làm điều này trong Drupal 8:
$path_args = explode('/', current_path());
print $path_args[1];
Một cách tiếp cận đáng tin cậy và thẳng tiến khác trong D7 sẽ là
<?php
if (isset($node->nid) && count($node->nid) > 0){
$nodeid = $node->nid;
}
?>
Đề xuất của Zourtney gây ra lỗi chỉ mục không xác định trong trường hợp của tôi.