hook_entity_presave()
và hook_ENTITY_TYPE_presave()
không nên cho rằng thực thể đã được chỉnh sửa bằng biểu mẫu hoặc một trang đã được hiển thị cho người dùng. Các hook đó cũng được gọi khi một thực thể được tạo theo chương trình, ví dụ như với đoạn mã sau, mã này cũng có thể được sử dụng trong một hook_cron()
thực hiện.
giá trị $ = [
'loại' => 'bài báo',
'title' => 'Tiêu đề bài viết',
'uid' => 1,
'trạng thái' => ĐÚNG,
];
$node = \Drupal::entityManager()->getStorage('node')->create($values);
$node->save();
Móc được gọi trước khi một thực thể được hiển thị là hook_entity_view()
(hoặc hook_ENTITY_TYPE_view()
).
Sử dụng một trong những hook đó, một mô-đun có thể thêm một mảng kết xuất bổ sung vào xây dựng $
, ví dụ với $build['#attached']['library'][] = 'js/url-parameter.js';
.
Như mã ví dụ, $display->getComponent()
nên được sử dụng để xác minh trường thực thể đã được đặt để hiển thị, vì người dùng quản trị viên có thể ẩn các trường khỏi /admin/struct/types/manage/article/display (đối với Mạo từ loại nội dung). Ví dụ: với các cài đặt sau, tôi sẽ ẩn trường thực thể tùy chỉnh và thẻ lĩnh vực cho Mạo từ loại nội dung.
Tôi cũng sẽ kiểm tra giá trị của $view_mode
được chuyển đến các hook đó vì giá trị đó cho biết lý do tại sao nút được hiển thị. Ví dụ: khi mô-đun Tìm kiếm lập chỉ mục các nút, $view_mode
bằng 'search_index'
; khi một nút được thêm vào nguồn cấp dữ liệu RSS, $view_mode
bằng 'rss'
. Trong những trường hợp đó, có thể bạn không muốn thêm thư viện.