2010-10-13 10 views
5

W drupal fapi znajduje się atrybut "#process" .co dokładnie to robi? Dlaczego pole hasła używa go do duplikowania pól, zamiast dodawać je z motywem?
Chcę go użyć do zdefiniowania nowego typu pola z elementami hook_elements.Jakie jest zastosowanie wywołania zwrotnego "#process" w aplikacji API w postaci drupala?

Edit:
tutaj jest moje hook_elements:

function test_elemets() { 
    return array(
     'test_field' => array( 
      '#input' => TRUE, 
      '#process' => array('test_field_process'), 
     ) 
    ); 
} 

i proces wywołania zwrotnego:

function test_field_process($element, $edit, &$form_state, $complete_form) { 
    $element = array();  
    return $element;  
} 

jak widać funkcja procesu użyłem $ elementu = array(), aby zobaczyć co się dzieje. Ale formularz jest pokazany tak, jak było wcześniej. Dlaczego?

Odpowiedz

9

Przeczytaj the Forms API documentation on the '#process' form element property.

Jest to tablica funkcji wywołania zwrotnego, z których każda zostanie wywołana wraz z przekazaną do niej tablicą definicji elementów. Funkcja wywołania zwrotnego może następnie działać w tablicy definicji elementów, aby zmienić ją w inną (zwykle bardziej złożoną) definicję, np. duplikowanie pola hasła podczas dołączania pliku JavaScript sprawdzającego równość lub przekształcenie jednej połączonej definicji "radia" w odpowiednią liczbę pojedynczych definicji "radia" itp.

Będziesz chciał z niego skorzystać, jeśli chcesz zaoferować złożony element formularza (np. połączenie wielu "standardowych" elementów w połączeniu lub jeden z automatycznym dodawaniem standardowych pomocników JavaScript), ale nadal zachowują proste, deklaratywne podejście interfejsu API Forms. (Look Ma - tylko jeden '#type' = 'myCrazyFormElement' tablicą, która rozszerza „automagicznie” do czegoś o wiele bardziej złożonego;)

Robi to poprzez warstwę Skórki może być możliwe, w zależności od przypadku użycia, ale wymaga więcej kodu , za każdym razem potrzebujesz tego.

4

api.drupal.org documentation on #process mówi:

Tablica funkcji, które nazywane są gdy element jest przetwarzany. Korzystając z tego oddzwaniania, moduły mogą "rejestrować" kolejne akcje. Na przykład typ formularza "radia" jest rozszerzany do wielu przycisków opcji za pomocą funkcji przetwarzania .

Przetwarzanie różni się od motywu w formularzu API. Nie możesz zmienić tablicy formularzy w warstwie kompozycji (przynajmniej nie w D6). Hasło konkretnie, dodaje form_expand_ahah do # proces. Można prawdopodobnie kludge że większość w warstwie motyw, ale nie tej linii:

$element['#cache'] = TRUE; 

Ponieważ buforowanie się dzieje przed warstwą rozrywki, które nie mogą być wykonane w warstwie tematycznej. Mówiąc ogólniej, podczas gdy niektóre z tego, co dzieje się w #process mogą zdarzyć się w warstwie tematycznej, nie wszystko może się tam zdarzyć, ponieważ formularze są czymś więcej niż front-endem; są również przetwarzaniem zaplecza.

+0

Dziękuję. Ale dlaczego moduł zapewnia element nie dodaje tych poleceń do samej funkcji hook_elements? Na przykład dlaczego napisać $ element ['# cache'] = TRUE w funkcji procesu zamiast hook_elements? –

Powiązane problemy