Một số trang (đường dẫn) đại diện cho một thực thể. Ví dụ:
- Các trang tại các đường dẫn này đại diện cho một thực thể nút, entity_id (nid) là XX:
- / nút / xx
- / nút / xx / xóa
- / nút / xx / chỉnh sửa
- Trang tại đường dẫn này đại diện cho một thực thể máy chủ tìm kiếm (được xác định bởi mô-đun api tìm kiếm), entity_id (machine_name) là 'apache_solr':
- / admin / config / search / search_api / server / apache_solr
Làm thế nào để bạn tải dữ liệu cơ bản về thực thể này (id và loại) khi hook hoặc chức năng bạn đang ở không trao nó cho bạn?
Cách tiêu chuẩn để có được thực thể hiện tại rõ ràng là sử dụng menu_get_object($entity_type,$position_of_id_in_url)
. Tuy nhiên, điều này giả định rằng bạn đang mã hóa chỉ một loại thực thể: bạn cần nêu rõ loại thực thể theo chương trình, và thậm chí tệ hơn, con người cần nghiên cứu và mã cứng ở vị trí url của id thực thể mà thực thể này sử dụng .
Gần nhất tôi có thể tìm thấy cho đến nay là lấy uri hệ thống cơ bản cho trang (ví dụ substr(request_uri(),strlen($base_path))
), sau đó viết một danh sách chuyển đổi quái dị dựa trên một cái gì đó như gợi ý này , đoán và sau đó là các trường hợp mã hóa cứng cho mọi thực thể có thể bạn nghĩ rằng một trang web có thể có . Nhưng phải có một cái gì đó tốt hơn thế, phải không?
Mặc dù giải pháp chung từ cốt lõi sẽ là tốt nhất, tôi cũng sẽ chấp nhận câu trả lời phụ thuộc vào các mô-đun phổ biến như ctools (trình quản lý trang, ngữ cảnh, v.v.), API thực thể , Devel , v.v.
Nhu cầu trước mắt của tôi là các biểu mẫu chỉnh sửa, bên trong hook_field_widget_form()
, đối với một tiện ích có thể (với cấu hình và mô-đun phù hợp) được đính kèm với bất kỳ loại thực thể có thể thực hiện được. Vì vậy, trong khi một giải pháp chung là tốt nhất, tôi cũng sẽ chấp nhận một câu trả lời hẹp chỉ hoạt động trong hàm này hoặc dưới dạng (Id và dữ liệu dành riêng cho loại thực thể dường như bị chôn vùi dưới dạng $, nhưng được khóa trong một thực thể gõ cách cụ thể, vì vậy việc đưa nó ra khỏi dạng $ có vẻ giống như vấn đề về gà và trứng).
------------ BIÊN TẬP ------------------
Có vẻ một số người gặp khó khăn trong việc hiểu vấn đề chung đơn giản. Đây là trường hợp sử dụng thay thế (một vấn đề khác nhưng có liên quan tôi đang gặp phải). Giả sử bạn có một khung nhìn liệt kê một số thực thể. Chế độ xem này nằm dưới dạng một khối / khung trên các trang có thể đại diện cho một thực thể, chẳng hạn như trang nút hoặc hồ sơ người dùng (hoặc cả hai). Bạn đã có một hook được thiết lập để đọc dữ liệu lượt xem và xem qua kết quả ( foreach $view->result as...
). Hãy nói rằng đó là hook_view_pre numnder, có nghĩa là bạn chỉ có đối tượng $ view. Bạn muốn làm một cái gì đó (giả sử, xóa hàng hoặc thay đổi một số dữ liệu trường) nếu hàng kết quả xem có cùng loại id thực thể và loại thực thể như trang. Bạn đã có logic để trích xuất dữ liệu này từ kết quả xem, vì vậy tất cả những gì bạn cần là tìm kiếm entity_type và entity_id của trang đang được tạo để so sánh. Dữ liệu đó ở Drupal ở đâu đó. Nếu không, Drupal không thể hiểu rằng cần phải tải chế độ xem này. Vậy làm thế nào để bạn có được nó khi nó không được chuyển đến hook hoặc chức năng bạn đang ở?