Próbuję uzyskać coś takiego jak powyżej (plik register.php dla buddypress), w momencie gdy użytkownik wybierze typ konta pojawia się jego opis po lewej, a także pola dodatkowe na dole. I generalnie od strony funkcjonalności działa na zasadach ogólnych dzięki jquery:
Kod
jQuery.noConflict()
jQuery(document).ready(function(){
( function ($) {
$("#field_106").val("Użytkownik");
$('#typ-fotograf').hide();
$('#pola-fotograf').hide();
$('#typ-autor').hide();
$('#pola-autor').hide();
$('#typ-uzytkownik').show();
$('#pola-uzytkownik').show();
$('#field_106').change(function () {
$('#typ-fotograf').hide();
$('#pola-fotograf').hide();
$('#typ-autor').hide();
$('#pola-autor').hide();
$('#typ-uzytkownik').hide();
$('#pola-uzytkownik').hide();
if (this.options[this.selectedIndex].value == 'Fotograf') {
$('#typ-fotograf').show();
$('#pola-fotograf').show();
var selected_type = 'fotograf';
}
if (this.options[this.selectedIndex].value == 'Autor') {
$('#typ-autor').show();
$('#pola-autor').show();
var selected_type = 'autor';
}
if (this.options[this.selectedIndex].value == 'Użytkownik') {
$('#typ-uzytkownik').show();
$('#pola-uzytkownik').show();
var selected_type = 'uzytkownik';
}
});
})(jQuery);
});
jQuery(document).ready(function(){
( function ($) {
$("#field_106").val("Użytkownik");
$('#typ-fotograf').hide();
$('#pola-fotograf').hide();
$('#typ-autor').hide();
$('#pola-autor').hide();
$('#typ-uzytkownik').show();
$('#pola-uzytkownik').show();
$('#field_106').change(function () {
$('#typ-fotograf').hide();
$('#pola-fotograf').hide();
$('#typ-autor').hide();
$('#pola-autor').hide();
$('#typ-uzytkownik').hide();
$('#pola-uzytkownik').hide();
if (this.options[this.selectedIndex].value == 'Fotograf') {
$('#typ-fotograf').show();
$('#pola-fotograf').show();
var selected_type = 'fotograf';
}
if (this.options[this.selectedIndex].value == 'Autor') {
$('#typ-autor').show();
$('#pola-autor').show();
var selected_type = 'autor';
}
if (this.options[this.selectedIndex].value == 'Użytkownik') {
$('#typ-uzytkownik').show();
$('#pola-uzytkownik').show();
var selected_type = 'uzytkownik';
}
});
})(jQuery);
});
Niestety problem pojawia się w momencie wysyłania formularza z powodu błędnej wartości w: input
<?php $_POST['selected_type'] = 'index'; } switch($_POST['selected_type']){ case 'fotograf': $acc_type_field_id = '104,106,121,122,123'; break; case 'autor': $acc_type_field_id = '104,106,115,116,117,118'; break; case 'uzytkownik': $acc_type_field_id = '104,106,115,116,117,118'; break; default: $acc_type_field_id = '104,106,115,116,117,118'; } ?>
plik register wyglada mniej wiecej tak
- divy ukryty do opisu
- form
- pola A (while) - w moim przypadku lista wyboru
- pola B z innego modułu
- div ukryty pokazujący pola C dla opcji pierwszej (while)
- div ukryty pokazujący C dla opcji drugiej (while)
- div ukryty pokazujący C dla opcji drugiej (while)
- input ukryty z lista id
- submit
- koniec forma
W mojej wersji po prostu pokazuje już załadowane ukryte pola, co powoduje problem z przechwyceniem dobrych id do ukrytego inputa, a to z kolei daje błędne warny w niewypełnionych polach z ukrytych divów. Wtedy pomyślałem własnie o switch, aby wykonać reszte kodu w momencie gdy użytkownik dokona wyboru. Ale nie działa to w ten sposób ponieważ nie potrafię przechwycyć zmiennej z jquery, a cały kod php już się wykonał (załadowana strona). A to na logikę oznacza, że całość kodu musi być przetworzona w jakiś inny sposób, tak by fizycznie w momencie wypełniania formularza był widoczny tylko jeden div z polami C-1 lub C-2 lub C-3 i na bazie tego zwrócona informacja z idkami do inputa.
Jestem laikiem w tym, robię to po omacku, będę wdzięczny za każdą sugestie w rozwiązaniu tego.
EDIT:
zmodyfikowałem SWITCH tak, aby zawierał moje pętle oraz odpowiedniego inputa, da się teraz załadować pola z adresu: ?select_type=cos, czyli pozostało mi podpiąc te akcję do mojego selectboxa, tak by przeładowywał tylko diva C
pytanie więc brzmi czy muszę ten kawałek kodu wywalić do osobnego pliku no i jak podpiąc te akcje do danej opcji z menu?