Tytuł w zasadzie mówi wszystko, chcę wyłączyć pojedyncze pole wyboru typu FAPI typu pola wyboru .
Nie chcę tego robić z JavaScriptem, nie zmieniam go z pól wyboru na wiele pól wyboru elementów wyboru, ponieważ element jest dostarczany przez inny moduł.
Myśli?
Odpowiedzi:
Czysty sposób istnieje w Drupal 7! Najwyraźniej w tym poście nie jest jeszcze udokumentowany.
Innym przykładem .
Możesz także ustawić funkcję #access na FALSE, aby całkowicie ukryć pole wyboru.
źródło
Niestety w FAPI nie ma naprawdę czystego sposobu na zrobienie tego. Najlepiej - jeśli jesteś zdecydowany - zmienić dodatkową funkcję #process na element pól wyboru.
Domyślna funkcja dodana do elementów typu „pola wyboru” jest w rzeczywistości funkcją ( expand_checkboxes () ) dzieli pojedynczy element na wiele elementów typu „pole wyboru”, które są później scalane z powrotem w jeden. Jeśli miałbyś zastosować drugą funkcję procesu, może sięgnąć do rozszerzonej grupy elementów „pola wyboru” i wyłączyć tę, o której mowa.
Poniższy kod jest całkowicie nieprzetestowany, więc zastrzegaj emptor:
źródło
preg_replace()
przez wynik.Oto mój kod dla Drupala 7, aby zmienić element Role na stronie Edytuj użytkownika.
źródło
Używam pól wyboru jako „przypisuj” i „cofnij przypisanie”. Klient poprosił mnie o wyłączenie „cofnięcia przypisania”, ale nadal ważne jest przedstawienie „przypisania”. Pamiętając, że pola wyboru WYŁĄCZONE są przesyłane jako „fałszywe” i jeśli nie są odpowiednio obsługiwane, cofną przypisanie, podzielę swoje pola wyboru na „przetwarzaj je” i „ignoruję te wyłączone”. Oto jak:
Zauważ, że „partner_assignments” jest własną tablicą / zmienną i nie będzie przetwarzane jako „unignign” w moim przypadku użycia. Dzięki za wysłanie - doprowadziło mnie do tego rozwiązania.
źródło
D7 W tym miejscu musieliśmy się upewnić, że dodając węzeł, pewna opcja odniesienia terminu taksonomicznego jest zawsze nie do sprawdzenia i zawsze zostanie zapisana w węźle. Więc przeszliśmy do #after_build i wyłączyliśmy tę opcję, ale musieliśmy się upewnić, że w końcu ta opcja zostanie przekazana. Bo tylko wyłączenie go zatrzymałoby podróż tej opcji do przyszłych haków.
Tak wygląda wyłączona opcja:
źródło
Nie mogłem sprawić, aby odpowiedź Eatona działała tak, jak napisano (wywołanie zwrotne #process nic nie zwraca, i jest wywoływane przed rozwinięciem pól wyboru). Chciałem też zwrócić wartość z wyłączonego pola wyboru (chciałem, aby była trwale zaznaczona ). To zadziałało dla mnie (D6).
Jeśli ktoś zna lepszy sposób, chciałbym to usłyszeć!
źródło
Fatal error: Call to undefined function expand_checkboxes()
Oto mój kod dla Drupala 7, aby zmienić element Role na stronie Edytuj użytkownika.
źródło
W Drupal 7, aby wyłączyć opcje zaznaczenia w obiekcie polowym, stwierdziłem, że musiałem zainstalować
#process
funkcję. Niestetyform_process_checkboxes
spowodowało to wyłączenie wbudowanej funkcji procesu , dlatego należy ją ponownie dodać (lub wywołać z funkcji procesu). Dodatkowo, wyłączając pola wyboru, które są już zaznaczone, odkryłem, że wbudowana funkcja callback (form_type_checkboxes_value
) ignoruje wartości domyślne podczas pobierania wyników z danych wejściowych.Następnie coś takiego:
I w końcu:
Nie stwierdziłem, że w tym przypadku zadziałała żadna inna odpowiedź na tej stronie.
źródło
Oto mój przykład (za pomocą
#after_build
):Plus następujące wywołanie zwrotne funkcji:
Testowany na Drupal 6, ale powinien również działać na Drupal 7.
Drupal 6
Możesz użyć następującej funkcji ( źródło ):
źródło
Korzystam z następującego kodu w drupal 6: -
a funkcja oddzwaniania jest tutaj: -
/ ** * Przetwarzaj każde pole wyboru na podstawie „feture” jest już używane przez subdomenę lub nie. * @param Array $ element tablicy pól formularzy * /
źródło
Jedną ważną rzeczą do uwzględnienia jest to, że wyłączone pola wyboru nie są przesyłane, więc może się okazać, że musisz wymusić
#value
zaznaczenie pola wyboru. Na przykład:W moim przypadku bez tego
$form_state['values']
nie zawierało mojej wartości pola wyboru (które było domyślnie włączone, ale wyłączone).źródło
Zaczep pole tekstowe i utwórz dynamiczne pole tekstowe z informacjami z bazy danych
1 ° zdobądź assoc. tablica z bazy danych np
2 ° osprzęt
hook_form_alter()
/ ** * Implementuje hook_form_alter (). * identyfikator formularza = odsłonięty formularz * /
3 ° będzie możliwe do sprawdzenia wiele pól!
źródło
Jeśli budujesz własny formularz, zamiast uruchamiać osobne funkcje form_alter / # process / # pre_render, możesz po prostu przełączyć się z „pól wyboru” na generowanie pojedynczych elementów „pola wyboru”.
'#tree' => TRUE
daje taką samą strukturę drzewa, jak wersja pól wyboru, gdy tablica $ form_state ['wartości'] dotrze do sprawdzania poprawności / przesłania / odbudowania. Jeśli z jakiegoś powodu nie możesz lub nie chcesz używać #tree, nadaj każdemu polu wyboru'#parents' => array('my_element', $key)
właściwość, aby jawnie ustawić swoją pozycję w strukturze wartości.źródło