Form declaration (from menu to submit)

Output a simple form, with validation and submit handlers

  1. /*
  2.  * Implementation of hook_menu()
  3.  */
  4. function mysnippet_menu() {
  5. $items['mysnippet/myform'] = array(
  6. 'title' => 'A basic form',
  7. 'description' => 'Example to create a form, validate and handle submitted values',
  8. 'page callback' => 'drupal_get_form', // we want a form
  9. 'page arguments' => array('mysnippet_create_form'),
  10. 'access arguments' => array('basic permission'), //only users with this permission enabled have access to the form otherwise use 'access callback' => TRUE,
  11. 'type' => MENU_CALLBACK, // won't be displayed in any menu you could use MENU_PRIMARY_LINKS
  12. );
  13. return $items;
  14. }
  15.  
  16. /*
  17.  * Implementation of hook_form()
  18.  */
  19. function mysnippet_create_form($form, &$form_state) {
  20. //the documentation of the form API can be found here: http://drupal.org/node/1702548
  21. $form['name'] = array(
  22. '#type' => 'textfield', // we define a simple text field
  23. '#title' => 'What is your name?',
  24. '#description' => 'you can not enter here Drupal...',
  25. '#required' => TRUE, //we do not want an empty value
  26. '#default_value'=> variable_get("basic_name",""),
  27. );
  28. return $form;
  29. }
  30.  
  31. /*
  32.  * Implementation of hook_form_validate()
  33.  */
  34. function mysnippet_create_form_validate($form, &$form_state) {//submitted values are hold in $form_state['values']
  35. // dpm($form_state['values']) //to see them all
  36. if($form_state['values']['name']=='Drupal') { // we verify that the name is not Drupal
  37. form_set_error('name', 'You can not use Drupal here...'); // if yes we set an error on the field name
  38. }
  39. }
  40.  
  41. /*
  42.  * Implementation of hook_form_submit()
  43.  */
  44. function mysnippet_create_form_submit($form, &$form_state) {
  45. //we use variable_set to record our values in the database (table variable)
  46. variable_set('basic_name', $form_state['values']['name']);
  47.  
  48. //we display a confirmation message
  49. drupal_set_message('Your settings have been saved !', 'status');
  50. }

Display errors - WSOD

The bootstrap override the values you could set to display error ad the reporting level. To be 100% sure everything is printed out when something fails in a blank screen (wsod), make index.php like this:

Properly render a field

Drupal offers a few (sometimes complicated...) solutions to output a field. Lets take an example with a date field.
To display the full rendered field: field_view_field()

Using once()

ensure ajax reload don't apply the behaviours for items already processed

Change the theme

Programmatically change the theme on runtime by implementing hook_custom_theme()

Manually clear caches

for views and panels

Add a Jquery ui library

get the library names to use in /misc/ui folder

Embed a custom page

Get the rendered output of a custom page created with page manager (ctools) module

Embed a mini panel

Get the html output of a mini-panel

alter / automatize the install process

in the .profile file of the install profile (here "mysnippet" profile)

Aegir: perform custom tasks after a new site is installed

in a custom module, in a file called mysnippet.drush.inc (keep in mind that the install process is handled by drush...)