/** * Declare a block or set of blocks. * * Any module can export a block (or blocks) to be displayed by defining * the _block hook. This hook is called by theme.inc to display a block, * and also by block.module to procure the list of available blocks. * * @param $op * What kind of information to retrieve about the block or blocks. * Possible values: * - 'list': A list of all blocks defined by the module. * - 'configure': Configuration form for the block. * - 'save': Save the configuration options. * - 'view': Process the block when enabled in a region in order to view its contents. * @param $delta * Which block to return (not applicable if $op is 'list'). This is a * descriptive string used to identify blocks within each module and also * within the theme system. The $delta for each block is defined within * the array that your module returns when $op is 'list' (see below). * @param $edit * If $op is 'save', the submitted form data from the configuration form. * @return * - If $op is 'list': An associative array whose keys define the $delta * for each block and whose values contain the block descriptions. Each * block description is itself an associative array, with the following * key-value pairs: * - 'info': (required) The human-readable name of the block. * - 'cache': A bitmask of flags describing how the block should behave with * respect to block caching. The following shortcut bitmasks are provided * as constants in block.module: * - BLOCK_CACHE_PER_ROLE (default): The block can change depending on the * roles the user viewing the page belongs to. * - BLOCK_CACHE_PER_USER: The block can change depending on the user * viewing the page. This setting can be resource-consuming for sites * with large number of users, and should only be used when * BLOCK_CACHE_PER_ROLE is not sufficient. * - BLOCK_CACHE_PER_PAGE: The block can change depending on the page * being viewed. * - BLOCK_CACHE_GLOBAL: The block is the same for every user on every * page where it is visible. * - BLOCK_NO_CACHE: The block should not get cached. * - 'weight', 'status', 'region', 'visibility', 'pages': * You can give your blocks an explicit weight, enable them, limit them to * given pages, etc. These settings will be registered when the block is first * loaded at admin/block, and from there can be changed manually via block * administration. * Note that if you set a region that isn't available in a given theme, the * block will be registered instead to that theme's default region (the first * item in the _regions array). * - If $op is 'configure': optionally return the configuration form. * - If $op is 'save': return nothing. * - If $op is 'view': return an array which must define a 'subject' element * and a 'content' element defining the block indexed by $delta. * * The functions mymodule_display_block_exciting and _amazing, as used in the * example, should of course be defined somewhere in your module and return the * content you want to display to your users. If the "content" element is empty, * no block will be displayed even if "subject" is present. * * After completing your blocks, do not forget to enable them in the * block admin menu. * * For a detailed usage example, see block_example.module. */ function hook_block($op = 'list', $delta = '', $edit = array()) { if ($op == 'list') { $blocks['exciting'] = array('info' => t('An exciting block provided by Mymodule.'), 'weight' => 0, 'status' => 1, 'region' => 'left'); $blocks['amazing'] = array('info' => t('An amazing block provided by Mymodule.'), 'cache' => BLOCK_CACHE_PER_ROLE | BLOCK_CACHE_PER_PAGE); return $blocks; } elseif ($op == 'configure' && $delta == 'exciting') { $form['items'] = array('#type' => 'select', '#title' => t('Number of items'), '#default_value' => variable_get('mymodule_block_items', 0), '#options' => array('1', '2', '3')); return $form; } elseif ($op == 'save' && $delta == 'exciting') { variable_set('mymodule_block_items', $edit['items']); } elseif ($op == 'view') { switch ($delta) { case 'exciting': $block = array('subject' => t('Default title of the exciting block'), 'content' => mymodule_display_block_exciting()); break; case 'amazing': $block = array('subject' => t('Default title of the amazing block'), 'content' => mymodule_display_block_amazing()); break; } return $block; } }
/** * Process the block when enabled in a region in order to view its contents. * * @param $delta * Which block to return. This is a descriptive string used to identify * blocks within each module and also within the theme system. * The $delta for each block is defined within the array that your module * returns when the hook_block_info() implementation is called. * @return * An array which must define a 'subject' element and a 'content' element * defining the block indexed by $delta. * * The functions mymodule_display_block_exciting and _amazing, as used in the * example, should of course be defined somewhere in your module and return the * content you want to display to your users. If the "content" element is empty, * no block will be displayed even if "subject" is present. * * For a detailed usage example, see block_example.module. */ function hook_block_view($delta = '') { switch ($delta) { case 'exciting': $block = array('subject' => t('Default title of the exciting block'), 'content' => mymodule_display_block_exciting()); break; case 'amazing': $block = array('subject' => t('Default title of the amazing block'), 'content' => mymodule_display_block_amazing()); break; } return $block; }