Hiện đang cố gắng triển khai trường hình ảnh được tham chiếu nút trên trang web Drupal 7 của tôi, nó sẽ thay đổi 'chế độ xem' tùy thuộc vào logic lập trình ngay trước khi kết xuất. Trường hiện đang được hiển thị trên một số loại nội dung thông qua cài đặt chế độ hiển thị của chúng, mỗi loại đang sử dụng bộ định dạng trường 'Nút được kết xuất'.
nỗ lực đầu tiên
Ý tưởng đầu tiên của tôi là thực hiện như sau, coi móc là móc là móc:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
Rõ ràng là trao đổi HOOK cho tên mô-đun của tôi.
Nó không thực sự quan trọng nếu trên sẽ bắn trước hoặc sau khi chức năng ban đầu node_reference_field_formatter_view
trong node_reference.module
vì tôi hoặc là sẽ ghi đè nó ra hoàn toàn hay, hy vọng, sửa đổi các giá trị của nó trước khi vẽ. Vấn đề duy nhất là, cái móc ở trên dường như chỉ hoạt động trên cơ sở mỗi mô-đun - tức là nó không phải là toàn bộ trang web, vì vậy về cơ bản, nó không kích hoạt mô-đun của tôi.
Bây giờ rõ ràng tôi có thể viết trình định dạng trường của riêng tôi để xuất ra một nút được kết xuất. Nhưng có vẻ như một sự lãng phí khi xem xét đã có một cái tồn tại.
phương pháp khác
Các cách tiếp cận khác của tôi đã được HOOK_preprocess_node
và HOOK_preprocess_field
nhưng cái trước không chứa bất kỳ view_mode
thông tin nào , và cái sau chứa ít nhất 5 cấu trúc phức tạp khác nhau mà tất cả đều có tham chiếu đến một thuộc view_mode
tính ở các cấp độ khác nhau - và cảm thấy khá khó chịu khi phải sửa đổi từng thông tin của chúng các giá trị. Ngay cả khi tôi đã thay đổi một số view_mode
thuộc tính nhất định , hình ảnh kết quả sẽ không thay đổi.
câu hỏi
Có ai biết một cách rõ ràng để bước vào trước khi trình định dạng trường hiển thị (của mô-đun đóng góp) và thay đổi cài đặt trên cơ sở yêu cầu trên mỗi trang - tức là không phải thay đổi cài đặt chế độ xem vĩnh viễn của loại nội dung thực tế không?
view_mode
trên hook_preprocess_node
, đánh lừa tôi! Tôi tự hỏi liệu có thứ gì như thế hook_field_formatter_view_alter()
này tồn tại trong D8 không ...
hook_field_formatter_view_alter()
hoặc tương tự có lẽ trong hơn một năm nay, nó chỉ không tồn tại một cách đáng tiếc. FYIhook_preprocess_node()
chắc chắn không cóview_mode
sẵn cho nó, nó ở$vars['view_mode']
, không phải$vars['node']->view_mode
mà bạn có thể đã bị cám dỗ để thử.