Przejdź do głównej zawartości

Profile 2 feat. hook_form_alter i #states

Przypadek:
Masz formularz rejestracji użytkownika stworzony z poziomu modułu Profile2 w którym chcesz aby jakieś pole pojawiało się gdy np. wybrany checkbox zostanie zaznaczony.
Rozwiązaniem jest stworzenie własnego modułu z wykorzystaniem hook_form_alter i dodanie do wybranego pola atrybutu #states.

Problem:
Standardowo wystarczy podać samą nazwę pola które steruje widzialnością i wszystko gra. Jednak w przypadku Profile2 to nie zadziałało i nie mogłem pojąć dlaczego... .

Rozwiązanie:
Otóż okazało się, że wszystkiemu winna była źle podawana nazwa pola sterującego, która powinna wyglądać mniej więcej tak:
profile_nazwaprofilu[field_nazwapola][jezyk][parametr_value_pola]
a w praktyce najlepiej użyć Firebuga, zaznaczyć pole  i skopiować wartość jego atrybutu name :)

Oto przykładowy kod:


/**
 * Implements hook_form_alter().
 */
function testmodul_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'user_register_form') {
$form['profile_fadehelix']['field_inne_opcje']['#states'] = array(
'visible' => array(':input[name="profile_fadehelix[field_opcje][und][inne]"]' => array('checked' => TRUE)),
);
return $form;
}
}

* field_inne_opcje to pole tekstowe które ma się pojawić po zaznaczeniu checkboxa field_opcje[und][inne]

Komentarze

Popularne posty z tego bloga

Praca z domu - subiektywne spojrzenie szarego programisty.

Siednij ze se na gronicku W lesie albo przy strumycku I posłuchoj co ci w kodzie gro

Zbuduj sobie zespół. Z klocków Lego.

Najlepsze architektury, wymagania i projekty powstają w samoorganizujących się zespołach. 

Czasami lepiej użyć IRC niż narzekać na Drupala.

Efektem ubocznym, który wystąpił u mnie po  Drupal Global Sprint Weekend , było nawrócenie się na używanie IRC. Wiadomo, ten protokół zna każdy geek - istniał od zarania internetu i był głównym źródłem łączności z ludźmi na całym świecie -  ale byłem przekonany, że jego czas minął i jest to już "andegrand", a jego rolę przejęły twittery, stack overflow, czy fora. I tu nastąpiła niespodzianka! O tym, jakim byłem ignorantem, przekonałem się w chwilę, po wejściu na kanał #drupal -  zobaczyłem jaka występuje na nim aktywność i opadła mi szczęka, a gdy po godzinie przekonałem się, że tych sześciuset (!) użytkowników to nie boty, tylko ludzie, którzy chętnie służą pomocą i są bardzo konkretni... chyba najbardziej dosadnym będzie stwierdzenie, że dostałem skrzydeł. Naprawdę, nagle poczułem, że wokół mnie jest wielu ludzi, którzy używają drupala, też mają dziwne problemy, że są na to wszystko rozwiązania i że są ludzie, którzy faktycznie chcą ci pomóc. Wiadomo, IRC rządzi ...