J'essaie actuellement d'implémenter un champ d'image référencé par nœud sur mon site Drupal 7 qui changera son «mode d'affichage» en fonction de la logique de programmation juste avant le rendu. Le champ est en cours de rendu sur un certain nombre de types de contenu via leurs paramètres de mode d'affichage, chacun utilisant le formateur de champ «Noeud rendu».
premier essai
Ma première idée a été d'implémenter ce qui suit, considérant qu'un crochet est un crochet est un crochet:
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;
}
}
Échange évident de HOOK pour le nom de mon module.
Il n'a pas vraiment d' importance si le serait au- dessus de feu avant ou après la fonction d' origine node_reference_field_formatter_view
en node_reference.module
parce que je soit remplacer entièrement sa sortie ou, je l' espère, modifier ses valeurs avant de rendre. Le seul problème est que le crochet ci-dessus semble fonctionner uniquement par module - c'est-à-dire qu'il n'est pas à l'échelle du site, donc en gros il ne se déclenche pas pour mon module.
Maintenant, je peux évidemment écrire mon propre formateur de champ pour sortir un nœud rendu. Mais cela semble un peu un gaspillage étant donné qu'il y en a déjà un qui existe.
d'autres approches
Mes autres approches ont été HOOK_preprocess_node
et HOOK_preprocess_field
mais la première ne contient aucune view_mode
information, et la seconde contient au moins 5 structures compliquées différentes qui ont toutes des références à une view_mode
propriété à différents niveaux - et il semble plutôt hacky de devoir modifier chacune de leurs valeurs. Même lorsque j'ai modifié certaines view_mode
propriétés, l'image résultante ne change pas.
question
Quelqu'un connaît-il un moyen propre d'intervenir avant le rendu d'un formateur de champ (d'un module contrib) et de modifier ses paramètres sur une base de demande par page - c'est-à-dire en n'ayant pas à modifier les paramètres du mode d'affichage permanent du type de contenu réel?
view_mode
le hook_preprocess_node
, stupide moi! Je me demande si quelque chose comme hook_field_formatter_view_alter()
ça existe dans D8 ...
hook_field_formatter_view_alter()
ou similaire depuis probablement plus d'un an maintenant, il n'existe tout simplement pas malheureusement. Pour votre information , sanshook_preprocess_node()
aucun doute n'avoir à sa disposition, il est dans , pas que vous auriez pu être tentés d'essayer.view_mode
$vars['view_mode']
$vars['node']->view_mode