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

Fine tune node permissions

The default CRUD + view operations on nodes can be fine tuned by using

Change hook order

Different implementations of the same hook execute in an order based on the weight value in the system table then the alphabetical order. You can change the order by updating the weight in the db but it could be more fine tuned to just change the hook order by using hook_module_implements_alter().

Ajax / Json

How-to simply update a piece of content on click with Jquery?
in your .module file

Extract page content while simple testing with xpath and DOM

It is sometimes useful to grab content from the page that is currently tested. The idea is to search for the tag with xpath then convert it to DOM to get data... For instance, let's get the title and the href value of the second tab.

Import an external file

file_save_data does (almost) all the job for us and drupal_http_request allows to get the file even through a proxy.

Programmatically redirect

There is a drupal function ready to use to redirect called drupal_goto();
but this function does a direct redirection and sometimes it is useful to let Drupal continue doing his stuff by setting $_GET['destination'] instead

xpath examples & domxpath use with drupal

When the wonderful Feeds module can not be used it is useful to know how to use domxpath and to write queries.
usage:

Create a csv file

this is php code using Drupal file stream

Dependent field in views plugin

When building views plugin it is better to use ctools #dependency property than #state FAPI