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. }

override a default .tpl.php file in a custom module

to basically use a template file in a custom module use the hook_theme_registry_alter(&$theme_registry) like this

Testing date fields: strtotime tips

Unit testing the creation of a node with a date field could fail because of wrong interpretation of the date by strtotime function

Enable block

There is no available API to programmatically set a block. Like Drupal core does, we have to use db directly.

simpletest: count checkboxes checked

Sometimes it is useful to know exactly the amount of options enabled with a xpath expression

Add a conditional stylesheet for IE

the options of drupal_add_css allow the use of conditional stylesheets

debug drush (and php-cli)

Drush uses the cli version of php so traditional debugging tools and functions don't work.

Create an image style

to create in code, programmatically an image style (previously called image cache preset)

Current path alias

to get the current page alias path use

Unset core stylesheet in a custom theme

by using use hook_css_alter() in template.php