Community Documentation

block_example_block

5 block_example.module block_example_block($op = 'list', $delta = 0, $edit = array())
6 block_example.module block_example_block($op = 'list', $delta = '', $edit = array())

Implementation of hook_block().

This hook both declares to Drupal what blocks are provided by the module, and generates the contents of the blocks themselves.

Related topics

File

block_example/block_example.module, line 25
This is an example outlining how a module can define blocks to be displayed on each page.

Code

<?php
function block_example_block($op = 'list', $delta = '', $edit = array()) {
  // The $op parameter determines what piece of information is being requested.
  switch ($op) {
    case 'list':
      // If $op is "list", we just need to return a list of block descriptions.
      // This is used to provide a list of possible blocks to the administrator;
      // end users will not see these descriptions.
      $blocks['configurable-text'] = array(
        'info' => t('Example: configurable text string'),
      );
      // A block can provide default settings. In this case we'll enable the
      // block and make it visible only on the 'node/*' pages.
      $blocks['empty'] = array(
        'info' => t('Example: empty block'), 
        'status' => TRUE, 
        'weight' => 0, 
        'visibility' => 1, 
        'pages' => 'node/*',
      );
      return $blocks;
    case 'configure':
      // If $op is "configure", we need to provide the administrator with a
      // configuration form. The $delta parameter tells us which block is being
      // configured. In this example, we'll allow the administrator to customize
      // the text of the first block.
      $form = array();
      if ($delta == 'configurable-text') {
        // All we need to provide is a text field, Drupal will take care of
        // the other block configuration options and the save button.
        $form['block_example_string'] = array(
          '#type' => 'textfield', 
          '#title' => t('Block contents'), 
          '#size' => 60, 
          '#description' => t('This string will appear in the example block.'), 
          '#default_value' => variable_get('block_example_string',   t('Some example content.')),
        );
      }
      return $form;
    case 'save':
      // If $op is "save", we need to save settings from the configuration form.
      // Since the first block is the only one that allows configuration, we
      // need to check $delta to make sure we only save it.
      if ($delta == 'configurable-text') {
        // Have Drupal save the string to the database.
        variable_set('block_example_string', $edit['block_example_string']);
      }
      return;
    case 'view':
      // If $op is "view", then we need to generate the block for display
      // purposes. The $delta parameter tells us which block is being requested.
      switch ($delta) {
        case 'configurable-text':
          // The subject is displayed at the top of the block. Note that it
          // should be passed through t() for translation.
          $block['subject'] = t('Title of configurable-text block');
          // The content of the block is typically generated by calling a custom
          // function.
          $block['content'] = block_example_contents(1);
          break;
        case 'empty':
          $block['subject'] = t('Title of block #2');
          $block['content'] = block_example_contents(2);
          break;
      }
      return $block;
  }
}
?>

Comments

Numeric vs. string deltas

If you attempt a mixed use of deltas, using both numbers and strings, this is important to know.

For some reason you need to specify string deltas within $op = 'view' or your block contents will not show. When I had a string delta defined after the numeric ones delta 0's content was being displayed, instead. When I printed out the $delta from within case 0:, both 0 and my string delta were printed.

Here's an example of the correct order:

    switch ($delta) {
      case 'downloaded':
          return og_toolkits_most_downloaded();

      case 'mod-topics':
        return og_toolkits_topics_moderation();

      case 0:
        return og_toolkits_block_secondary();

Once I moved the string delta definition before the numeric ones, there was no issue. Hope this helps save some time and headache!

Login or register to post comments