현재 Drupal 7 사이트에서 렌더링 직전의 프로그래밍 논리에 따라 '보기 모드'로 변경되는 노드 참조 이미지 필드를 구현하려고합니다. 이 필드는 현재 디스플레이 모드 설정을 통해 여러 컨텐츠 유형에서 렌더링되고 있으며 각각은 필드 포맷터 '렌더링 된 노드'를 사용합니다.
첫번째 시도
첫 번째 아이디어는 후크가 후크가 후크라는 것을 고려하여 다음을 구현하는 것이 었습니다.
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;
}
}
분명히 내 모듈의 이름을 HOOK로 교환합니다.
출력을 완전히 무시하거나 렌더링하기 전에 값을 수정하기 때문에 위의 함수 node_reference_field_formatter_view
가 원래 함수 전후에 발생하는지는 중요하지 않습니다 node_reference.module
. 유일한 문제는 위의 후크가 모듈 단위로만 작동하는 것 같습니다. 즉, 사이트 전체가 아니므로 기본적으로 내 모듈에 대해 실행되지 않습니다.
이제 분명히 자신의 필드 포맷터를 작성하여 렌더링 된 노드를 출력 할 수 있습니다. 그러나 이미 존재하는 것을 고려하면 약간의 낭비처럼 보입니다.
다른 접근법
내 다른 접근 방법에왔다 HOOK_preprocess_node
하고 HOOK_preprocess_field
있지만 이전은 포함되지 않은 view_mode
정보를, 후자는 모든이에 대한 참조가 있는지 적어도 5 개 가지 복잡한 구조를 포함 view_mode
다른 수준에서 속성을 - 그리고 그것의 각을 수정해야 오히려 해키 느낌이 자신의 가치. 특정 view_mode
속성을 변경해도 결과 이미지는 변경되지 않습니다.
질문
누구나 필드 포맷터가 (구속 모듈로) 렌더링하기 전에 페이지 단위로 요청을 변경하는 방법 (예 : 실제 컨텐츠 유형의 영구적 인보기 모드 설정을 변경할 필요가 없음)을 알고있는 확실한 방법을 알고 있습니까?
view_mode
on 을 지적 해 주셔서 감사합니다 hook_preprocess_node
. hook_field_formatter_view_alter()
D8에 이런 것이 있는지 궁금합니다 .
hook_field_formatter_view_alter()
아마 지금 1 년 이상 또는 비슷한 것을 찾고 있었지만 불행히도 존재하지 않습니다. 참고로hook_preprocess_node()
확실히 않습니다 이view_mode
그것을 사용할 수, 그것에서이다$vars['view_mode']
, 아니$vars['node']->view_mode
당신이 시도하는 유혹되었을 수있다.