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()

  1. $mydate = field_view_field('node', $node, 'field_mydate');
  2. print render($mydate);
  3.  
  4. /*display
  5. <div class="field field-name-field-mydate field-type-date field-label-above">
  6.   <div class="field-label">Date:</div>
  7.   <div class="field-items">
  8.   <div class="field-item even">
  9.   <span class="date-display-single">Wednesday, 10 October, 2012</span>
  10.   </div>
  11.   </div>
  12. </div>
  13. */

note: default wrappers will be displayed (even if you choose to not display the label in the display settings for instance...)
to choose a different formatter than the default one

  1. $mydate = field_view_field('node', $node, 'field_mydate', array('type'=>'my_custom_one');

To display the raw value of the field: field_get_items()

  1. $mydate = field_get_items('node', $node, 'field_mydate');
  2. print $mydate[0]['value'];
  3. //display 2012-10-10T00:00:00

will display the value as it exists on the db. Can be useful for strings.

To display the formatted value, without any < div >: field_view_value()

  1. $mydate = field_get_items('node', $node, 'field_mydate');
  2. $output = field_view_value('node', $node, 'field_mydate' , $mydate[0]);
  3. print $output['#markup']; //for files use render($output);
  4. //display <span class="date-display-single">Wednesday, 10 October, 2012</span>

will display the formatted value, with only a surrounding span.
note: you can specify a formatter to display an image with a preset

  1. $output = field_view_value('node', $node, 'field_myimage', $myimage[0], array(
  2. 'type' => 'image',
  3. 'settings' => array(
  4. 'image_style' => 'thumbnail',
  5. 'image_link' => 'content',
  6. ),
  7. ));

not so easy !!

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