CakePHP 3 i jQuery - opcjonalne pola
W tej części zaimplementujemy pokazywanie i ukrywanie opcjonalnych pól formularza za pomocą jQuery. Załóżmy, że mamy dwa typy użytkowników osoba fizyczna i firma. Jeden lub drugi musi być wprowadzony, ale nie chcemy wymagać informacji o firmie dla osoby fizycznej lub odwrotnie. Możemy więc włączyć/wyłączyć wymagania i wyświetlić/ukryć sekcje na podstawie wyboru. Najpierw w pliku src/Template/Layout/default.ctp dodajemy w sekcji head bibliotekę jQuery.
echo $this->Html->script('http://code.jquery.com/jquery.min.js');Następnie w formularzu dodawania użytkownika /src/Template/Users/add.ctp dodajemy pole wyboru i używamy jQuery do pokazywania i ukrywania oraz włączania i wyłączania wymaganych pól.
<?php echo $this->Form->input('user', ['type' => 'radio', 'label' => 'user is:', 'options' => ['Business', 'Individual'], 'required' => true]); ?> <div class="business" style="display:none"> <?php echo $this->Form->input('business_name', ['required' => true]); echo $this->Form->input('business_telephone'); echo $this->Form->input('business_address', ['required' => true]); echo $this->Form->input('business_city', ['required' => true]); echo $this->Form->input('business_state', ['required' => true, 'options' => $states]); echo $this->Form->input('business_zip', ['required' => true]); ?> </div> <div class="individual" style="display:none"> <?php echo $this->Form->input('name', ['required' => true]); echo $this->Form->input('telephone'); echo $this->Form->input('address', ['required' => true]); echo $this->Form->input('city', ['required' => true]); echo $this->Form->input('state', ['required' => true, 'options' => $states]); echo $this->Form->input('zip', ['required' => true]); ?> </div> <script type="text/javascript"> if (jQuery('#user-0').is(':checked')) { showAndRequire('.business', true); showAndRequire('.individual', false); } else if (jQuery('#user-1').is(':checked')) { showAndRequire('.individual', true); showAndRequire('.business', false); } jQuery('#user-0').click(function() { showAndRequire('.business', true); showAndRequire('.individual', false); }); jQuery('#user-1').click(function() { showAndRequire('.individual', true); showAndRequire('.business', false); }); function showAndRequire(section, onOff) { jQuery(section).toggle(onOff); if (onOff) { jQuery(section + ' .required input').attr('required', onOff); jQuery(section + ' .required select').attr('required', onOff); } else { jQuery(section + ' .required input').removeAttr('required'); jQuery(section + ' .required select').removeAttr('required'); } } </script>Teraz, w zależności co użytkownik wybierze firmę lub osobę fizyczną, wyświetli się tylko ta sekcja, która jest potrzebna i tylko ta sekcja będzie miała ustawione wymagane atrybuty.