Form API 3
-
Upload
jeff-eaton -
Category
Technology
-
view
9.253 -
download
4
description
Transcript of Form API 3
Form APITil All Are One
1Thursday, September 20, 2007
The Olden Days
• HTML
• Helper Functions
• Duplicate Work
• Weak Security
2Thursday, September 20, 2007
Node Forms
Baby Jesus
3Thursday, September 20, 2007
Form API Basics
• Structured Data
• Workflow
• Best Practices
• Render to HTML
4Thursday, September 20, 2007
Form API Basicsfunction 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;}
5Thursday, September 20, 2007
Form API Basics
6Thursday, September 20, 2007
Behind The Scenes• drupal_get_form(‘my_form’)
• my_form()
• $_POST, XSS, XSRF
• my_form_validate()
• my_form_submit()
• drupal_render()
7Thursday, September 20, 2007
Stupid Form Tricks
• hook_forms()Map form IDs
• hook_elements()Add new form elements
• hook_form_alter()Change any form
8Thursday, September 20, 2007
New In Drupal 6
9Thursday, September 20, 2007
IM IN UR FORMZRENAMIN UR BUTTONZ
10Thursday, September 20, 2007
•Button Handlers
•$op is dead
•Image buttons!
•Buttons renamable
•AHAH
11Thursday, September 20, 2007
WANT MAHFORM STATE
12Thursday, September 20, 2007
•Form State
•Input Values
•Workflow
•Storage
•No Globals
13Thursday, September 20, 2007
#MULTISTEP!?!11!DO NOT WANT
14Thursday, September 20, 2007
•All Forms
•Just Set ‘rebuild’
•Forms Cached
•Handlers In Control
•Validation, too!
15Thursday, September 20, 2007
FORMZ CAT IZ BORED.WE HAZ EXAMPLE
16Thursday, September 20, 2007
Multiple Buttonsfunction 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;}
17Thursday, September 20, 2007
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>';}
18Thursday, September 20, 2007
Multiple Buttons
function my_button_handler(&$form_state) { $button = $form_state['clicked_button']; if ($button['#my_special_flag']) { // Do custom stuff here }}
19Thursday, September 20, 2007
20Thursday, September 20, 2007
function my_form($form_state) { if (empty($form_state[‘step’]) { $form_state[‘step’] = 1; }
switch ($form_state[‘step’]) { case 1: ... case 2: ... case 3: ... }}
Multi-page Form
21Thursday, September 20, 2007
function my_form_submit($form_state) { $values = $form_state[‘values’]; $form_state[‘step’] = $values[‘step’]++;
if ($form_state[‘step’] < 3) { $form_state[‘rebuild’] = TRUE; }}
Multi-page Form
22Thursday, September 20, 2007
Here’s Where ItStarts To Rock
23Thursday, September 20, 2007
Conditional CAPTCHA
function my_form_alter(&$form, $form_id, $form_state) { $form['#validate'][] = 'captcha_validate'; if ($form_state['needs_captcha']) { // Add a captcha form! }}
24Thursday, September 20, 2007
Conditional CAPTCHAfunction 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; } }}
25Thursday, September 20, 2007
And Then theEwoks Danced
26Thursday, September 20, 2007