260 likes | 718 Views
An overview of Drupal's form handling API, and a look at the changes in version 6 of Drupal.
E N D
Form API Til All Are One Thursday, September 20, 2007 1
The Olden Days •HTML •Helper Functions •Duplicate Work •Weak Security Thursday, September 20, 2007 2
Baby Jesus Node Forms Thursday, September 20, 2007 3
Form API Basics •Structured Data •Workflow •Best Practices •Render to HTML Thursday, September 20, 2007 4
Form API Basics function my_form() { $form = array(); $form['foo'] = array( '#type' => 'textarea', '#title' => t('Your foo'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit yo foo'), ); return $form; } Thursday, September 20, 2007 5
Form API Basics Thursday, September 20, 2007 6
Behind The Scenes •drupal_get_form(‘my_form’) •my_form() •$_POST, XSS, XSRF •my_form_validate() •my_form_submit() •drupal_render() Thursday, September 20, 2007 7
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
New In Drupal 6 Thursday, September 20, 2007 9
IM IN UR FORMZ RENAMIN UR BUTTONZ Thursday, September 20, 2007 10
•Button Handlers •$op is dead •Image buttons! •Buttons renamable •AHAH Thursday, September 20, 2007 11
WANT MAH FORM STATE Thursday, September 20, 2007 12
•Form State •Input Values •Workflow •Storage •No Globals Thursday, September 20, 2007 13
#MULTISTEP!?!11! DO NOT WANT Thursday, September 20, 2007 14
•All Forms •Just Set ‘rebuild’ •Forms Cached •Handlers In Control •Validation, too! Thursday, September 20, 2007 15
FORMZ CAT IZ BORED. WE HAZ EXAMPLE Thursday, September 20, 2007 16
Multiple Buttons function my_form() { ... $form['submit'] = array( '#type' => 'submit', '#title' => t('Your foo'), ); $form['delete'] = array( '#type' => 'submit', '#value' => t('Preview'), '#submit' => array('delete_submit'), '#validate' => array('delete_validate'), ); return $form; } Thursday, September 20, 2007 17
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
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
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
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
Here’s Where It Starts To Rock Thursday, September 20, 2007 23
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
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
And Then the Ewoks Danced Thursday, September 20, 2007 26