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. 

Potworne debugowanie Actionscript

Przyznam się do czegoś... nie ogarniam debuggera Flasha do Actionscript3... Na pewno nie ma tam okienka z wylistowanymi instancjami obiektów? Ze zmiennymi? Jeśli jest i ktoś mi to udowodni, to będę szczęśliwszym człowiekiem, ale i tak dalej będę korzystał z wynalazku o wesołej nazwie De MonsterDebugger . Jest to zewnętrzna aplikacja napisana w AIR , która jest takim samobieżnym   Firebugiem dla deweloperów flashowych. Ogólna zasada działania opiera się na zaimportowaniu klasy MonsterDebugger i stworzeniu jej obiektu. Potem możemy się już bawić używając jej różnorakich metod, z których podstawową jest oczywiście trace(). Nie jest ona potrzebna we Flash IDE, ale okazuje się być bezcenna, gdy piszemy w samym FlashDevelop . Polecam przejrzeć szczegółowy i ładnie przedstawiony spis ficzerów DeMonstera.