Form API 3

Post on 15-Jan-2015

9.253 views 4 download

Tags:

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

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