Przechowuj formularze internetowe Drupal 7 w kodzie

8

Zastanawiam się, czy istnieje jakieś rozwiązanie do przechowywania formularzy internetowych w kodzie. Abyś mógł łatwo kopiować je na innych stronach i łączyć je z własnymi modułami. Patrzę na coś podobnego jako interfejs API widoków.

Jeśli nie jest dostępne, ile osób jest zainteresowanych taką funkcjonalnością? Mogę opracować moduł, który mógłby obsługiwać przechowywanie formularzy internetowych w Code. Czy masz jakieś obawy związane z tworzeniem takiego modułu?

Dzięki, Jaap

Jaap Jansma
źródło
Masz na myśli formularze utworzone za pomocą modułu Webform?
Mołot
1
Tak, mam na myśli formularze utworzone za pomocą modułu internetowego
Jaap Jansma,
1
To naprawdę bardzo proste, wystarczy spojrzeć na to, jak robi to udział Webform . ( webform_share_export()i webform_share_node_insert()są funkcjami pieniężnymi). Nie mogę powiedzieć, że akceptuję użycie eval(), ale można równie łatwo przekonwertować to na użycie obiektu JSON / serializowanego ciągu. Jedyną (małą) trudnością, którą musisz pokonać, jest to, w jaki sposób / kiedy twój formularz internetowy jest stosowany do nowego węzła, przy czym węzeł jest oczywiście wymagany do dołączenia formularza internetowego.
Clive

Odpowiedzi:

1

Niezupełnie i nie ma takiej potrzeby

  1. Jeśli potrzebujesz formularza dostępnego z kodu, formularze Form API nie są trudne do napisania od zera. W przeciwieństwie do widoków, można tylko tworzyć motywy formularzy internetowych w ich identyfikatorach węzłów, a to zmieniałoby się z witryny na witrynę, więc formularze WWW połączone z modułem nie będą wygodne.

  2. Jeśli chcesz połączyć formularze ze swoimi modułami i z jakiegokolwiek powodu nie możesz użyć Form API, integracja funkcji UUID i udział w formularzu internetowym zapewniają sposoby na to. Nie będzie to kod w czystym znaczeniu, ale powinien działać.

  3. Jest stosunkowo łatwy w użyciu, hook_form_alteraby uzyskać reprezentację formularza API dla konkretnego formularza internetowego. Oczywiście nie będziesz w stanie łatwo tego zmienić w przyszłości, ale znowu, wbrew poglądom, jest dobrze. Moduł nie ucierpi, jeśli niektóre dane nie zostaną wyświetlone. Dane, które nie zostały dostarczone lub zostały dostarczone w sposób, którego moduł się nie spodziewa, mogą spowodować uszkodzenie. Więc jeśli moduł potrzebuje formy, to nie powinno być łatwe do edycji . Edycja formularza wymagałaby i tak edycji kodu modułu, więc kod Form API ułatwia, a nie utrudnia na dłuższą metę, w takich sytuacjach.

Mołot
źródło
1
Chociaż jest to dobra odpowiedź na alternatywę, myślę, że chęć zachowania formularzy internetowych w kodzie jest dość rozsądnym żądaniem (nie zgadzam się, że nie jest to potrzebne lub że to naprawdę niemożliwe). Na przykład, jeśli chcesz dostarczyć podstawowy formularz kontaktowy z modułem, który użytkownicy mogą następnie rozszerzyć za pomocą interfejsu użytkownika, formularz internetowy byłby idealny. Samo zbudowanie tego interfejsu byłoby prawdziwym bólem. Ponieważ webformobiekt (lub tablica?) I tak znajduje się na obiekcie węzłowym, można go łatwo serializować i ponownie zastosować
Clive
@Clive Ale dla podstawowego kontaktu, dlaczego ktokolwiek miałby wymagać prawdziwego kodu? Dlaczego eksportowany węzeł (z UUID Features Integration możesz eksportować węzeł do modułu) nie wystarczy?
Mołot
Czy ten moduł również synchronizuje obiekt Webform?
Clive
@Clive O ile pamiętam, z pewnymi problemami, ale tak. Aha, a jeśli niestandardowy kod potrzebuje danych z formularza, czy uczynienie go formularzem internetowym nie byłoby niebezpieczne? Nie znam sposobu uczynienia pól odpornymi na usuwanie w formularzu internetowym (ale przyznaję, że nie wyglądałem tak mocno).
Mołot
1
Rzeczywiście, istnieje nawet łatka do formularza internetowego, aby integracja działała. Cofam to :)
Clive