PracticalWeb Ltd

Websites that work for you.

Programatic Block Creation in Drupal

To remove static blocks and replace with as custom block.

Implement hook_block specifying the default visibility and so on

<?php $blocks[‘random’] = array( ‘info’ => t(‘Random’), ‘weight’ => 0, ‘status’ => 1, ‘region’ => ‘sidebar’, ‘pages’ => ‘offers’, ‘visibility’ => 0, // all pages except ‘cache’ => BLOCK_CACHE_PER_PAGE, );

?>

Create an update hook that deletes the old blocks and boxes (I’ve specified the ID as I know they won’t change on my site).

<?php

function mymodule_update_6101(){

$items = array();
$items[] = update_sql('DELETE FROM {boxes} WHERE bid in (2, 12,13)');
$items[] = update_sql("DELETE FROM {blocks} WHERE module = 'block' AND delta in (2, 12, 13)");

// Update the ‘blocks’ DB table with the blocks currently exported by modules. // It’s a “private” function called when you visit // the admin/build/block/list/ page // calling it here causes the rehash which you otherwise have to visit the page to get _block_rehash();

// clear the cache cache_clear_all(); return $items; }

?>

When you run update.php your shiny new blocks should then be immediately available with no manual steps required.

This makes it so much easier to test your upgrades.

Comments