Ich möchte ein Feld-Widget-Formular außerhalb des Kontexts des gesamten Knotenbearbeitungsformulars einbetten.
Ich habe in der Vergangenheit mit drupal_get_form vollständige Formulare angezeigt, aber dies scheint nicht für einzelne Feldformulare zu gelten.
Ist das Anzeigen eines funktionierenden Feld-Widget-Formulars möglich? Was wäre der beste Weg, dies zu tun?
Sowohl Feld-Widgets als auch "normale" Formulare scheinen sehr ähnlich zu sein. Wenn dies nicht möglich ist, was wäre erforderlich, um ein Widget-Formular in ein normales Formular umzuwandeln?
Diese Frage scheint nach etwas Ähnlichem zu fragen, aber ich verstehe die Antwort nicht. Diese Antwort gibt an, dass hook_field_widget_form_alter verwendet wird . Was ich nicht verstehe, ist, wie das Feldformular angezeigt wird und nicht, wie es angehängt wird, sobald es erstellt wird.
#access = FALSE
vorzunehmen, die in diesem Kontext hackig erschienen.Ich habe die von ttk vorgeschlagene Funktion intensiv genutzt, aber ich denke, dass ein aktuelles Update die Dinge durcheinander gebracht hat ...
Hier ist eine neue Version der vorherigen Lösung, die mit Drupal 7.22 und ctools 7.x-1.3 gut funktioniert.
Also, wie im vorherigen Beitrag, rufen Sie Ihre benutzerdefinierte Funktion folgendermaßen auf:
Beachten Sie, dass das Entity- Bundle jetzt ein Parameter ist. Ich habe dies getan, weil ich diese Funktion auch zum Bearbeiten von Benutzern verwendet habe. Auf diese Weise kann es auch für Taxonomiebegriffe oder andere Entitäten verwendet werden.
Und das
my_field_attach_form
ist definiert als:Diese Funktion hat mir viel Zeit gespart, hoffentlich auch für Sie!
quelle
Hier ist die Lösung mit der
ctools_field_invoke_field()
Methode. Fügen Sie in Ihrer benutzerdefinierten Formularfunktion Folgendes hinzu:wobei die
my_field_attach_form
Funktion definiert ist alsBeachten Sie, dass auf Ihrer Site ctools aktiviert sein muss. Es ist schade, dass Drupal standardmäßig keine solche Hilfsfunktion enthält.
quelle
Ich konnte die ctools-Methode nicht zum Laufen bringen und habe mich stattdessen für diese Methode entschieden.
Dieser Code würde sich innerhalb einer Formularfunktion befinden, sodass $ form und $ form_state bereits übergeben würden.
Erstellen Sie zunächst einen leeren Knoten eines Typs mit dem Feld, das Sie rendern möchten.
Ich habe die Formularvariablen dupliziert, um das Original nicht zu beschädigen.
Ziehen Sie das gesuchte Feld heraus und fügen Sie es dem Formular hinzu.
Ich habe diese Methode verwendet, um das Widget "Taxonomie auswählen", das Widget "Taxonomie-Kontrollkästchen" und das Widget " Hierarchische Auswahl" in einem benutzerdefinierten Formular zu rendern . (Taxonomy Autocomplete-Widget wird gerendert, aber beim Senden wird ein Fehler ausgegeben.)
Zum Schluss rendern und drucken
quelle
ctools_field_invoke_field()
oben beschriebene Methode funktioniert auch.Ich habe Formulare aus einzelnen Feldern mit erstellt
Dies sollte das gewünschte Widget-Formular zurückgeben, das in jeder beliebigen Form verwendet werden kann
Um die Werte für den obigen Parameter 2 zu erhalten, verwenden Sie:
Für andere Parameter können Sie den API-Link hier überprüfen
Dies gibt das Standard-Widget-Formular zurück, das im Feld Inhaltstypen definiert ist.
Hoffe das hilft jemandem :)
quelle