Ich habe ein benutzerdefiniertes Modul, das die Anzeige eines Bildfelds formatiert, das mehrere Werte annehmen kann. Ich möchte wissen, welchen Hook ich verwenden soll, um den ersten Wert des Feldes zu duplizieren (z. B. "[image1]") und ihn wieder an den Anfang des Arrays zu setzen ( array_unshift()
ich vermute), bevor der Rest meiner Funktionen das formatiert Anzeige / Thema des Feldes.
Also was war
- [image1]
- [image2]
- [image3]
wird
- [image1]
- [image1]
- [image2]
- [image3]
Ich werde sie dann separat thematisieren, aber ich denke, ich habe diesen Teil bereits herausgefunden.
Ich verwende gerade hook_field_formatter_view()
und habe versucht, es am Anfang des $items
Arrays oben in der Funktion einzufügen, aber das schien nicht zu funktionieren. Wenn ich sofort dprint_r()
das $items
Array danach zeige, werden aber nur 3 Items ausgegeben; Ich gehe davon aus, dass die Anzahl der Felder an anderer Stelle bestimmt wird.
hook_field_formatter_view
aber es läuft nur einmal pro Bild.Antworten:
Sie möchten stattdessen hook_field_formatter_prepare_view () . Beachten Sie, dass dieser Hook für eine Gruppe von Entitäten ausgeführt wird, nicht für eine einzelne.
Hier ist ein funktionierender Ausschnitt. Einige Array-Fu werden benötigt, um keine hässliche Schleife von zehn Zeilen zu schreiben, da Deltas linear erhalten bleiben müssen.
quelle
hook_field_formatter_view()
In Ihrem Code wird die Ausgabe erstellt, die dem Benutzer angezeigt wird, und daher wird ein darstellbares Array als Rückgabewert benötigt. Verarbeiten Sie das erste Bild also einfach zweimal und geben Sie ihm eine andere CSS-Klasse oder so.Etwas wie:
Da
hook_field_formatter_view()
ein renderbares Array erwartet wird und renderbare Arrays beim Rendern als gerendert markiert werden, wird beim Rendern eines als gerendert markiert und beim nächsten Mal ignoriert, wenn nur zwei Verweise auf dasselbe Objekt erstellt werden.quelle