Speichern Sie Drupal 7-Webformulare im Code

8

Ich frage mich, ob es eine Lösung gibt, um Webformulare im Code zu speichern. Damit Sie sie problemlos auf anderen Websites duplizieren und mit Ihren eigenen Modulen bündeln können. Ich untersuche etwas Ähnliches wie die Views-API.

Wenn es nicht verfügbar ist, wie viele Personen interessieren sich für solche Funktionen? Ich könnte ein Modul entwickeln, das das Speichern von Webformularen in Code handhaben könnte. Und haben Sie Bedenken bei der Erstellung eines solchen Moduls?

Danke, Jaap

Jaap Jansma
quelle
Sie meinen Formulare, die mit dem Webform-Modul erstellt wurden?
Mołot
1
Ja, ich meine Formulare, die mit dem Webform-Modul erstellt wurden
Jaap Jansma
1
Eigentlich ist es sehr einfach. Sehen Sie sich nur an, wie Webform Share dies tut. ( webform_share_export()und webform_share_node_insert()sind die Geldfunktionen). Ich kann nicht sagen, dass ich der Verwendung von zustimme eval(), aber Sie können dies genauso einfach konvertieren, um stattdessen ein JSON-Objekt / eine serialisierte Zeichenfolge zu verwenden. Die einzige (kleine) Schwierigkeit, die Sie überwinden müssen, besteht darin, wie / wann Ihr Webformular auf einen neuen Knoten angewendet wird, wobei natürlich ein Knoten erforderlich ist, um das Webformular anzuhängen.
Clive

Antworten:

1

Nicht wirklich, und es besteht keine Notwendigkeit dafür

  1. Wenn Sie ein Formular benötigen, das aus Code verfügbar ist, sind Formular-API- Formulare nicht so schwer von Grund auf neu zu schreiben. Im Gegensatz zu Ansichten können Sie Webforms nur anhand ihrer Knoten-ID thematisieren. Dies würde sich von Site zu Site ändern, sodass mit dem Modul gebündelte Webform-Formulare nicht bequem sind.

  2. Wenn Sie Formulare mit Ihren Modulen bündeln möchten und aus irgendeinem Grund die Formular-API nicht verwenden können, bieten UUID-Funktionsintegration und Webform-Freigabe Möglichkeiten dazu. Es wird kein Code im reinen Sinne sein, aber es sollte funktionieren.

  3. Es ist relativ einfach zu verwenden hook_form_alter, um eine Formular-API-Darstellung eines bestimmten Webformulars zu erhalten. Natürlich werden Sie es in Zukunft nicht einfach ändern können, aber entgegen den Ansichten ist es wieder gut. Das Modul wird nicht verletzt, wenn einige Daten nicht angezeigt werden. Daten, die nicht oder auf eine Weise bereitgestellt werden, die das Modul nicht erwartet, können zu Problemen führen. Also wenn das Modul ein Formular benötigt, sollte es nicht leicht zu bearbeiten sein . Änderungen am Formular würden ohnehin Änderungen am Modulcode erfordern, sodass der Formular-API-Code in solchen Situationen die Dinge einfacher und auf lange Sicht nicht schwieriger macht.

Mołot
quelle
1
Dies ist zwar eine gute Antwort für die Alternative, aber ich denke, dass es eine ziemlich vernünftige Anfrage ist, Webformulare im Code zu behalten (ich stimme nicht zu, dass dies nicht erforderlich ist oder dass dies nicht wirklich möglich ist). Wenn Sie beispielsweise ein Basiskontaktformular mit einem Modul bereitstellen möchten, das dann von Benutzern über die Benutzeroberfläche erweitert werden kann, ist ein Webformular ideal. Das Erstellen dieser Benutzeroberfläche selbst wäre ein echtes Problem. Da sich das webformObjekt (oder Array?) Ohnehin auf dem Knotenobjekt befindet, kann es sehr einfach serialisiert und erneut angewendet werden
Clive
@Clive Aber warum sollte jemand für einen einfachen Kontakt echten Code benötigen? Warum würde ein exportierter Knoten (mit UUID Features Integration können Sie einen Knoten in ein Modul exportieren) nicht ausreichen?
Mołot
Synchronisiert dieses Modul auch das Webform-Objekt?
Clive
@Clive Soweit ich mich erinnere, mit einigen Problemen, aber ja. Ach ja, und wenn benutzerdefinierter Code muss Daten aus einem Formular, würde nicht machen Webformular es gefährlich sein? Ich kenne keine Möglichkeit, Felder in Webform gegen Löschen resistent zu machen (aber ich gebe zu, dass ich nicht so genau hingeschaut habe).
Mołot
1
In der Tat gibt es sogar einen Patch für Webform , damit die Integration funktioniert. Ich nehme es zurück :)
Clive