Form API 3

26
Form API Til All Are One 1 Thursday, September 20, 2007

description

An overview of Drupal's form handling API, and a look at the changes in version 6 of Drupal.

Transcript of Form API 3

Page 1: Form API 3

Form APITil All Are One

1Thursday, September 20, 2007

Page 2: Form API 3

The Olden Days

• HTML

• Helper Functions

• Duplicate Work

• Weak Security

2Thursday, September 20, 2007

Page 3: Form API 3

Node Forms

Baby Jesus

3Thursday, September 20, 2007

Page 4: Form API 3

Form API Basics

• Structured Data

• Workflow

• Best Practices

• Render to HTML

4Thursday, September 20, 2007

Page 5: Form API 3

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

Page 6: Form API 3

Form API Basics

6Thursday, September 20, 2007

Page 7: Form API 3

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

Page 8: Form API 3

Stupid Form Tricks

• hook_forms()Map form IDs

• hook_elements()Add new form elements

• hook_form_alter()Change any form

8Thursday, September 20, 2007

Page 9: Form API 3

New In Drupal 6

9Thursday, September 20, 2007

Page 10: Form API 3

IM IN UR FORMZRENAMIN UR BUTTONZ

10Thursday, September 20, 2007

Page 11: Form API 3

•Button Handlers

•$op is dead

•Image buttons!

•Buttons renamable

•AHAH

11Thursday, September 20, 2007

Page 12: Form API 3

WANT MAHFORM STATE

12Thursday, September 20, 2007

Page 13: Form API 3

•Form State

•Input Values

•Workflow

•Storage

•No Globals

13Thursday, September 20, 2007

Page 14: Form API 3

#MULTISTEP!?!11!DO NOT WANT

14Thursday, September 20, 2007

Page 15: Form API 3

•All Forms

•Just Set ‘rebuild’

•Forms Cached

•Handlers In Control

•Validation, too!

15Thursday, September 20, 2007

Page 16: Form API 3

FORMZ CAT IZ BORED.WE HAZ EXAMPLE

16Thursday, September 20, 2007

Page 17: Form API 3

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

Page 18: Form API 3

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

Page 19: Form API 3

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

Page 20: Form API 3

20Thursday, September 20, 2007

Page 21: Form API 3

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

Page 22: Form API 3

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

Page 23: Form API 3

Here’s Where ItStarts To Rock

23Thursday, September 20, 2007

Page 24: Form API 3

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

Page 25: Form API 3

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

Page 26: Form API 3

And Then theEwoks Danced

26Thursday, September 20, 2007