Jestem zainteresowany osadzeniem formularza widżetu pola poza kontekstem formularza edycji całego węzła.
W przeszłości wyświetlałem pełne formularze za pomocą drupal_get_form, ale wydaje się, że nie dotyczy to pojedynczych formularzy pól.
Czy możliwe jest wyświetlenie działającego formularza Field Widget? Jaki byłby to najlepszy sposób?
Zarówno widżety pola, jak i „normalne” formularze wydają się bardzo do siebie podobne, więc jeśli nie jest to możliwe, co byłoby wymagane do „zmiany” formularza widżetu na normalny?
To pytanie pojawia się pytać o coś podobnego, ale nie rozumiem odpowiedzi. Ta odpowiedź określa użycie hook_field_widget_form_alter ; nie rozumiem, jak wyświetlić formularz pola, a nie jak go zaczepić po utworzeniu.
#access = FALSE
które w tym kontekście wydawały się hakerskie.Intensywnie korzystałem z funkcji sugerowanej przez ttk, ale myślę, że ostatnia aktualizacja pomieszała ...
Oto nowa wersja poprzedniego rozwiązania, która działa dobrze z Drupal 7.22 i ctools 7.x-1.3.
Tak jak w poprzednim poście, wywołujesz swoją funkcję niestandardową w następujący sposób:
Zauważ, że pakiet encji jest teraz parametrem. Zrobiłem to, ponieważ użyłem tej funkcji również do edycji użytkowników. W ten sposób można go również wykorzystać do określenia taksonomii lub dowolnego innego podmiotu.
I
my_field_attach_form
jest zdefiniowany jako:Ta funkcja pozwoliła mi zaoszczędzić dużo czasu. Mam nadzieję, że również dla Ciebie!
źródło
Oto rozwiązanie wykorzystujące tę
ctools_field_invoke_field()
metodę. W funkcji formularza niestandardowego dodaj:gdzie
my_field_attach_form
funkcja jest zdefiniowana jakoPamiętaj, że Twoja witryna musi mieć włączone narzędzia Ctools. Szkoda, że Drupal nie zawiera domyślnie takiej funkcji pomocnika.
źródło
Nie mogłem uruchomić metody ctools i postanowiłem zrobić to w ten sposób.
Ten kod byłby wewnątrz funkcji formularza, więc $ form i $ form_state zostałyby już przekazane.
Najpierw utwórz pusty węzeł typu, który ma pole, które chcesz renderować.
Zduplikowałem zmienne formularza, aby nie zablokować oryginału.
Wyciągnij pole, którego szukasz, i dodaj je do formularza.
Użyłem tej metody do renderowania widżetu wyboru taksonomii, widżetu pól wyboru taksonomii i widżetu Hierarchical Select w formularzu niestandardowym. (Widżet autouzupełniania systematyki renderuje, ale zgłasza błąd przy wysyłaniu)
Na koniec renderuj i drukuj
źródło
ctools_field_invoke_field()
wyżej opisana metoda również działa.Za pomocą stworzyłem formularze z pól niepodzielnych
powinno to zwrócić wymagany formularz widżetu, którego można użyć w dowolnej formie
Aby uzyskać wartości powyższego parametru 2, użyj:
W przypadku innych parametrów możesz sprawdzić link interfejsu API tutaj
Zwraca domyślny formularz widgetu zdefiniowany w polu typów zawartości.
Mam nadzieję, że to komuś pomoże :)
źródło