Próbuję użyć ajax, aby zaktualizować dwie różne części formularza drupal z jednego rozmycia danych wejściowych formularza.
Mam na wejściu standardowe rzeczy ajax:
$my_form['my_input']['#ajax'] = array(
'callback' => 'my_callback',
'wrapper' => 'my_target_div',
'event' => 'blur',
);
Działa to dobrze, zamieniając mój div, gdy dane wejściowe są aktualizowane ... jednak chcę również zaktualizować inny formularz wejściowy w innym miejscu formularza z innym kodem w wyniku rozmycia na moim oryginalnym danych wejściowych.
Czy to możliwe, jakieś pomysły?
Edycja: Dla jasności, oto mój przykład z prawdziwego świata:
- Typ zawartości „film”
- Dodano pole „primary_title”
- Kiedy 'primary_title' jest aktualizowany, moje wywołanie zwrotne ajax sprawdza podobne ciągi znaków i zwraca HTML
HTML z wywołania zwrotnego jest wstawiany do pustego div.
Ta część działa świetnie!
Próbuję również zmodyfikować standardowe wejście „tytuł” węzła, nadając mu wartość „primary_title” po wykonaniu wyrażenia regularnego w celu uporządkowania łańcucha (usunięcie „The” lub „A” od początku itp.) Wynik będą dwa pola tytułowe, jedno z pełnym tytułem „tytuł_podstawowy” i jedno przycięte „tytuł”, które będą przydatne do sortowania i wyświetlania rekordów.
Odpowiedzi:
Wygląda na to, że możesz kierować reklamy na różne części formularza za pomocą komend ajax, jednak musisz zwrócić tylko jedną z następujących opcji:
HTML lub
Renderowalna tablica lub
Tablica poleceń AJAX
W sytuacji, o której pierwotnie pisałem, próbowałem zwrócić zarówno tablicę poleceń AJAX, jak i tablicę do renderowania, co nie wydaje się możliwe.
Kod w module przykładów demonstruje celowanie w różne części formularza za pomocą tablicy poleceń AJAX:
W tym przykładzie kodu #html_div otrzymuje $ text, a osobno #html_status otrzymuje „Zaktualizowano html_command_example o text = $ text;”. data („r”). „”
Dwie różne lokalizacje w formularzu z dwiema różnymi informacjami z jednego wywołania zwrotnego ajax!
Patrząc ponownie na to, nad czym pracowałem, zdałem sobie sprawę, że wcale nie muszę zwracać pola tytułu węzła. Będzie to tylko pole narzędziowe, używane do sortowania danych na listach.
Ukryłem pole w formularzu węzła i jest ono wypełniane po raz drugi, kiedy mój formularz jest budowany po uruchomieniu mojego wywołania zwrotnego ajax.
źródło
Jestem całkiem nowy w Drupal, ale do tej pory uważałem, że framework Ajax jest raczej mało elastyczny. Działa świetnie, dopóki używasz go zgodnie z przeznaczeniem. Więc w twoim przypadku, jeśli znasz jakieś JS, najlepiej byłoby uczynić ten skrypt swoim własnym, powinien być bardzo lekki.
Powodzenia!
źródło
Inna opcja z drupal.org :
Funkcja wywołania zwrotnego może być tak prosta, jak:
Powinno to zostać wywołane z
#ajax
tablicy na elemencie formularza (field_whatever
na przykład poniżej) zdefiniowanym whook_form_FORM_ID_alter()
(lub pewnego rodzaju haczyku do zmiany formy), w którym również testujesz$form_state
i modyfikujesz$form
tablicę, na przykład:źródło