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; } } /** * A block content function. */ function block_example_contents($which_block) { switch ($which_block) { case 1: // Modules would typically perform some database queries to fetch the // content for their blocks. Here, we'll just use the variable set in the // block configuration or, if none has set, a default value. return variable_get('block_example_string', t('A default value.')); case 2: // It is possible that your block will not have any content, since it is // probably dynamically constructed. In this case, Drupal will not display // the block at all. return; } } /** * @} End of "defgroup block_example". */