8. Stupid Form Tricks
• hook_forms()
Map form IDs
• hook_elements()
Add new form elements
• hook_form_alter()
Change any form
Thursday, September 20, 2007 8
18. Multiple Buttons
function delete_validate(&$form_state) {
$values = $form_state['values'];
if (empty($values['foo'])) {
form_set_error('title', t('No! Bad!');
}
}
function delete_submit(&$form_state) {
$values = $form_state['values'];
// Delete Yo Stuff!
$form_state['redirect'] = '<front>';
}
Thursday, September 20, 2007 18
19. Multiple Buttons
function my_button_handler(&$form_state) {
$button = $form_state['clicked_button'];
if ($button['#my_special_flag']) {
// Do custom stuff here
}
}
Thursday, September 20, 2007 19
21. Multi-page Form
function my_form($form_state) {
if (empty($form_state[‘step’]) {
$form_state[‘step’] = 1;
}
switch ($form_state[‘step’]) {
case 1:
...
case 2:
...
case 3:
...
}
}
Thursday, September 20, 2007 21
22. Multi-page Form
function my_form_submit($form_state) {
$values = $form_state[‘values’];
$form_state[‘step’] = $values[‘step’]++;
if ($form_state[‘step’] < 3) {
$form_state[‘rebuild’] = TRUE;
}
}
Thursday, September 20, 2007 22
23. Here’s Where It
Starts To Rock
Thursday, September 20, 2007 23
24. Conditional CAPTCHA
function my_form_alter(&$form, $form_id, $form_state) {
$form['#validate'][] = 'captcha_validate';
if ($form_state['needs_captcha']) {
// Add a captcha form!
}
}
Thursday, September 20, 2007 24
25. Conditional CAPTCHA
function captcha_validate(&$form_state) {
$values = $form_state['values'];
if (!empty($values['captcha'])) {
if (captcha_failed($values['captcha'])) {
form_set_error('title', t('No! Bad spammer!'));
}
}
elseif (is_spammy($values)) {
$form_state['needs_captcha'] = TRUE;
$form_state['rebuild'] = TRUE;
}
}
}
Thursday, September 20, 2007 25
26. And Then the
Ewoks Danced
Thursday, September 20, 2007 26