Ich versuche derzeit, auf meiner Drupal 7-Site ein knotenreferenziertes Bildfeld zu implementieren, das den Ansichtsmodus abhängig von der programmatischen Logik unmittelbar vor dem Rendern ändert. Das Feld wird derzeit für eine Reihe von Inhaltstypen über ihre Einstellungen für den Anzeigemodus gerendert, von denen jeder den Feldformatierer 'Gerenderter Knoten' verwendet.
erster Versuch
Meine erste Idee war, Folgendes zu implementieren, wenn man bedenkt, dass ein Haken ein Haken ist:
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;
}
}
Offensichtlich tausche HOOK gegen den Namen meines Moduls.
Es ist auch nicht wichtig , ob das oben vor oder nach der ursprünglichen Funktion feuern würde node_reference_field_formatter_viewin , node_reference.moduleweil ich entweder Ausgang den es außer Kraft setzen würde ganz oder hoffentlich ändert ihre Werte vor dem Rendern. Das einzige Problem ist, dass der obige Hook nur auf Modulbasis zu funktionieren scheint - dh er ist nicht standortweit, sodass er für mein Modul im Grunde nicht ausgelöst wird.
Jetzt kann ich natürlich meinen eigenen Feldformatierer schreiben, um einen gerenderten Knoten auszugeben. Aber es scheint eine Verschwendung zu sein, wenn man bedenkt, dass es bereits eine gibt.
andere Ansätze
Meine anderen Ansätze waren HOOK_preprocess_nodeund, HOOK_preprocess_fieldaber die ersteren enthalten keine view_modeInformationen, und die letzteren enthalten mindestens 5 verschiedene komplizierte Strukturen, die alle Verweise auf eine view_modeEigenschaft auf verschiedenen Ebenen haben - und es fühlt sich ziemlich hackig an, jede von ihnen modifizieren zu müssen Werte. Selbst wenn ich bestimmte view_modeEigenschaften geändert habe, ändert sich das resultierende Bild nicht.
Frage
Kennt jemand eine saubere Möglichkeit, vor dem Rendern eines Feldformatierers (eines Contrib-Moduls) einzugreifen und seine Einstellungen auf Seitenbasis zu ändern - dh indem die Einstellungen für den permanenten Ansichtsmodus des tatsächlichen Inhaltstyps nicht geändert werden müssen?
view_modeauf hook_preprocess_node, dumm ich! Ich frage mich, ob so etwas hook_field_formatter_view_alter()in D8 existiert ...
hook_field_formatter_view_alter()wahrscheinlich seit über einem Jahr nach einem oder ähnlichem gesucht , es existiert leider nicht. Zu Ihrerhook_preprocess_node()Information , esview_modesteht definitiv zur Verfügung, es ist in$vars['view_mode'], nicht$vars['node']->view_modedas , was Sie versucht haben könnten, es zu versuchen.